1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Article 4] [Menys Còmode] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Aquesta és CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Molt bé, benvinguts de nou a la secció. 5 00:00:10,000 --> 00:00:13,000 A la secció d'aquesta setmana farem un parell de coses. 6 00:00:13,000 --> 00:00:17,000 Anem a la primera sèrie de problemes recapitulació 2, 7 00:00:17,000 --> 00:00:20,000 que és el conjunt de problemes Cèsar i Vigenère. 8 00:00:20,000 --> 00:00:23,000 I després anem a bussejar en Concurs 0 opinió 9 00:00:23,000 --> 00:00:26,000 i passar una mica de temps tornar a tapar el que hem parlat 10 00:00:26,000 --> 00:00:30,000 en cadascuna de les classes fins ara, i farem uns quants problemes 11 00:00:30,000 --> 00:00:32,000 de concursos de l'any anterior. 12 00:00:32,000 --> 00:00:36,000 Així que vostès tenen una bona manera de preparar-se per això. 13 00:00:36,000 --> 00:00:40,000 >> Per començar, he arrencat un parell de bones solucions 14 00:00:40,000 --> 00:00:45,000 per al conjunt de problema anterior, problema setembre 2, en aquest espai. 15 00:00:45,000 --> 00:00:48,000 Si vostès tots els afectats en aquest enllaç, 16 00:00:48,000 --> 00:00:53,000 i si fa clic en el meu nom i feu clic a la meva primera revisió 17 00:00:53,000 --> 00:00:56,000 veuràs caesar.c, que és exactament el que estic buscant. 18 00:00:56,000 --> 00:01:00,000 Parlarem d'això molt ràpidament. 19 00:01:00,000 --> 00:01:02,000 Això és només una solució de mostra. 20 00:01:02,000 --> 00:01:05,000 Això no és necessàriament la solució perfecta. 21 00:01:05,000 --> 00:01:08,000 Hi ha moltes maneres diferents d'escriure això, 22 00:01:08,000 --> 00:01:10,000 però hi ha algunes coses que jo volia destacar 23 00:01:10,000 --> 00:01:13,000 que vaig veure quan estava classificació, els errors més comuns que crec que 24 00:01:13,000 --> 00:01:18,000 aquesta solució fa una feina molt bona de la direcció. 25 00:01:18,000 --> 00:01:22,000 >> La primera és tenir algun tipus de comentari encapçalat a la part superior. 26 00:01:22,000 --> 00:01:25,000 En les línies 1 a 7 veuen els detalls, 27 00:01:25,000 --> 00:01:28,000 Què és exactament aquest programa està fent. 28 00:01:28,000 --> 00:01:32,000 Una bona pràctica estàndard quan estàs escrivint codi C 29 00:01:32,000 --> 00:01:35,000 sense tenir en compte si el seu programa està contingut en un sol arxiu o 30 00:01:35,000 --> 00:01:38,000 si està dividit en diversos arxius és tenir algun tipus de 31 00:01:38,000 --> 00:01:40,000 orientar comentari al cim. 32 00:01:40,000 --> 00:01:43,000 Això és també per les persones que surten i a programar en el món real. 33 00:01:43,000 --> 00:01:47,000 Aquí és on posaran la informació de drets d'autor. 34 00:01:47,000 --> 00:01:50,000 A continuació s'inclou el #. 35 00:01:50,000 --> 00:01:55,000 En la línia 16 no és això # defineix, que tornarem a una mica. 36 00:01:55,000 --> 00:01:59,000 I després, una vegada que la funció s'inicia, una vegada que s'inicia principals, 37 00:01:59,000 --> 00:02:03,000 ja que aquest programa ha estat tot contingut en una sola funció 38 00:02:03,000 --> 00:02:09,000 la primera cosa que succeeix-i això és molt idiomàtic i típic d'un programa en C 39 00:02:09,000 --> 00:02:14,000 que acull els arguments de línia de comandes-és que es comprova immediatament 40 00:02:14,000 --> 00:02:18,000 >> per al recompte d'arguments, argc. 41 00:02:18,000 --> 00:02:24,000 Aquí veiem que aquest programa està a l'espera 2 arguments exactament. 42 00:02:24,000 --> 00:02:27,000 Recordeu que cal el primer argument és l'especial 43 00:02:27,000 --> 00:02:29,000 que sempre és el nom del programa que està sent executat, 44 00:02:29,000 --> 00:02:31,000 el nom del fitxer executable. 45 00:02:31,000 --> 00:02:36,000 I el que això fa és que evita que l'usuari executi el programa 46 00:02:36,000 --> 00:02:42,000 amb arguments més o menys. 47 00:02:42,000 --> 00:02:44,000 La raó per la qual desitja comprovar això immediatament és perquè 48 00:02:44,000 --> 00:02:52,000 en realitat no podem accedir a aquesta matriu argv aquí fiable 49 00:02:52,000 --> 00:02:55,000 fins que haguem comprovat per veure el gran que és. 50 00:02:55,000 --> 00:02:58,000 >> Un dels problemes més comuns que vaig veure va ser la gent immediatament aniria en 51 00:02:58,000 --> 00:03:01,000 i apropiació de argv [1]. 52 00:03:01,000 --> 00:03:06,000 Havien agafar l'argument clau de la matriu i la hi a a i comprovar-hi, 53 00:03:06,000 --> 00:03:11,000 i després es faria la prova per argc, així com la prova següent, 54 00:03:11,000 --> 00:03:16,000 si el primer argument era de fet un nombre enter, alhora, 55 00:03:16,000 --> 00:03:20,000 i això no funciona, perquè en el cas que no hi hagi arguments proporcionats 56 00:03:20,000 --> 00:03:26,000 et agafar un argument que no hi és o intentar agafar un que no hi és. 57 00:03:26,000 --> 00:03:29,000 >> L'altra cosa important que s'ha de notar és que 58 00:03:29,000 --> 00:03:32,000 un sempre vol imprimir algun tipus de missatge d'error útil 59 00:03:32,000 --> 00:03:34,000 per a l'usuari per orientar. 60 00:03:34,000 --> 00:03:37,000 Estic segur que tinc tots els programes d'execució que de sobte es bloqueja, 61 00:03:37,000 --> 00:03:41,000 i s'obté poc ridícul aquest quadre de diàleg que apareix i diu 62 00:03:41,000 --> 00:03:44,000 alguna cosa terriblement críptic i potser et dóna un codi d'error o alguna cosa per l'estil 63 00:03:44,000 --> 00:03:47,000 que no té sentit. 64 00:03:47,000 --> 00:03:50,000 Aquí és on vostè realment vol oferir alguna cosa útil 65 00:03:50,000 --> 00:03:54,000 i orientades a l'usuari perquè quan s'executi van "Oh," cara de palma. 66 00:03:54,000 --> 00:03:58,000 "Sé exactament què fer. Sé com solucionar aquest problema." 67 00:03:58,000 --> 00:04:01,000 >> Si no s'imprimeix un missatge i després s'acaba realment 68 00:04:01,000 --> 00:04:04,000 deixant a l'usuari anar examinar seves fonts 69 00:04:04,000 --> 00:04:07,000 per esbrinar el que va sortir malament. 70 00:04:07,000 --> 00:04:11,000 També hi ha algunes vegades que vostè va a utilitzar diferents codis d'error. 71 00:04:11,000 --> 00:04:14,000 Aquí hem usat un per dir que va ser un error, 72 00:04:14,000 --> 00:04:16,000 es va produir un error, es va produir un error. 73 00:04:16,000 --> 00:04:20,000 Programes més grans, sovint els programes que són cridats per altres programes, 74 00:04:20,000 --> 00:04:25,000 tornarà algun tipus de codis d'error especials en diferents escenaris 75 00:04:25,000 --> 00:04:28,000 per comunicar-se mitjançant programació quina altra manera 76 00:04:28,000 --> 00:04:32,000 només ha d'utilitzar un missatge agradable per Anglès. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 A mesura que treballem cap avall, es pot veure que llençar la clau. 79 00:04:37,000 --> 00:04:40,000 Posem a prova per veure si la clau encaixa. 80 00:04:40,000 --> 00:04:42,000 Vam rebre un missatge de l'usuari. 81 00:04:42,000 --> 00:04:46,000 La raó per la qual ho fem en aquest cicle do while, i això és una cosa que anem a cobrir 82 00:04:46,000 --> 00:04:50,000 en poc poc, però resulta que si escriu control D 83 00:04:50,000 --> 00:04:54,000 quan vostè aconsegueix que GetString del sistema en el terminal 84 00:04:54,000 --> 00:04:59,000 el que en realitat fa és que envia un caràcter especial 85 00:04:59,000 --> 00:05:01,000 per al programa. 86 00:05:01,000 --> 00:05:05,000 Es crida l'ELF o el caràcter de fi d'arxiu. 87 00:05:05,000 --> 00:05:08,000 I en aquest cas, la nostra cadena de missatge serà nul, 88 00:05:08,000 --> 00:05:14,000 així que no va ser una cosa que ens registrem en el conjunt de problemes en si. 89 00:05:14,000 --> 00:05:17,000 >> Però a mesura que avancem, ara que hem començat a parlar de punters 90 00:05:17,000 --> 00:05:21,000 i l'assignació dinàmica de memòria en el munt, 91 00:05:21,000 --> 00:05:25,000 comprovar la nul · la sempre que tingui una funció que podria 92 00:05:25,000 --> 00:05:30,000 retornarà un valor nul com a valor és una cosa que vostè vol aconseguir en l'hàbit de fer-ho. 93 00:05:30,000 --> 00:05:33,000 Això és aquí principalment per il · lustració. 94 00:05:33,000 --> 00:05:36,000 Però quan vostè veu GetString en el futur, 95 00:05:36,000 --> 00:05:41,000 per la qual cosa des del 4 de problemes, haurà de tenir això en ment. 96 00:05:41,000 --> 00:05:44,000 Un cop més, això no és un problema per a qualsevol problema 3, ja que no havia cobert encara. 97 00:05:44,000 --> 00:05:53,000 Finalment, arribem a aquesta part on tenim al bucle de xifrat principal, 98 00:05:53,000 --> 00:05:57,000 i hi ha un parell de coses que succeeixen aquí. 99 00:05:57,000 --> 00:06:02,000 En primer lloc, iterar sobre la cadena del missatge complet en si. 100 00:06:02,000 --> 00:06:07,000 Aquí hem mantingut l'anomenada strlen en la condició, 101 00:06:07,000 --> 00:06:12,000 que alguns de vosaltres heu assenyalat, no és un gran camí per recórrer. 102 00:06:12,000 --> 00:06:15,000 Resulta que en aquest cas no ho és també gran, 103 00:06:15,000 --> 00:06:20,000 en part perquè estem modificant el contingut del missatge en si mateix 104 00:06:20,000 --> 00:06:27,000 dins del bucle for, de manera que si tenim un missatge que és 10 caràcters de longitud, 105 00:06:27,000 --> 00:06:32,000 la primera vegada que comencis per bucle strlen tornarà què? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Però si a continuació, modifiqui missatge, diguem de modificar el seu caràcter 5th, 108 00:06:40,000 --> 00:06:46,000 i que tirem un caràcter \ 0 en la 5 ª posició, 109 00:06:46,000 --> 00:06:49,000 en una iteració posterior strlen (missatge) no tornarà el que va fer 110 00:06:49,000 --> 00:06:52,000 la primera vegada que va reiterar, 111 00:06:52,000 --> 00:06:56,000 però en comptes tornaran 5 perquè llencem en aquest terminador nul, 112 00:06:56,000 --> 00:06:59,000 i longitud de la cadena es defineix 113 00:06:59,000 --> 00:07:03,000 per la posició que \ 0. 114 00:07:03,000 --> 00:07:09,000 En aquest cas, aquesta és una gran manera d'anar perquè ho estem modificant al seu lloc. 115 00:07:09,000 --> 00:07:13,000 Però t'adones que en realitat és sorprenentment senzilla per encriptar 116 00:07:13,000 --> 00:07:16,000 si vostè pot aconseguir la matemàtica correcta. 117 00:07:16,000 --> 00:07:19,000 Tot el que es requereix és comprovar si la carta que vostè està buscant en 118 00:07:19,000 --> 00:07:21,000 és majúscula o minúscula. 119 00:07:21,000 --> 00:07:24,000 >> La raó per la qual només has de comprovar això i no han de buscar 120 00:07:24,000 --> 00:07:27,000 el cas és alfa és perquè 121 00:07:27,000 --> 00:07:30,000 si un caràcter és en majúscules o minúscules si és 122 00:07:30,000 --> 00:07:33,000 llavors és definitivament un caràcter alfabètic, 123 00:07:33,000 --> 00:07:38,000 perquè no tenim xifres majúscules i minúscules. 124 00:07:38,000 --> 00:07:41,000 L'altra cosa que fer, i això és una mica difícil- 125 00:07:41,000 --> 00:07:45,000 és que hem modificat l'estàndard de xifrat César fórmula 126 00:07:45,000 --> 00:07:49,000 que vam donar en l'especificació de problemes. 127 00:07:49,000 --> 00:07:52,000 La diferència aquí és que ens resta 128 00:07:52,000 --> 00:07:58,000 a la capital del cas en majúscules A, i després afegim majúscula 129 00:07:58,000 --> 00:08:02,000 còpia en al final. 130 00:08:02,000 --> 00:08:05,000 >> Sé que alguns de vosaltres heu fet això en el codi. 131 00:08:05,000 --> 00:08:09,000 O molts de vostès fan això en les seves presentacions? 132 00:08:09,000 --> 00:08:13,000 Tu vas fer això. Pot explicar el que això fa, Sahb? 133 00:08:13,000 --> 00:08:18,000 Restant a terme, ja que va fer un mod dreta després d'ella, 134 00:08:18,000 --> 00:08:21,000 cal treure'l, pel que d'aquesta manera s'obté [tos] posició. 135 00:08:21,000 --> 00:08:25,000 I després afegint-ho més tard canviat amb el que vostè volia. 136 00:08:25,000 --> 00:08:27,000 Sí, exactament. 137 00:08:27,000 --> 00:08:32,000 Què Sahb va dir va ser que quan volem afegir 138 00:08:32,000 --> 00:08:36,000 nostre missatge i la nostra clau junts 139 00:08:36,000 --> 00:08:42,000 i després mod que, mod que per NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 si no augmentem el nostre missatge a la corresponent gamma de 0 a 25 en primer lloc, 141 00:08:50,000 --> 00:08:54,000 llavors pot ser que acabi sobre d'aconseguir un nombre molt rar 142 00:08:54,000 --> 00:08:59,000 perquè els valors que estem mirant quan mirem missatge [i], 143 00:08:59,000 --> 00:09:03,000 quan ens fixem en el caràcter i del nostre missatge de text sense format, 144 00:09:03,000 --> 00:09:08,000 és un valor dins d'aquest rang des 65-122 145 00:09:08,000 --> 00:09:13,000 sobre la base dels valors ASCII per majúscules A a través de minúscules z. 146 00:09:13,000 --> 00:09:18,000 I així, quan ho mod per 26 o per NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 ja que era el nostre # defineix dalt a la dreta aquí, 148 00:09:23,000 --> 00:09:28,000 que ens donarà un valor que està en el rang de 0 a 25, 149 00:09:28,000 --> 00:09:30,000 i necessitem una manera d'escalar després que una còpia de seguretat 150 00:09:30,000 --> 00:09:32,000 i aconseguir que en el rang ASCII corresponent. 151 00:09:32,000 --> 00:09:36,000 La forma més senzilla de fer-ho és a escala simplement tot sota 152 00:09:36,000 --> 00:09:39,000 en el rang de 0 a 25, per començar, 153 00:09:39,000 --> 00:09:43,000 i després canviar tot de nou fins al final. 154 00:09:43,000 --> 00:09:46,000 >> Un altre error comú que he vist persones es produeixen és que 155 00:09:46,000 --> 00:09:50,000 si no ho fan realment escalament immediat 156 00:09:50,000 --> 00:09:53,000 i afegeix missatge i la clau junts i s'agreguen, per exemple, 157 00:09:53,000 --> 00:09:58,000 en una variable char, el problema amb què 158 00:09:58,000 --> 00:10:01,000 és des del missatge [i] és un nombre relativament gran per començar amb- 159 00:10:01,000 --> 00:10:05,000 recorda que és almenys 65 anys si es tracta d'un caràcter en majúscula- 160 00:10:05,000 --> 00:10:09,000 si vostè té una clau gran, diguem, una mena de 100, 161 00:10:09,000 --> 00:10:13,000 i afegeix els 2 junts en un char signat vostè va a obtenir un desbordament. 162 00:10:13,000 --> 00:10:17,000 Vostè va a obtenir un valor que és més gran que 127, 163 00:10:17,000 --> 00:10:22,000 que és el major valor que una variable de tipus char pot contenir. 164 00:10:22,000 --> 00:10:26,000 Un cop més, és per això que t'agradaria fer aquest tipus de coses, per començar. 165 00:10:26,000 --> 00:10:29,000 Alguna gent té al voltant d'aquest cas, fent una cosa i si les proves 166 00:10:29,000 --> 00:10:33,000 per veure si s'ha sobrepassat abans de fer-ho, 167 00:10:33,000 --> 00:10:36,000 però d'aquesta manera es posa al voltant d'això. 168 00:10:36,000 --> 00:10:40,000 I després, en aquesta solució que imprimeix tota la cadena en l'últim moment. 169 00:10:40,000 --> 00:10:45,000 Altres persones ens va imprimir un caràcter alhora. Tots dos són impressionants. 170 00:10:45,000 --> 00:10:51,000 En aquest punt, és el que vostès tenen alguna pregunta, algun comentari sobre això? 171 00:10:51,000 --> 00:10:56,000 Coses que t'agraden, les coses que no t'agraden? 172 00:10:56,000 --> 00:10:58,000 >> Jo tenia una pregunta. 173 00:10:58,000 --> 00:11:01,000 Potser m'ho vaig perdre durant la seva explicació, però com funciona aquest programa 174 00:11:01,000 --> 00:11:07,000 ometre els espais per a la connexió de la clau de la longitud del text? 175 00:11:07,000 --> 00:11:10,000 Això és només Cèsar xifrat. >> Oh, em sap greu, si. 176 00:11:10,000 --> 00:11:13,000 Sí, anem a veure això. 177 00:11:13,000 --> 00:11:16,000 En el xifrat César ens van donar perquè pel fet que 178 00:11:16,000 --> 00:11:18,000 només voltejat caràcters. 179 00:11:18,000 --> 00:11:27,000 Només els va girar si estiguessin en majúscules o minúscules. 180 00:11:27,000 --> 00:11:32,000 Vostès sentir molt bé sobre això? 181 00:11:32,000 --> 00:11:34,000 Siéntase lliure de copiar aquesta casa, el pren, 182 00:11:34,000 --> 00:11:37,000 comparar-lo amb el que vostès van escriure. 183 00:11:37,000 --> 00:11:42,000 Sens dubte, no dubti en enviar preguntes sobre això també. 184 00:11:42,000 --> 00:11:46,000 I un cop més, s'adonen que l'objectiu en aquest cas amb el seu problema estableix 185 00:11:46,000 --> 00:11:50,000 no és fer vostès per escriure codi perfecte per als conjunts de problemes. 186 00:11:50,000 --> 00:11:57,000 És una experiència d'aprenentatge. Si. 187 00:11:57,000 --> 00:12:01,000 >> Tornar al do while, si és igual a null, 188 00:12:01,000 --> 00:12:06,000 tan nul només significa res, simplement prem enter? 189 00:12:06,000 --> 00:12:12,000 Null és un valor de punter especial, 190 00:12:12,000 --> 00:12:17,000 i usem nul quan volem dir 191 00:12:17,000 --> 00:12:23,000 tenim una variable punter que apunta al no-res. 192 00:12:23,000 --> 00:12:28,000 I pel que generalment significa que aquesta variable, aquesta variable missatge 193 00:12:28,000 --> 00:12:35,000 està buit, i aquí, perquè estem utilitzant el tipus CS50 cadena especial, 194 00:12:35,000 --> 00:12:37,000 Quin és el tipus de sèrie CS50? 195 00:12:37,000 --> 00:12:42,000 Has vist el que és quan David es va retirar la caputxa a la conferència? 196 00:12:42,000 --> 00:12:44,000 És un covard, és un punter, oi? 197 00:12:44,000 --> 00:12:48,000 Bé, sí. >> És un char *. 198 00:12:48,000 --> 00:12:52,000 I així realment podem reemplaçar aquest 199 00:12:52,000 --> 00:12:56,000 aquí amb el missatge char *, 200 00:12:56,000 --> 00:13:04,000 i de manera que la funció GetString, sinó amb èxit obtenir una cadena de l'usuari, 201 00:13:04,000 --> 00:13:08,000 no es pot analitzar una cadena i un cas en el qual no es pot analitzar una cadena 202 00:13:08,000 --> 00:13:11,000 és que si l'usuari escriu el caràcter de fi d'arxiu, el D control, 203 00:13:11,000 --> 00:13:17,000 que no és una cosa que solen fer, però si això succeeix 204 00:13:17,000 --> 00:13:20,000 llavors la funció retornarà el valor nul com una forma de dir 205 00:13:20,000 --> 00:13:23,000 "Escolta, no he tingut una cadena." 206 00:13:23,000 --> 00:13:27,000 Què passaria si no posem missatge = null, 207 00:13:27,000 --> 00:13:30,000 que és una cosa que no hem estat fent ja? 208 00:13:30,000 --> 00:13:32,000 Per què seria això un problema? 209 00:13:32,000 --> 00:13:38,000 Perquè sé que parlem una mica en la conferència sobre pèrdues de memòria. 210 00:13:38,000 --> 00:13:42,000 Sí, farem això, i ja veurem què passa. 211 00:13:42,000 --> 00:13:44,000 >> Basilio era qüestió què passa si en realitat no tenen 212 00:13:44,000 --> 00:13:48,000 aquest missatge = prova nul · la? 213 00:13:48,000 --> 00:13:51,000 Anem a desplaçar-se fins la part superior. 214 00:13:51,000 --> 00:13:53,000 Vostès poden comentar això. 215 00:13:53,000 --> 00:13:55,000 En realitat, ho vaig a guardar en una revisió. 216 00:13:55,000 --> 00:13:58,000 Aquesta serà la Revisió 3. 217 00:13:58,000 --> 00:14:02,000 Què has de fer per executar aquest programa és que vostè ha de fer clic en aquesta icona es preparen aquí, 218 00:14:02,000 --> 00:14:04,000 i que cal afegir un argument a la mateixa. 219 00:14:04,000 --> 00:14:10,000 Vas a haver de donar-li l'argument clau, ja que volem passar en un argument de línia d'ordres. 220 00:14:10,000 --> 00:14:13,000 Aquí em vaig a donar el número 3. M'agraden 3. 221 00:14:13,000 --> 00:14:19,000 Ara el zoom de tornada, l'execució del programa. 222 00:14:19,000 --> 00:14:24,000 S'està executant, la compilació, la construcció. 223 00:14:24,000 --> 00:14:27,000 Aquí anem. S'espera que s'indiqui. 224 00:14:27,000 --> 00:14:33,000 Si escric en alguna cosa com hola-on va ser? 225 00:14:33,000 --> 00:14:38,000 Oh, el meu programa va trigar massa temps a executar-se. Em jawing durant massa temps. 226 00:14:38,000 --> 00:14:40,000 Heus aquí. 227 00:14:40,000 --> 00:14:43,000 Ara escric en hola. 228 00:14:43,000 --> 00:14:46,000 Veiem que el xifra adequada. 229 00:14:46,000 --> 00:14:52,000 Ara, què passa si fem GetString del sistema per tornar nul? 230 00:14:52,000 --> 00:14:57,000 Recorda, vaig dir que ho vam fer prement control D a la vegada. 231 00:14:57,000 --> 00:14:59,000 Vaig a desplaçar-se fins aquí. Anem a córrer de nou. 232 00:14:59,000 --> 00:15:01,000 Construcció. Aquí va. 233 00:15:01,000 --> 00:15:04,000 Ara bé, quan vaig arribar a control D 234 00:15:04,000 --> 00:15:12,000 Tinc aquesta línia que diu opt/sandbox50/bin/run.sh, fallada de segmentació. 235 00:15:12,000 --> 00:15:15,000 Han vist això abans? 236 00:15:15,000 --> 00:15:17,000 >> [Estudiant] Per què no->> Ho sentim? 237 00:15:17,000 --> 00:15:20,000 [Estudiant] Per què no hi ha un bolcat de memòria en aquest cas? 238 00:15:20,000 --> 00:15:26,000 El bolcat de memòria és-la pregunta és per què no hi ha un bolcat de memòria en aquesta llista? 239 00:15:26,000 --> 00:15:29,000 La qüestió és que no pot ser, però el buidatge de memòria és un arxiu 240 00:15:29,000 --> 00:15:31,000 que s'emmagatzema en el disc dur. 241 00:15:31,000 --> 00:15:34,000 En aquest cas hem desactivat els bolcats de memòria 242 00:15:34,000 --> 00:15:37,000 al servidor d'execució perquè no hi hagi persones seg falles 243 00:15:37,000 --> 00:15:40,000 i la creació de tones de bolcats de memòria. 244 00:15:40,000 --> 00:15:46,000 Però vostè pot aconseguir un. 245 00:15:46,000 --> 00:15:48,000 Els buidats de memòria són el tipus de coses que sovint es pot desactivar, 246 00:15:48,000 --> 00:15:52,000 i de vegades ho fa. 247 00:15:52,000 --> 00:15:55,000 La decisió de segmentació, per respondre a la seva pregunta, Basil, 248 00:15:55,000 --> 00:16:00,000 és a dir que tractem d'accedir a un punter 249 00:16:00,000 --> 00:16:05,000 que no s'ha configurat perquè apunti a res. 250 00:16:05,000 --> 00:16:09,000 Recordi Binky en el vídeo quan intenta Binky 251 00:16:09,000 --> 00:16:12,000 anar accedir a un punter que no està apuntant a alguna cosa? 252 00:16:12,000 --> 00:16:16,000 En aquest cas crec que, tècnicament, el punter apunta a alguna cosa. 253 00:16:16,000 --> 00:16:20,000 S'apunta a null, el que tècnicament és 0, 254 00:16:20,000 --> 00:16:25,000 però que es defineix a estar en un segment que no és accessible 255 00:16:25,000 --> 00:16:28,000 pel seu programa, per la qual cosa obtenir una fallada de segmentació 256 00:16:28,000 --> 00:16:31,000 perquè no s'està accedint a la memòria que està en un segment vàlid 257 00:16:31,000 --> 00:16:38,000 com el segment de munt o el segment de la pila o el segment de dades. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Alguna pregunta més sobre Cèsar? 260 00:16:48,000 --> 00:16:51,000 >> Seguirem endavant. Fem una ullada a la Revisió 2 molt ràpid. 261 00:16:51,000 --> 00:17:00,000 Això és Vigenère. 262 00:17:00,000 --> 00:17:04,000 Aquí a Vigenère 263 00:17:04,000 --> 00:17:06,000 anem a caminar a través d'aquest amb força rapidesa, ja que, de nou, 264 00:17:06,000 --> 00:17:10,000 Vigenère i César són bastant similars. 265 00:17:10,000 --> 00:17:12,000 COMENTARI DE CAPÇALERA és abans, 266 00:17:12,000 --> 00:17:17,000 # Defineix és abans per evitar l'ús d'aquests nombres màgics. 267 00:17:17,000 --> 00:17:21,000 El millor és dir que volia anar a 268 00:17:21,000 --> 00:17:23,000 un alfabet diferent o alguna cosa per l'estil. 269 00:17:23,000 --> 00:17:26,000 En lloc d'haver d'anar a canviar manualment tots els 26 en el codi 270 00:17:26,000 --> 00:17:30,000 podríem canviar això a 27 o caure cap avall 271 00:17:30,000 --> 00:17:34,000 si estiguéssim usant alfabets diferents, llengües diferents. 272 00:17:34,000 --> 00:17:38,000 Un cop més, tenim la comprovació del recompte d'arguments, 273 00:17:38,000 --> 00:17:42,000 i realment gairebé es pot prendre això com una plantilla. 274 00:17:42,000 --> 00:17:46,000 Gairebé tots els programes que vostè escriu ha de tenir- 275 00:17:46,000 --> 00:17:50,000 si es pren arguments de línia de comandes-alguna seqüència de línies 276 00:17:50,000 --> 00:17:55,000 que diu així des del principi. 277 00:17:55,000 --> 00:17:59,000 Aquesta és una de les proves de seny primer que vull fer. 278 00:17:59,000 --> 00:18:03,000 >> Aquí el que vam fer va ser que es va assegurar que 279 00:18:03,000 --> 00:18:06,000 la paraula clau és vàlida, i que va ser el segon xec que ens va fer. 280 00:18:06,000 --> 00:18:11,000 Noti de nou que ens separem això des argc i 2. 281 00:18:11,000 --> 00:18:14,000 Tingueu en compte que en aquest cas una cosa que havia de fer era lloc 282 00:18:14,000 --> 00:18:18,000 de la utilització d'un a i volíem per validar la cadena completa, 283 00:18:18,000 --> 00:18:21,000 i amb la finalitat de fer que vostè realment ha d'anar caràcter per caràcter 284 00:18:21,000 --> 00:18:23,000 sobre la cadena. 285 00:18:23,000 --> 00:18:29,000 No hi ha una bona manera de cridar a alguna cosa en ell 286 00:18:29,000 --> 00:18:31,000 perquè fins i tot, per exemple, una i tornarà a 0 287 00:18:31,000 --> 00:18:37,000 si no es pot analitzar un nombre enter, de manera que ni tan sols funciona. 288 00:18:37,000 --> 00:18:42,000 De nou, bonic missatge indicant a l'usuari exactament el que va succeir. 289 00:18:42,000 --> 00:18:45,000 Llavors aquí, de nou, també s'ocupen dels casos en 290 00:18:45,000 --> 00:18:50,000 l'usuari escriu un caràcter de control D aleatori. 291 00:18:50,000 --> 00:18:54,000 >> I llavors Charlotte tenia una pregunta anterior sobre la manera com gestionem per saltar espais 292 00:18:54,000 --> 00:18:57,000 en la nostra cadena aquí. 293 00:18:57,000 --> 00:19:00,000 Això va ser una mica semblant al que vam fer amb el programa de Myspace 294 00:19:00,000 --> 00:19:04,000 que vam fer a la secció, i va treballar la manera com aquest 295 00:19:04,000 --> 00:19:08,000 és que ens va tornar la quantitat de lletres que havíem vist. 296 00:19:08,000 --> 00:19:13,000 A mesura que entrem en la cadena del missatge, ja que caminem sobre el caràcter per caràcter, 297 00:19:13,000 --> 00:19:16,000 ens va tornar l'índex com a part del nostre bucle for, i després ens va tornar també 298 00:19:16,000 --> 00:19:21,000 el nombre de lletres, de manera que no caràcters especials, que no són nombres, no blanc l'espai 299 00:19:21,000 --> 00:19:27,000 que havíem vist en la variable independent. 300 00:19:27,000 --> 00:19:33,000 I a continuació, aquesta solució modifica la clau 301 00:19:33,000 --> 00:19:41,000 per obtenir un enter de clau real, i ho fa sobre la marxa, 302 00:19:41,000 --> 00:19:47,000 just abans que després es torna a xifrar el caràcter real del missatge. 303 00:19:47,000 --> 00:19:50,000 Hi ha algunes solucions que eren perfectament genials 304 00:19:50,000 --> 00:19:58,000 que modificaria la tecla de dalt quan les proves de validesa de la clau. 305 00:19:58,000 --> 00:20:01,000 A més d'assegurar-se que el caràcter i la paraula clau 306 00:20:01,000 --> 00:20:05,000 va ser un caràcter alfabètic que també el va convertir en un enter 307 00:20:05,000 --> 00:20:13,000 en el rang de 0 a 25 per saltar llavors haver de fer que més endavant en aquest bucle. 308 00:20:13,000 --> 00:20:18,000 Un cop més, veiem aquí és realment el mateix codi 309 00:20:18,000 --> 00:20:22,000 que es va utilitzar en Caesar en aquest punt. 310 00:20:22,000 --> 00:20:25,000 El estàs fent exactament el mateix, així que el veritable truc és trobar la 311 00:20:25,000 --> 00:20:30,000 com convertir la paraula clau en un nombre sencer. 312 00:20:30,000 --> 00:20:35,000 >> Una cosa que hem fet aquí és una mica dens 313 00:20:35,000 --> 00:20:39,000 És hem repetit aquesta frase, suposo que es podria anomenar, 314 00:20:39,000 --> 00:20:45,000 3 vegades per separat en les línies 58, 59, i 61. 315 00:20:45,000 --> 00:20:52,000 Pot algú explicar què és exactament aquesta frase fa? 316 00:20:52,000 --> 00:20:55,000 S'accedeix a un personatge, com vas dir. 317 00:20:55,000 --> 00:20:59,000 Sí, és [inaudible] un personatge de la paraula clau, 318 00:20:59,000 --> 00:21:04,000 i el que és el nombre de cartes vist perquè només estàs movent al llarg de 319 00:21:04,000 --> 00:21:06,000 la paraula clau una vegada que hagi vist la carta, 320 00:21:06,000 --> 00:21:10,000 pel que passarà amb eficàcia els espais i coses per l'estil. 321 00:21:10,000 --> 00:21:12,000 Sí, exactament. 322 00:21:12,000 --> 00:21:16,000 I després, un cop que hagi vist la paraula clau en blanc que acaba de mod pel que tornar al seu voltant. 323 00:21:16,000 --> 00:21:18,000 Exactament. Aquesta és una explicació perfecta. 324 00:21:18,000 --> 00:21:23,000 ¿Què va dir Kevin és que volem indexar a la paraula clau. 325 00:21:23,000 --> 00:21:28,000 Volem obtenir el caràcter num_letters_seen, si es vol, 326 00:21:28,000 --> 00:21:32,000 però si num_letters_seen excedeix la longitud de la paraula clau, 327 00:21:32,000 --> 00:21:37,000 la forma de tornar al rang apropiat és que utilitzi l'operador mod 328 00:21:37,000 --> 00:21:40,000 per embolicar eficaçment voltant. 329 00:21:40,000 --> 00:21:43,000 Per exemple, igual que en el curt, la nostra paraula clau és cansalada, 330 00:21:43,000 --> 00:21:46,000 i és a 5 lletres. 331 00:21:46,000 --> 00:21:50,000 Però hem vist 6 cartes al nostre text pla en aquest moment 332 00:21:50,000 --> 00:21:52,000 i encriptada 6. 333 00:21:52,000 --> 00:21:57,000 Acabarem l'accés a la num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 que és 6, mod la longitud de la paraula clau, 5, 335 00:22:00,000 --> 00:22:04,000 i el que aconseguirem 1, i així ho farem és que anem a 336 00:22:04,000 --> 00:22:14,000 accedir a l'interior del primer caràcter de la nostra paraula clau en aquest punt. 337 00:22:14,000 --> 00:22:21,000 >> Molt bé, qualsevol pregunta sobre Vigenère 338 00:22:21,000 --> 00:22:26,000 abans de seguir endavant? 339 00:22:26,000 --> 00:22:31,000 Vostès sentir molt bé sobre això? 340 00:22:31,000 --> 00:22:35,000 Genial, genial. 341 00:22:35,000 --> 00:22:38,000 Vull per assegurar-se que vostès estan rebent l'oportunitat de veure el codi 342 00:22:38,000 --> 00:22:48,000 que creiem que es veu bé i tenir l'oportunitat d'aprendre d'ell. 343 00:22:48,000 --> 00:22:53,000 Això serà l'última vegada que utilitzarà espais per al moment, 344 00:22:53,000 --> 00:22:59,000 i anem a la transició, i jo aniré a cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 perquè puguem fer una mica de revisió quiz. 346 00:23:06,000 --> 00:23:10,000 La millor manera que crec que començar a fer test opinió 347 00:23:10,000 --> 00:23:15,000 que ha de venir a aquesta pàgina Conferències, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 i sota de cadascuna de les partides setmana, així que si em veig aquí a la setmana 0, 349 00:23:20,000 --> 00:23:27,000 Veig que tenim una llista de temes que cobrim a la setmana 0. 350 00:23:27,000 --> 00:23:31,000 >> Si qualsevol d'aquests tòpics semblen poc familiars 351 00:23:31,000 --> 00:23:34,000 que sens dubte voldrà tornar enrere i buscar en les notes de classe i, possiblement, 352 00:23:34,000 --> 00:23:39,000 fins i tot llegir-lo a través de les conferències, de veure de nou si voleu 353 00:23:39,000 --> 00:23:44,000 per tenir una idea del que està passant amb cada un d'aquests temes. 354 00:23:44,000 --> 00:23:49,000 Diré, a més, aquest any un dels recursos frescos que tenim 355 00:23:49,000 --> 00:23:55,000 Són aquests pantalons curts que hem creat, i, si ens fixem en la setmana 0 356 00:23:55,000 --> 00:24:00,000 no tenim tots els temes tractats, però tenim un bon nombre d'ells, 357 00:24:00,000 --> 00:24:03,000 alguns dels més difícils, així a veure aquests curts de nou 358 00:24:03,000 --> 00:24:08,000 és una bona manera de posar-se al dia. 359 00:24:08,000 --> 00:24:15,000 En particular, em vaig a posar en un endoll per al 3 a la part inferior, des que vaig fer això. 360 00:24:15,000 --> 00:24:20,000 Però si vostè està lluitant amb el binari, bits, hexadecimal, aquest tipus de coses, 361 00:24:20,000 --> 00:24:22,000 binari és un gran lloc per començar. 362 00:24:22,000 --> 00:24:25,000 ASCII és un altre que és bo per veure també. 363 00:24:25,000 --> 00:24:31,000 Fins i tot pots mirar-me a la velocitat de 1.5x si vaig massa lent per a vostè. 364 00:24:31,000 --> 00:24:35,000 Des de la seva opinió, no dubti en fer-ho. 365 00:24:35,000 --> 00:24:40,000 >> Només per començar molt ràpid, anirem a través d'un parell d'aquests problemes concursos 366 00:24:40,000 --> 00:24:44,000 només per batre ràpidament a través d'aquests. 367 00:24:44,000 --> 00:24:50,000 Per exemple, considerem el cas a 16 problema que tinc aquí dalt al tauler. 368 00:24:50,000 --> 00:24:54,000 Tenim aquest càlcul següent en binari, 369 00:24:54,000 --> 00:24:56,000 i volem mostrar qualsevol treball. 370 00:24:56,000 --> 00:24:59,000 Bé, jo vaig a donar a aquest un tret. 371 00:24:59,000 --> 00:25:01,000 Vostès haurien de seguir juntament amb el paper, 372 00:25:01,000 --> 00:25:04,000 i farem això molt ràpidament. 373 00:25:04,000 --> 00:25:06,000 Volem fer el següent càlcul en binari. 374 00:25:06,000 --> 00:25:16,000 Tinc 00110010. 375 00:25:16,000 --> 00:25:27,000 I vaig a afegir a 00110010. 376 00:25:27,000 --> 00:25:30,000 Per als càlculs genis seguint al llarg a casa, 377 00:25:30,000 --> 00:25:35,000 aquest és efectivament multiplicant per 2. 378 00:25:35,000 --> 00:25:37,000 Anem a començar. 379 00:25:37,000 --> 00:25:39,000 Seguirem el mateix algorisme d'addició que fem 380 00:25:39,000 --> 00:25:43,000 quan sumem nombres decimals entre si. 381 00:25:43,000 --> 00:25:46,000 Realment l'única diferència aquí és que la tornada de bucle 382 00:25:46,000 --> 00:25:51,000 una vegada que tenim 1 + 1 en lloc d'una vegada que arribem a 10. 383 00:25:51,000 --> 00:25:53,000 >> Si partim de la dreta, molt ràpid, quin és el primer dígit? 384 00:25:53,000 --> 00:25:55,000 [Estudiant] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Gran, el segon dígit? 386 00:25:58,000 --> 00:26:00,000 [Estudiant] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Es tracta d'un 1? 1 + 1 és? 388 00:26:02,000 --> 00:26:04,000 [Estudiant] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Exactament, quin és el dígit que escric a sota dels 2 sumen? 390 00:26:08,000 --> 00:26:11,000 [Estudiant] 1, 0, o 0 i després portar a la 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 i portar a 1, exactament. 392 00:26:15,000 --> 00:26:18,000 El proper un, Basil, que estàs fent. 393 00:26:18,000 --> 00:26:20,000 Quina és la tercera? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, perfecte. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0. >> [Nate H.] 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Sí, i què faig? 397 00:26:30,000 --> 00:26:32,000 [Estudiant] L'1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] I què faré? I llavors em porti l'1. 399 00:26:34,000 --> 00:26:36,000 Perfecte, Sahb? >> [Sahb] Ara vostè té 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] I Puc fer alguna cosa aquí? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Llavors, d'una banda té 1 perquè et porta a més de 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Great, així que aquí podem acabar. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Estudiant] Té 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, com vostè ha dit, és de 10, o 1, 0, més ben dit. 407 00:27:01,000 --> 00:27:07,000 10 és un nom poc apropiat perquè per a mi significa el número 10 10, 408 00:27:07,000 --> 00:27:12,000 i és la peculiaritat de la manera com ho està representant quan estem escrivint. 409 00:27:12,000 --> 00:27:20,000 Ens representen el número 2 per 1, 0, i el nombre 10 és lleugerament diferent. 410 00:27:20,000 --> 00:27:23,000 >> Què és una espècie d'agradable sobre binari és que realment no són molts 411 00:27:23,000 --> 00:27:25,000 casos, cal aprendre. 412 00:27:25,000 --> 00:27:30,000 Hi ha 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 és 0, i després portar a un 1, 414 00:27:34,000 --> 00:27:37,000 i llavors vostè pot veure aquí a la tercera columna de la dreta 415 00:27:37,000 --> 00:27:40,000 hem tingut aquest 1, 1 i 1. 416 00:27:40,000 --> 00:27:43,000 I 1 + 1 + 1 és un 1, 417 00:27:43,000 --> 00:27:45,000 i portar a un altre 1. 418 00:27:45,000 --> 00:27:48,000 Quan vostè està fent la suma binària, bastant simple. 419 00:27:48,000 --> 00:27:51,000 M'agradaria fer un parell més al seny comprovar vosaltres mateixos 420 00:27:51,000 --> 00:27:54,000 abans d'anar ja que és 421 00:27:54,000 --> 00:28:00,000 probablement alguna cosa que veurem en el qüestionari. 422 00:28:00,000 --> 00:28:03,000 Ara farem això que ve. 423 00:28:03,000 --> 00:28:06,000 Farem problema 17. 424 00:28:06,000 --> 00:28:12,000 Anem a convertir el següent nombre binari a decimal. 425 00:28:12,000 --> 00:28:28,000 Tinc 10100111001. 426 00:28:28,000 --> 00:28:33,000 Recordeu que en el vídeo que vaig fer binari 427 00:28:33,000 --> 00:28:36,000 Vaig caminar a través d'un parell d'exemples, i em va mostrar com 428 00:28:36,000 --> 00:28:41,000 tot funciona quan vostè ho està fent en decimal. 429 00:28:41,000 --> 00:28:45,000 Quan es treballa en la representació decimal Crec que estem 430 00:28:45,000 --> 00:28:48,000 en aquest moment de les nostres vides tan fluid en el que 431 00:28:48,000 --> 00:28:53,000 que és bastant fàcil de passar per alt la mecànica de com funciona realment. 432 00:28:53,000 --> 00:28:59,000 >> Però per fer un resum ràpid, si tinc el número 137 433 00:28:59,000 --> 00:29:06,000 això significa realment, i de nou, això és en la representació decimal- 434 00:29:06,000 --> 00:29:19,000 el número 137 en decimal significa que tinc 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Això és tot romandre a la pantalla. 436 00:29:22,000 --> 00:29:29,000 I després, si ens fixem en els números aquí, 437 00:29:29,000 --> 00:29:34,000 100, 10 i 1, es veu que en realitat són totes les potències de 10. 438 00:29:34,000 --> 00:29:43,000 Tinc 10 ², 10 ¹, i 10 per al zero. 439 00:29:43,000 --> 00:29:48,000 Tenim un tipus similar de coses en binari, 440 00:29:48,000 --> 00:29:55,000 excepte que la nostra base, com l'anomenem, és a 2 en lloc de 10. 441 00:29:55,000 --> 00:29:58,000 Aquests resultats entre els 10 que he escrit fins aquí a la part inferior, 442 00:29:58,000 --> 00:30:02,000 aquesta ² 10, 10 ¹, 10 per al zero, 10 és la nostra base, 443 00:30:02,000 --> 00:30:08,000 i l'exponent, 0, 1, o 2, 444 00:30:08,000 --> 00:30:14,000 està implícit en la posició del dígit en el nombre que s'escriu. 445 00:30:14,000 --> 00:30:21,000 1, si ens fixem en ell, aquest 1 es troba a la 2 ª posició. 446 00:30:21,000 --> 00:30:27,000 El 3 està en la posició primera, i el 7 està a la posició 0 ª. 447 00:30:27,000 --> 00:30:35,000 Així és com s'obtenen els exponents que figuren a continuació per a les nostres bases. 448 00:30:35,000 --> 00:30:40,000 >> Arran de tot això ens tornarem-en realitat, saps què? 449 00:30:40,000 --> 00:30:43,000 Ho farem-on va ser la meva botó de desfer anar? 450 00:30:43,000 --> 00:30:45,000 Aquí va. 451 00:30:45,000 --> 00:30:47,000 M'encanta aquesta cosa desfer. 452 00:30:47,000 --> 00:30:51,000 Després d'això crec que per a mi almenys 453 00:30:51,000 --> 00:30:54,000 la forma més fàcil d'iniciar la conversió d'un nombre binari 454 00:30:54,000 --> 00:30:57,000 o un nombre hexadecimal on la base és 16 455 00:30:57,000 --> 00:31:02,000 i no 10 o 2 és seguir endavant i escriure 456 00:31:02,000 --> 00:31:09,000 les bases i exponents per a tots els nombres en el meu número binari a la part superior. 457 00:31:09,000 --> 00:31:14,000 Si partim d'esquerra a dreta, de nou, 458 00:31:14,000 --> 00:31:17,000 que és una mica contradictori, 459 00:31:17,000 --> 00:31:23,000 Vaig a tornar al negre aquí, tenim la 2 a la posició 0 ª, 460 00:31:23,000 --> 00:31:27,000 i llavors tenim 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 i després 2 a la 3, 2 a la 4, 2 a la 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, i 10. 463 00:31:39,000 --> 00:31:41,000 Aquests números que he escrit fora són tots els exponents. 464 00:31:41,000 --> 00:31:48,000 Jo només vaig escriure les bases aquí en els 3 primers només per l'espai. 465 00:31:48,000 --> 00:31:50,000 >> En aquest moment em vaig a seguir endavant i de fet vaig a esborrar 466 00:31:50,000 --> 00:31:53,000 les coses que vam fer en decimal, si et sembla bé. 467 00:31:53,000 --> 00:31:57,000 Tots vostès han entendre. 468 00:31:57,000 --> 00:32:05,000 Aquells de vostès veient en línia Estic segur que serà capaç de rebobinar si em vols. 469 00:32:05,000 --> 00:32:07,000 Canvi a la ploma. 470 00:32:07,000 --> 00:32:12,000 Ara, què podem fer, si vostès no estan totalment al dia en les seves potències de 2, 471 00:32:12,000 --> 00:32:15,000 això és totalment cool. 472 00:32:15,000 --> 00:32:18,000 Succeeix. Entenc. 473 00:32:18,000 --> 00:32:23,000 Un cop vaig tenir una entrevista de treball on em van dir que he de saber totes les potències de 2 474 00:32:23,000 --> 00:32:26,000 a través de 2 al 30. 475 00:32:26,000 --> 00:32:29,000 No era una feina que tinc. 476 00:32:29,000 --> 00:32:32,000 De tota manera, vostès poden seguir endavant i fer els càlculs aquí, 477 00:32:32,000 --> 00:32:35,000 però amb el binari que no té molt sentit, 478 00:32:35,000 --> 00:32:38,000 i tampoc té sentit amb decimal o hexadecimal o bé, 479 00:32:38,000 --> 00:32:43,000 per fer els càlculs d'on té zeros. 480 00:32:43,000 --> 00:32:49,000 Vostè pot veure que tinc 0 aquí, un 0 aquí, aquí 0, 0 aquí, aquí 0, 0 aquí. 481 00:32:49,000 --> 00:32:52,000 Per què no podria tenir sentit per fer els càlculs real 482 00:32:52,000 --> 00:32:56,000 per calcular la potència apropiada de 2 per a aquesta posició? 483 00:32:56,000 --> 00:32:59,000 Exactament com va dir Charlotte, serà 0. 484 00:32:59,000 --> 00:33:05,000 Podria estalviar-se el temps si el càlcul de potències de 2 no és el seu punt fort. 485 00:33:05,000 --> 00:33:10,000 En aquest cas, només haurà de calcular per 2 a 0, que és el-? 486 00:33:10,000 --> 00:33:12,000 [Estudiant] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 a la 3 que és-? 488 00:33:14,000 --> 00:33:16,000 [Estudiant] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 a la 4? 490 00:33:18,000 --> 00:33:21,000 [Estudiant] 2. Em sap greu, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 a la 4 és 16, exactament. 492 00:33:26,000 --> 00:33:28,000 2 a la 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 a la 8? 494 00:33:32,000 --> 00:33:38,000 [Estudiant] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 I 2 als 10? 497 00:33:43,000 --> 00:33:45,000 [Estudiant] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Sí, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Quan tenim aquests nombres podem resumir. 500 00:33:57,000 --> 00:34:01,000 I aquí és on és molt important fer un parell de coses. 501 00:34:01,000 --> 00:34:07,000 Una d'elles és anar lent i revisar el seu treball. 502 00:34:07,000 --> 00:34:10,000 Es pot dir que hi ha un 1 al final d'aquest número, 503 00:34:10,000 --> 00:34:15,000 així que definitivament ha d'obtenir un nombre imparell com el meu resultat, 504 00:34:15,000 --> 00:34:18,000 perquè tots els altres seran nombres parells 505 00:34:18,000 --> 00:34:21,000 atès que es tracta d'un nombre binari. 506 00:34:21,000 --> 00:34:24,000 L'altra cosa a fer és si s'arriba a aquest punt de la prova 507 00:34:24,000 --> 00:34:27,000 i ho has escrit fins aquí 508 00:34:27,000 --> 00:34:30,000 i que està acabant el temps 509 00:34:30,000 --> 00:34:33,000 mirar el nombre de punts que aquest problema val la pena. 510 00:34:33,000 --> 00:34:40,000 Aquest problema, com es pot veure, si li dono la volta al meu ordinador portàtil molt ràpid- 511 00:34:40,000 --> 00:34:44,000 aquest problema val 2 punts, de manera que aquest no és el tipus d'addició 512 00:34:44,000 --> 00:34:47,000 vostè ha d'anar a través si vostè està realment pressionat pel temps. 513 00:34:47,000 --> 00:34:52,000 Però anem a tornar a la iPad, i anirem a través d'ell molt ràpidament. 514 00:34:52,000 --> 00:34:54,000 >> M'agrada fer els números curts primer 515 00:34:54,000 --> 00:34:56,000 perquè em sembla que sigui més fàcil. 516 00:34:56,000 --> 00:35:00,000 M'agrada 32 i 8 perquè van de la mà amb força facilitat, i obtenim 50. 517 00:35:00,000 --> 00:35:03,000 16 i 1 es 17. 518 00:35:03,000 --> 00:35:05,000 No tenim 57 anys, 519 00:35:05,000 --> 00:35:14,000 i llavors podem fer la resta d'això, així que podem fer 57, 156. 520 00:35:14,000 --> 00:35:16,000 Anem. 521 00:35:16,000 --> 00:35:19,000 L'home, bé, anem a veure. 522 00:35:19,000 --> 00:35:27,000 Vam tenir 57, 256 i 1024. 523 00:35:27,000 --> 00:35:31,000 En aquest punt, que prefereixo passar. 524 00:35:31,000 --> 00:35:35,000 No tinc ni idea. Jo clarament que llegir sobre això. 525 00:35:35,000 --> 00:35:40,000 7, 6 i 4, s'obté 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Llavors tenim 3, i llavors tenim 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Ou de Pasqua, a ningú? 530 00:35:55,000 --> 00:35:59,000 Algú reconeix aquest número? 531 00:35:59,000 --> 00:36:02,000 Chris reconeix el nombre. Què significa això, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, així que si vostè mira això, sembla que leet. 534 00:36:11,000 --> 00:36:15,000 Hacker coses. Compte amb aquest tipus de coses en el mitjà termini o el concurs, millor dit. 535 00:36:15,000 --> 00:36:19,000 Si vostè veu aquest tipus de coses i que s'estigui preguntant "Eh," 536 00:36:19,000 --> 00:36:22,000 que en realitat podria significar alguna cosa. 537 00:36:22,000 --> 00:36:24,000 No. David li agrada posar polz 538 00:36:24,000 --> 00:36:26,000 És una bona manera de comprovar seny. 539 00:36:26,000 --> 00:36:30,000 Com bé, puc veure el que està passant. 540 00:36:30,000 --> 00:36:34,000 >> Aquesta és la Setmana 1 0/Week coses. 541 00:36:34,000 --> 00:36:39,000 Si canviem de nou al nostre ordinador portàtil ara, 542 00:36:39,000 --> 00:36:46,000 allunyar la imatge, i un parell d'altres coses. 543 00:36:46,000 --> 00:36:50,000 Hi ASCII, el que hem estat fent un munt dels butlletins de problemes. 544 00:36:50,000 --> 00:36:55,000 Aquesta noció de capital A. Què és això realment? 545 00:36:55,000 --> 00:36:57,000 Sabent que és l'enter decimal. 546 00:36:57,000 --> 00:37:00,000 65 és el que s'assigna a la taula ASCII, 547 00:37:00,000 --> 00:37:03,000 i això és per tant l'equip com l'escriu, 548 00:37:03,000 --> 00:37:06,000 i així és com hem estat sortint amb la realitat escrivint 549 00:37:06,000 --> 00:37:09,000 la capital caràcter A i el caràcter a minúscula 550 00:37:09,000 --> 00:37:14,000 en algunes d'aquestes solucions i conjunts de problemes que has estat fent. 551 00:37:14,000 --> 00:37:16,000 Un parell de coses més. 552 00:37:16,000 --> 00:37:25,000 Tenim declaracions, expressions booleanes, condicions, bucles, variables i fils. 553 00:37:25,000 --> 00:37:29,000 >> Aquells tot sembla tenir sentit en la seva major part? 554 00:37:29,000 --> 00:37:35,000 Part d'aquesta terminologia és una mica estrany de vegades. 555 00:37:35,000 --> 00:37:46,000 M'agrada pensar que de la declaració de la majoria dels casos, aquest acaba amb un punt i coma. 556 00:37:46,000 --> 00:37:51,000 Declaracions com x = 7, que estableix una variable, 557 00:37:51,000 --> 00:37:54,000 presumiblement anomenat x = 7. 558 00:37:54,000 --> 00:38:01,000 És de suposar que x és també un tipus que pot emmagatzemar el número 7, 559 00:38:01,000 --> 00:38:05,000 per la qual cosa és un int o un float o possiblement un curtcircuit o una xerrada, 560 00:38:05,000 --> 00:38:07,000 alguna cosa per l'estil. 561 00:38:07,000 --> 00:38:12,000 Una expressió booleana és l'ús d'aquests dos és igual a 562 00:38:12,000 --> 00:38:17,000 i l'explosió igual als iguals o no, menor que, major que, 563 00:38:17,000 --> 00:38:22,000 menys de o igual a, tot aquest tipus de coses. 564 00:38:22,000 --> 00:38:28,000 Les condicions són, llavors, les declaracions if else. 565 00:38:28,000 --> 00:38:32,000 M'agradaria recordar que no es pot tenir una cosa sense la corresponent if. 566 00:38:32,000 --> 00:38:37,000 De la mateixa manera, no es pot tenir una cosa sense la corresponent si si. 567 00:38:37,000 --> 00:38:40,000 Loops, recordar els 3 tipus de llaços que hem estat treballant molt dur en tu 568 00:38:40,000 --> 00:38:43,000 des de fa un parell de seccions i dels butlletins de problemes. 569 00:38:43,000 --> 00:38:46,000 Usant fer mentre que vostè està rebent dades de l'usuari, 570 00:38:46,000 --> 00:38:51,000 Utilització de bucles while fins que una determinada condició és veritable, 571 00:38:51,000 --> 00:38:56,000 i després usant els bucles for si necessita 572 00:38:56,000 --> 00:39:01,000 saber què iteració del bucle Actualment es troba en és com jo penso. 573 00:39:01,000 --> 00:39:07,000 O si vostè està fent una per cada caràcter en una cadena que vull fer alguna cosa, 574 00:39:07,000 --> 00:39:15,000 per a cada element d'una matriu que vull fer alguna cosa a aquest element. 575 00:39:15,000 --> 00:39:18,000 >> Temes i esdeveniments. 576 00:39:18,000 --> 00:39:21,000 Aquests no hem cobert en forma explícita en C, 577 00:39:21,000 --> 00:39:23,000 però recorda això des del principi. 578 00:39:23,000 --> 00:39:26,000 Aquesta és la idea de tenir diferents scripts. 579 00:39:26,000 --> 00:39:32,000 Això també és aquesta noció de radiodifusió d'un esdeveniment. 580 00:39:32,000 --> 00:39:37,000 Hi ha gent que no va fer ús de la radiodifusió en els seus projectes inicialment, 581 00:39:37,000 --> 00:39:40,000 la qual cosa és totalment cool, 582 00:39:40,000 --> 00:39:46,000 però aquestes són dues maneres diferents de manejar aquest problema més gran anomenada la concurrència, 583 00:39:46,000 --> 00:39:49,000 que és com s'arriba a executar els programes de 584 00:39:49,000 --> 00:39:54,000 o aparentment executar a la vegada? 585 00:39:54,000 --> 00:39:59,000 Diferents tasques en execució mentre altres tasques també estan en marxa. 586 00:39:59,000 --> 00:40:01,000 Així és com el sistema operatiu sembla que funciona. 587 00:40:01,000 --> 00:40:04,000 Aquesta és la raó, encara que, per exemple, 588 00:40:04,000 --> 00:40:10,000 Tinc el meu navegador que s'executa, també pot convertir-se en Spotify i reproduir una cançó. 589 00:40:10,000 --> 00:40:14,000 Això és més d'una cosa conceptual d'entendre. 590 00:40:14,000 --> 00:40:17,000 M'agradaria fer una ullada als temes curts 591 00:40:17,000 --> 00:40:21,000 si vols aprendre més sobre això. 592 00:40:21,000 --> 00:40:26,000 >> A veure, crec que podria haver estat 593 00:40:26,000 --> 00:40:31,000 un problema en aquesta en un d'aquests. 594 00:40:31,000 --> 00:40:35,000 Un cop més, crec que les discussions i esdeveniments que no són una cosa que anem a cobrir en C 595 00:40:35,000 --> 00:40:41,000 només perquè és molt més difícil que en Scratch. 596 00:40:41,000 --> 00:40:44,000 No ha de preocupar-se per aquí, però sens dubte a comprendre els conceptes, 597 00:40:44,000 --> 00:40:47,000 entendre el que està passant. 598 00:40:47,000 --> 00:40:52,000 Abans de seguir endavant, qualsevol pregunta sobre la Setmana 0 materials? 599 00:40:52,000 --> 00:40:55,000 Tothom sent bastant bé? 600 00:40:55,000 --> 00:41:03,000 Comprensió de les variables i el que és una variable? 601 00:41:03,000 --> 00:41:08,000 >> Canviant de tema. Setmana 1. 602 00:41:08,000 --> 00:41:12,000 Un parell de coses aquí que no van ser coberts en particular 603 00:41:12,000 --> 00:41:21,000 en la revisió i prova necessàriament també hi ha coses més conceptuals que pensar. 604 00:41:21,000 --> 00:41:30,000 El primer és la noció del que el codi font, compiladors i el codi objecte són. 605 00:41:30,000 --> 00:41:32,000 Algú? Basil. 606 00:41:32,000 --> 00:41:37,000 És de codi objecte, vull dir, el codi font és el que posa en clang, 607 00:41:37,000 --> 00:41:42,000 i el codi objecte és el que posa so metàl · lic de manera que l'ordinador pot llegir el programa. 608 00:41:42,000 --> 00:41:44,000 Exactament. 609 00:41:44,000 --> 00:41:47,000 El codi font és el codi C que en realitat s'escriu dalt. 610 00:41:47,000 --> 00:41:50,000 El codi objecte és el que hi ha de so metàl · lic. 611 00:41:50,000 --> 00:41:54,000 És el 0 i 1 en quin format binari. 612 00:41:54,000 --> 00:41:59,000 Llavors el que passa és quan vostè té un munt d'arxius d'objectes, 613 00:41:59,000 --> 00:42:04,000 dir que s'està compilant un projecte o un programa que utilitza diversos arxius de codi font, 614 00:42:04,000 --> 00:42:09,000 que per convenció se'ls dóna l'extensió. c arxiu. 615 00:42:09,000 --> 00:42:13,000 És per això que tenim vigenère.c caesar.c,. 616 00:42:13,000 --> 00:42:18,000 Si va a escriure programes en Java se'ls dóna l'extensió. Java. 617 00:42:18,000 --> 00:42:24,000 Programes Python tenen l'extensió. Py freqüència. 618 00:42:24,000 --> 00:42:26,000 >> Una vegada que tingui els arxius c múltiples., De compilar. 619 00:42:26,000 --> 00:42:29,000 Clang escup tota aquesta brossa binària. 620 00:42:29,000 --> 00:42:33,000 Llavors, ja que només volen un programa 621 00:42:33,000 --> 00:42:37,000 teniu l'enllaç enllaçador tots aquests fitxers objecte junts 622 00:42:37,000 --> 00:42:40,000 en un arxiu executable. 623 00:42:40,000 --> 00:42:45,000 Això és també el que passa quan s'utilitza la biblioteca CS50, per exemple. 624 00:42:45,000 --> 00:42:50,000 La biblioteca CS50 és al mateix temps que. Arxiu de capçalera h 625 00:42:50,000 --> 00:42:53,000 que llegeixi, que # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 I també és un arxiu binari de la biblioteca especial 627 00:42:58,000 --> 00:43:02,000 que ha estat compilat que és 0s i 1s, 628 00:43:02,000 --> 00:43:08,000 i que-l, de manera que si ens remuntem als nostres espais i esperem realment ràpid 629 00:43:08,000 --> 00:43:11,000 al que està passant aquí quan mirem al nostre abast clang, 630 00:43:11,000 --> 00:43:15,000 el que tenim és que aquest és el nostre arxiu de codi font aquí. 631 00:43:15,000 --> 00:43:18,000 Es tracta d'un munt d'opcions del compilador. 632 00:43:18,000 --> 00:43:22,000 I després, al final, aquests-l enllaç banderes en 633 00:43:22,000 --> 00:43:30,000 els arxius binaris reals d'aquestes dues biblioteques, la biblioteca del CS50 i després la biblioteca matemàtica. 634 00:43:30,000 --> 00:43:35,000 >> Entendre cada tipus d'objecte files ' 635 00:43:35,000 --> 00:43:38,000 en el procés de compilació és una cosa que vostè vol ser capaç de 636 00:43:38,000 --> 00:43:43,000 donar almenys un resum d'alt nivell de. 637 00:43:43,000 --> 00:43:46,000 Codi font Codi objecte entra surt. 638 00:43:46,000 --> 00:43:53,000 Arxius de codi objecte unir, i s'obté un arxiu de bell, executable. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Aquí és també on vostè pot obtenir errors en múltiples punts 641 00:43:58,000 --> 00:44:00,000 en el procés de compilació. 642 00:44:00,000 --> 00:44:04,000 Aquí és on, per exemple, si vostè pren aquesta bandera d'unió, 643 00:44:04,000 --> 00:44:10,000 la bandera CS50, i el omet en espais o quan s'està executant el codi, 644 00:44:10,000 --> 00:44:13,000 aquí és on vostè obtindrà una errada en la fase de vinculació, 645 00:44:13,000 --> 00:44:18,000 i el vinculador dir: "Escolta, et va cridar una funció GetString 646 00:44:18,000 --> 00:44:20,000 que està a la biblioteca CS50 ". 647 00:44:20,000 --> 00:44:25,000 "Em vas dir que estava a la biblioteca CS50, i no puc trobar el codi per a això". 648 00:44:25,000 --> 00:44:28,000 Aquí és on cal relacionar, i això és independent 649 00:44:28,000 --> 00:44:33,000 d'un error de compilació perquè el compilador està mirant sintaxi i aquest tipus de coses. 650 00:44:33,000 --> 00:44:38,000 És bo saber el que està passant quan. 651 00:44:38,000 --> 00:44:42,000 >> Altres coses que ha de saber. 652 00:44:42,000 --> 00:44:49,000 Jo diria que ha de fer una ullada a la breu sobre encasellament realitzat per Jordan 653 00:44:49,000 --> 00:44:55,000 per entendre el que són sencers sota el capó, 654 00:44:55,000 --> 00:44:58,000 quins caràcters estan sota el capó. 655 00:44:58,000 --> 00:45:02,000 Quan parlem de ASCII i realment es veuen a la taula ASCII, 656 00:45:02,000 --> 00:45:07,000 el que està fent ens està donant una mirada sota el capó 657 00:45:07,000 --> 00:45:13,000 la manera com l'equip representa en realitat majúscula i el dígit 7 658 00:45:13,000 --> 00:45:17,000 i una coma i un signe d'interrogació. 659 00:45:17,000 --> 00:45:20,000 La computadora també té maneres especials per representar 660 00:45:20,000 --> 00:45:23,000 el número 7 com un nombre enter. 661 00:45:23,000 --> 00:45:27,000 Té una forma especial per representar el nombre 7 com un nombre de punt flotant, 662 00:45:27,000 --> 00:45:29,000 i els que són molt diferents. 663 00:45:29,000 --> 00:45:32,000 Encasellament és la forma de dir-li a l'ordinador "Hey, vull que converteixis 664 00:45:32,000 --> 00:45:37,000 d'una representació a una altra representació. " 665 00:45:37,000 --> 00:45:40,000 Per què no fer una ullada a això. 666 00:45:40,000 --> 00:45:44,000 >> També m'agradaria fer una ullada a la breu sobre les biblioteques i la talla en els compiladors. 667 00:45:44,000 --> 00:45:47,000 Els que parlen del procés de compilació, 668 00:45:47,000 --> 00:45:53,000 què és una biblioteca, i repassar algunes de les preguntes que potser et vaig preguntar. 669 00:45:53,000 --> 00:45:55,000 Preguntes sobre la Setmana 1 material? 670 00:45:55,000 --> 00:46:03,000 Hi ha temes que aquí semblen enormes proporcions que li agradaria cobrir? 671 00:46:03,000 --> 00:46:07,000 Estic tractant de bufar a través de la majoria d'aquests temes anteriors perquè puguem arribar a 672 00:46:07,000 --> 00:46:13,000 punters i fer una mica de recursivitat. 673 00:46:13,000 --> 00:46:15,000 Pensaments? 674 00:46:15,000 --> 00:46:19,000 Qualsevol cosa de cobrir? 675 00:46:19,000 --> 00:46:21,000 Temps per una mica de xocolata potser? 676 00:46:21,000 --> 00:46:23,000 Vostès estan treballant a través d'ell. 677 00:46:23,000 --> 00:46:26,000 Jo seguiré bevent meu cafè. 678 00:46:26,000 --> 00:46:31,000 Setmana 2. 679 00:46:31,000 --> 00:46:34,000 Bona idea, bona idea. 680 00:46:34,000 --> 00:46:38,000 A la setmana 2 parlem una mica més sobre les funcions. 681 00:46:38,000 --> 00:46:43,000 >> En els butlletins de problemes primeres que realment no entrar cap funció en absolut 682 00:46:43,000 --> 00:46:45,000 excepte que la funció? 683 00:46:45,000 --> 00:46:47,000 [Estudiant] Principal. >> Principal, exactament. 684 00:46:47,000 --> 00:46:51,000 I pel que hem vist els diferents vestits que vesteix principal. 685 00:46:51,000 --> 00:46:54,000 No és l'únic en el que no pren cap argument, 686 00:46:54,000 --> 00:46:58,000 i acabem de dir nul · la entre els parèntesis, 687 00:46:58,000 --> 00:47:01,000 i després hi ha l'altre en el qual volen prendre els arguments de línia de comandes, 688 00:47:01,000 --> 00:47:08,000 i com hem vist, aquí és on tens int argc i argv matriu de cadenes 689 00:47:08,000 --> 00:47:13,000 o ara que hem estat realment exposats a ser la cadena char * que és 690 00:47:13,000 --> 00:47:20,000 anem a començar a escriure com char * argv i després entre parèntesi. 691 00:47:20,000 --> 00:47:22,000 En Butlletí de problemes 3, vostès van veure un munt de funcions, 692 00:47:22,000 --> 00:47:27,000 i ha implementat un munt de funcions, dibuixar, mirar cap amunt, scramble. 693 00:47:27,000 --> 00:47:31,000 Els prototips van ser escrits allà per a vostè. 694 00:47:31,000 --> 00:47:33,000 >> El que jo volia parlar aquí amb funcions molt ràpid 695 00:47:33,000 --> 00:47:38,000 és que hi ha 3 parts d'ells cada vegada que escrius una funció. 696 00:47:38,000 --> 00:47:43,000 Heu d'especificar el tipus de retorn de la funció. 697 00:47:43,000 --> 00:47:46,000 Ha d'especificar un nom per a la funció, i llavors vostè ha d'especificar 698 00:47:46,000 --> 00:47:51,000 la llista d'arguments o la llista de paràmetres. 699 00:47:51,000 --> 00:47:57,000 Per exemple, si jo hagués d'escriure una funció per resumir un munt de nombres enters 700 00:47:57,000 --> 00:48:03,000 i després torna a mi la suma que seria el meu tipus de retorn 701 00:48:03,000 --> 00:48:06,000 si volia sumar nombres enters i després tornar la suma? 702 00:48:06,000 --> 00:48:12,000 A continuació, el nom de la funció. 703 00:48:12,000 --> 00:48:27,000 Si segueixo endavant i escriure en verd, aquesta part és el tipus de retorn. 704 00:48:27,000 --> 00:48:34,000 Aquesta part és el nom. 705 00:48:34,000 --> 00:48:40,000 I després entre parèntesi 706 00:48:40,000 --> 00:48:46,000 és on em donen els arguments, 707 00:48:46,000 --> 00:48:56,000 sovint abreujat com arguments, de vegades anomenat params per als paràmetres. 708 00:48:56,000 --> 00:49:00,000 I si vostè té un, vostè només ha d'especificar l'elegit. 709 00:49:00,000 --> 00:49:06,000 Si té diversos de separar cadascun amb una coma. 710 00:49:06,000 --> 00:49:13,000 I per a cada argument que li donen 2 coses que són-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Cal donar el tipus i després el nom. 712 00:49:18,000 --> 00:49:21,000 I després el nom, i el nom és el nom que s'utilitzarà 713 00:49:21,000 --> 00:49:25,000 per referir-se a aquest argument dins de la funció suma, 714 00:49:25,000 --> 00:49:27,000 dins de la funció que s'està escrivint actualment. 715 00:49:27,000 --> 00:49:32,000 >> Vostè no ha de, per exemple, si jo vaig a resumir, 716 00:49:32,000 --> 00:49:41,000 per exemple, una matriu d'enters-nosaltres fem array int, 717 00:49:41,000 --> 00:49:46,000 i em vaig a donar algunes claus no- 718 00:49:46,000 --> 00:49:51,000 després quan passa una matriu a la funció suma 719 00:49:51,000 --> 00:49:55,000 El pas a la primera posició de la llista d'arguments. 720 00:49:55,000 --> 00:49:59,000 Però la matriu de passar a no ha de tenir el nom arr. 721 00:49:59,000 --> 00:50:07,000 Arr serà com es refereixen al fet que l'argument dins el cos de la funció. 722 00:50:07,000 --> 00:50:10,000 L'altra cosa que cal tenir en compte, 723 00:50:10,000 --> 00:50:14,000 i això és una mica diferent de funcions, però crec que és un punt important, 724 00:50:14,000 --> 00:50:20,000 és que en C quan estic escrivint una funció com aquesta 725 00:50:20,000 --> 00:50:29,000 Com puc saber quants elements hi ha en aquesta sèrie? 726 00:50:29,000 --> 00:50:31,000 Això és una cosa d'una pregunta capciosa. 727 00:50:31,000 --> 00:50:35,000 Hem parlat d'això una mica en la secció de la setmana passada. 728 00:50:35,000 --> 00:50:40,000 Com puc saber el nombre d'elements dins d'un array en C? 729 00:50:40,000 --> 00:50:44,000 Hi ha alguna manera? 730 00:50:44,000 --> 00:50:49,000 >> Resulta que no hi ha manera de saber-ho. 731 00:50:49,000 --> 00:50:52,000 Vostè ha de passar per separat. 732 00:50:52,000 --> 00:50:55,000 Hi ha un truc que pots fer 733 00:50:55,000 --> 00:51:00,000 si estàs en la mateixa funció en la qual s'ha declarat la matriu, 734 00:51:00,000 --> 00:51:04,000 i es treballa amb una àmplia llar de foc. 735 00:51:04,000 --> 00:51:06,000 Però això només funciona si vostè està en la mateixa funció. 736 00:51:06,000 --> 00:51:09,000 Quan es passa una matriu a una altra funció o si s'ha declarat una matriu 737 00:51:09,000 --> 00:51:12,000 i poses aquesta matriu en la pila, que ha utilitzat malloc 738 00:51:12,000 --> 00:51:15,000  i aquest tipus de coses, totes les apostes estan apagades. 739 00:51:15,000 --> 00:51:18,000 Llavors vostè realment ha de trigar 740 00:51:18,000 --> 00:51:21,000 un argument especial o un altre paràmetre 741 00:51:21,000 --> 00:51:23,000 que li diu què tan gran és la matriu. 742 00:51:23,000 --> 00:51:28,000 En aquest cas, m'agradaria utilitzar una coma-ho sento, que va fora de la pantalla aquí- 743 00:51:28,000 --> 00:51:32,000 i m'agradaria passar en un altre argument 744 00:51:32,000 --> 00:51:40,000  i en diuen int len ​​per a la longitud. 745 00:51:40,000 --> 00:51:44,000 >> Una cosa que pogués sorgir en l'examen 746 00:51:44,000 --> 00:51:49,000 Se li demanarà que escrigui o implementar una funció particular que es diu alguna cosa així. 747 00:51:49,000 --> 00:51:54,000 Si nosaltres no li donem el prototip, de manera que tot això aquí, 748 00:51:54,000 --> 00:51:58,000 tot aquest embolic es diu la declaració de la funció o el prototip de funció, 749 00:51:58,000 --> 00:52:01,000 aquesta és una de les primeres coses que vostè voldrà concretar si no se li dóna 750 00:52:01,000 --> 00:52:03,000 a vostè immediatament al qüestionari. 751 00:52:03,000 --> 00:52:06,000 L'altre truc que he après és que 752 00:52:06,000 --> 00:52:11,000 diuen que et donen un prototip per a una funció, i diem: "Escolta, has d'escriure". 753 00:52:11,000 --> 00:52:16,000 Dins de les claus que té en el qüestionari 754 00:52:16,000 --> 00:52:20,000 si vostè nota que hi ha un tipus de retorn i nota que el tipus de canvi 755 00:52:20,000 --> 00:52:25,000 és una mica diferent de buit, el que significa que la funció no retorna res, 756 00:52:25,000 --> 00:52:28,000 llavors una cosa que ha de fer és escriure 757 00:52:28,000 --> 00:52:33,000 algun tipus d'instrucció de retorn al final de la funció. 758 00:52:33,000 --> 00:52:40,000 Retorn, i en aquest cas, posarem un espai en blanc, perquè volem omplir l'espai en blanc. 759 00:52:40,000 --> 00:52:44,000 Però això posa a pensar en la manera correcta de com vaig a abordar aquest problema? 760 00:52:44,000 --> 00:52:49,000 I et recorda que hauràs de retornar un valor 761 00:52:49,000 --> 00:52:51,000 a la crida de la funció. 762 00:52:51,000 --> 00:52:54,000 >> Si. >> [Estudiant] L'estil s'apliquen quan estem escrivint codi en el concurs? 763 00:52:54,000 --> 00:52:58,000 Com sagnia i aquest tipus de coses? >> [Estudiant] Yeah. 764 00:52:58,000 --> 00:53:00,000 No, no com a molt. 765 00:53:00,000 --> 00:53:09,000 Crec que molt d'això és una cosa que anem a aclarir en la prova en el dia de, 766 00:53:09,000 --> 00:53:15,000 però en general inclou preocupar per # i aquest tipus de coses, és una espècie de fora. 767 00:53:15,000 --> 00:53:17,000 [Estudiant] Cal comentar el seu codi escrit a mà? 768 00:53:17,000 --> 00:53:19,000 És necessari comentar el seu codi escrit a mà? 769 00:53:19,000 --> 00:53:24,000 Comentant sempre és bo si vostè està preocupat sobre el crèdit parcial 770 00:53:24,000 --> 00:53:29,000 o desitja comunicar la seva intenció a la motoanivelladora. 771 00:53:29,000 --> 00:53:33,000 Però, de nou, s'aclarirà en el propi concurs i en el dia de concurs, 772 00:53:33,000 --> 00:53:39,000 però no crec que se li requereix per escriure comentaris, no. 773 00:53:39,000 --> 00:53:42,000 Normalment no, però sens dubte és el tipus de coses que 774 00:53:42,000 --> 00:53:45,000 pot comunicar la seva intenció, com "Hey, aquí és on em vaig amb ell." 775 00:53:45,000 --> 00:53:49,000 I de vegades això pot ajudar amb crèdit parcial. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Quina és la diferència entre declarar, per exemple, int lang 779 00:53:56,000 --> 00:54:03,000 en els arguments o paràmetres de comparació que es declara una variable dins de la funció? 780 00:54:03,000 --> 00:54:05,000 Wow, cafè va baixar la tràquea. 781 00:54:05,000 --> 00:54:07,000 [Basil] Igual que les coses que volem posar en arguments. 782 00:54:07,000 --> 00:54:09,000 Sí, aquesta és una gran pregunta. 783 00:54:09,000 --> 00:54:11,000 Com es tria quines coses vols posar en els arguments 784 00:54:11,000 --> 00:54:17,000 davant les coses que vostè ha de fer dins de la funció? 785 00:54:17,000 --> 00:54:24,000 En aquest cas es van incloure tant d'aquests com arguments 786 00:54:24,000 --> 00:54:29,000 perquè són una cosa que tot el que es va a utilitzar la funció de suma 787 00:54:29,000 --> 00:54:32,000 d'especificar aquestes coses. 788 00:54:32,000 --> 00:54:35,000 >> La funció de suma, com hem parlat, no té manera de saber 789 00:54:35,000 --> 00:54:40,000 què tan gran és la matriu que rep del seu interlocutor o de qui està utilitzant la funció suma. 790 00:54:40,000 --> 00:54:44,000 No té forma de saber què tan gran és aquesta matriu. 791 00:54:44,000 --> 00:54:48,000 La raó per la qual vam passar en aquesta longitud d'aquí com un argument 792 00:54:48,000 --> 00:54:51,000 és perquè això és una cosa que bàsicament estem dient al picador de la funció, 793 00:54:51,000 --> 00:54:55,000 qui es va a utilitzar la funció de suma, "Hey, no només vostè ha de donar-nos una matriu 794 00:54:55,000 --> 00:54:59,000 d'enters, vostè també ha de dir-nos com de gran és la matriu que vostè ens ha donat és ". 795 00:54:59,000 --> 00:55:03,000 [Basil] Els dos estaran arguments de línia de comandaments? 796 00:55:03,000 --> 00:55:06,000 No, aquests són arguments reals que li passen a la funció. 797 00:55:06,000 --> 00:55:10,000 >> Permetin-me fer una nova pàgina aquí. 798 00:55:10,000 --> 00:55:13,000 [Basil] Igual nom passaria- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Si tinc int main (void) 800 00:55:24,000 --> 00:55:27,000 i em posaré en el meu retorn 0 fins aquí a la part inferior, 801 00:55:27,000 --> 00:55:31,000 i dic que vull cridar a la funció suma. 802 00:55:31,000 --> 00:55:42,000 Vull dir int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Per utilitzar la funció suma he de passar tant en la matriu que vull resumir 804 00:55:46,000 --> 00:55:51,000 i la longitud de la matriu, pel que aquí és on 805 00:55:51,000 --> 00:55:54,000 suposant que tenia una sèrie d'enters, 806 00:55:54,000 --> 00:56:12,000 dir que tenia int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 tipus d'ús que hacker sintaxi allà mateix, 808 00:56:16,000 --> 00:56:21,000 llavors el que vull fer és en resum m'agradaria passar a 809 00:56:21,000 --> 00:56:27,000 tant numbaz i el número 3 810 00:56:27,000 --> 00:56:30,000 per dir-li a la funció sum "Bé, aquí hi ha la matriu Vull sumar." 811 00:56:30,000 --> 00:56:34,000 "Aquí està la seva mida". 812 00:56:34,000 --> 00:56:39,000 Això té sentit? Respon això a la seva pregunta? 813 00:56:39,000 --> 00:56:42,000 >> En molts sentits, ho fa paral · lel el que estem fent amb els principals 814 00:56:42,000 --> 00:56:44,000 quan tenim els arguments de la línia d'ordres. 815 00:56:44,000 --> 00:56:47,000 Un programa com el xifrat César, per exemple, que cal 816 00:56:47,000 --> 00:56:53,000 arguments de línia d'ordres no seria capaç de fer qualsevol cosa. 817 00:56:53,000 --> 00:56:57,000 No sabria com xifrar si no l'hi vaig dir a ella que tecla utilitzar 818 00:56:57,000 --> 00:57:03,000 o si no l'hi digui quina cadena que volia xifrar. 819 00:57:03,000 --> 00:57:08,000 Sol · licitud d'una entrada, aquí és on tenim dos mecanismes diferents 820 00:57:08,000 --> 00:57:14,000 per a la presa d'entrada des de l'usuari, per prendre la informació des de l'usuari. 821 00:57:14,000 --> 00:57:19,000 Per problemes n 1 vam veure aquest getInt, GetString, forma GetFloat 822 00:57:19,000 --> 00:57:26,000 de sol · licitud d'una entrada, i que es diu mitjançant la seqüència d'entrada estàndard. 823 00:57:26,000 --> 00:57:28,000 És una mica diferent. 824 00:57:28,000 --> 00:57:31,000 És una cosa que es pot fer d'una sola vegada en lloc de 825 00:57:31,000 --> 00:57:35,000 en invocar el programa, en iniciar el programa en execució. 826 00:57:35,000 --> 00:57:41,000 Els arguments de línia d'ordres tot s'especifiquen quan s'inicia el funcionament del programa. 827 00:57:41,000 --> 00:57:47,000 Hem estat barrejant els dos. 828 00:57:47,000 --> 00:57:52,000 Quan fem servir arguments a una funció, que és molt similar als arguments de línia de comandes al principal. 829 00:57:52,000 --> 00:57:56,000 És quan s'invoca la funció que cal dir 830 00:57:56,000 --> 00:58:05,000 què és exactament el que necessita per dur a terme les seves tasques. 831 00:58:05,000 --> 00:58:08,000 Una altra cosa agradable a la vista i et deixaré veure en el seu temps lliure, 832 00:58:08,000 --> 00:58:11,000 i va ser cobert en la prova-va ser la noció d'abast 833 00:58:11,000 --> 00:58:15,000 i les variables locals davant les variables globals. 834 00:58:15,000 --> 00:58:18,000 Es presta atenció a això. 835 00:58:18,000 --> 00:58:23,000 >> Ara que estem arribant a aquestes altres coses, 836 00:58:23,000 --> 00:58:27,000 a la setmana 3 comencem a parlar de recerca i ordenació. 837 00:58:27,000 --> 00:58:32,000 Recerca i classificació, almenys en CS50, 838 00:58:32,000 --> 00:58:39,000 és en gran mesura una introducció a algunes de les parts més teòrics de la informàtica. 839 00:58:39,000 --> 00:58:42,000 El problema de la recerca, el problema de la classificació 840 00:58:42,000 --> 00:58:46,000 són problemes grans i canòniques. 841 00:58:46,000 --> 00:58:52,000 Com es pot trobar un nombre concret d'una matriu de milers de milions de nombres enters? 842 00:58:52,000 --> 00:58:55,000 Com trobar un nom en particular dins d'una llibreta de telèfons 843 00:58:55,000 --> 00:58:59,000 que s'emmagatzema a l'ordinador portàtil? 844 00:58:59,000 --> 00:59:04,000 I, llavors, introduir la noció de temps d'execució asimptòtica 845 00:59:04,000 --> 00:59:11,000 per quantificar realment quant temps, quant aquests problemes són, 846 00:59:11,000 --> 00:59:14,000 el temps que triguen a resoldre. 847 00:59:14,000 --> 00:59:20,000 En, crec, 2011 al quiz que hi ha un problema que crec que mereix 848 00:59:20,000 --> 00:59:27,000 cobrint molt ràpidament, el que és aquest, problema 12. 849 00:59:27,000 --> 00:59:32,000 O no, és Omega. 850 00:59:32,000 --> 00:59:41,000 >> Aquí estem parlant del temps d'execució més ràpida possible 851 00:59:41,000 --> 00:59:46,000 per un algorisme particular i llavors el temps d'execució més lenta possible. 852 00:59:46,000 --> 00:59:52,000 Aquesta Omega i O en realitat només són accessos directes. 853 00:59:52,000 --> 00:59:55,000 Són dreceres de notació per dir 854 00:59:55,000 --> 00:59:59,000 la rapidesa en el cas millor serà el nostre algorisme d'execució, 855 00:59:59,000 --> 01:00:06,000 i el lent que en el pitjor cas possible que el nostre algorisme de córrer? 856 01:00:06,000 --> 01:00:10,000 Anem a fer un parell d'ells, i aquests també van ser coberts 857 01:00:10,000 --> 01:00:13,000 en el curt en notació asimptòtica, que recomano encaridament. 858 01:00:13,000 --> 01:00:17,000 Jackson va fer un treball realment bo. 859 01:00:17,000 --> 01:00:23,000 Amb la recerca binària, parlem de recerca binària com un algoritme, 860 01:00:23,000 --> 01:00:28,000 i solem parlar en termes de la seva gran O. 861 01:00:28,000 --> 01:00:30,000 Quina és la gran O? 862 01:00:30,000 --> 01:00:34,000 Quin és el temps d'execució més lenta possible de cerca binària? 863 01:00:34,000 --> 01:00:36,000 [Estudiant] N ²? 864 01:00:36,000 --> 01:00:41,000 Close, suposo que similar a això. 865 01:00:41,000 --> 01:00:43,000 És molt més ràpid que això. 866 01:00:43,000 --> 01:00:45,000 [Estudiant] Binary? >> Sí, la recerca binària. 867 01:00:45,000 --> 01:00:47,000 [Estudiant] És log n. 868 01:00:47,000 --> 01:00:49,000 Iniciar sessió núm, així que el que fa log n significa? 869 01:00:49,000 --> 01:00:51,000 Es redueix a la meitat cada iteració. 870 01:00:51,000 --> 01:00:56,000 Exactament, en el cas més lent possible, 871 01:00:56,000 --> 01:01:00,000 dir si vostè té una matriu ordenada 872 01:01:00,000 --> 01:01:08,000 d'un milió de nombres enters i el nombre que està buscant 873 01:01:08,000 --> 01:01:14,000 lar és el primer element de la matriu o l'element d'últim en la matriu. 874 01:01:14,000 --> 01:01:18,000 Recordeu, l'algorisme de recerca binària funciona buscant en l'element mitjà, 875 01:01:18,000 --> 01:01:21,000 veure si aquest és el partit que vostè està buscant. 876 01:01:21,000 --> 01:01:23,000 Si és així, llavors bé, vas trobar. 877 01:01:23,000 --> 01:01:27,000 >> En el millor cas possible, la velocitat binària es fa la cerca? 878 01:01:27,000 --> 01:01:29,000 [Els estudiants] 1. 879 01:01:29,000 --> 01:01:32,000 1, és la constant de temps, gran O de 1. Si. 880 01:01:32,000 --> 01:01:36,000 [Estudiant] Tinc una pregunta. Quan dius iniciar de n, que vols dir pel que fa a la base 2, no? 881 01:01:36,000 --> 01:01:40,000 Sí, així és la cosa. 882 01:01:40,000 --> 01:01:44,000 Diem núm de registre, i suposo que quan jo era a la secundària 883 01:01:44,000 --> 01:01:48,000 Sempre vaig assumir que era log base 10. 884 01:01:48,000 --> 01:01:57,000 Sí, això si, log 2 base típicament és el que fem servir. 885 01:01:57,000 --> 01:02:02,000 Un cop més, tornar a la recerca binària, si vostè està buscant, ja sigui per 886 01:02:02,000 --> 01:02:05,000 l'element al final o l'element al principi, 887 01:02:05,000 --> 01:02:08,000 perquè comences al centre i després de rebutjar 888 01:02:08,000 --> 01:02:13,000 qualsevol mitjà no compleix amb els criteris que vostè està buscant, 889 01:02:13,000 --> 01:02:15,000 i te'n vas al següent meitat i l'altra meitat al costat i la mitjana. 890 01:02:15,000 --> 01:02:19,000 Si estic buscant l'element més gran de la matriu d'enters milions 891 01:02:19,000 --> 01:02:25,000 Me'n vaig a reduir a la meitat, com a màxim registre d'1 milió de vegades 892 01:02:25,000 --> 01:02:28,000 abans que finalment provar i veure que l'element que estic buscant 893 01:02:28,000 --> 01:02:33,000 es troba en el més gran o al més alt índex de la matriu, 894 01:02:33,000 --> 01:02:38,000 i que es durà registre de n, iniciar d'1 milió de vegades. 895 01:02:38,000 --> 01:02:40,000 >> Ordenament de bombolla. 896 01:02:40,000 --> 01:02:43,000 Vostès recorden l'algorisme d'ordenament de bombolla? 897 01:02:43,000 --> 01:02:47,000 Kevin, ¿em pot donar un resum ràpid del que va succeir en l'algorisme d'ordenament de bombolla? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Bàsicament es passa a través de tot a la llista. 899 01:02:50,000 --> 01:02:52,000 Es veu en les dues primeres. 900 01:02:52,000 --> 01:02:55,000 Si el primer és més gran que el segon els swaps. 901 01:02:55,000 --> 01:02:58,000 A continuació, es compara la segona i tercera, la mateixa cosa, swaps, 902 01:02:58,000 --> 01:03:00,000 tercer i quart, tot el camí cap avall. 903 01:03:00,000 --> 01:03:03,000 Majors nombres seguiran fins al final. 904 01:03:03,000 --> 01:03:07,000 I després de molts cicles però ja està. 905 01:03:07,000 --> 01:03:11,000 Exactament, és el que Kevin va dir és que veurem grans nombres 906 01:03:11,000 --> 01:03:15,000 bombolla fins al final de la matriu. 907 01:03:15,000 --> 01:03:19,000 Per exemple, ¿t'importa caminar a través d'aquest exemple, si aquesta és la nostra matriu? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Vostè prendrà 2 i 3. 909 01:03:21,000 --> 01:03:23,000 3 és més gran que 2, pel que intercanviar-les. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Dret, de manera que canviar això, i pel que tenim 2, 3, 6, 4 i 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] A continuació, es comparen els 3 i 6. 912 01:03:31,000 --> 01:03:33,000 3 és inferior a 6, pel que ells van, 913 01:03:33,000 --> 01:03:37,000 i 6 i 4, que et canviar perquè 4 és inferior a 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Dret, pel que em surt 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] i 9 és major que 6, de manera que sortir-ne. 916 01:03:46,000 --> 01:03:48,000 I t'agradaria tornar a través d'ell de nou. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] M'he fet a hores d'ara? >> [Kevin] No 918 01:03:50,000 --> 01:03:52,000 I per què no es em fa en aquest moment? 919 01:03:52,000 --> 01:03:54,000 Perquè sembla que la meva matriu està ordenada. Estic mirant. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Anar a través d'ell de nou i assegureu-vos que no són els swaps no més 921 01:03:57,000 --> 01:04:00,000 abans que vostè pot parar del tot. 922 01:04:00,000 --> 01:04:04,000 Exactament el que necessita per seguir endavant a través i assegureu-vos que no hi ha swaps 923 01:04:04,000 --> 01:04:06,000 que es pot fer en aquest moment. 924 01:04:06,000 --> 01:04:08,000 En realitat només era afortunat, com vostè ha dit, que acabem 925 01:04:08,000 --> 01:04:12,000 només haver de fer una passada a través de nosaltres i estem ordenats. 926 01:04:12,000 --> 01:04:16,000 Però per fer això en el cas general, que realment haurà de fer això una i altra vegada. 927 01:04:16,000 --> 01:04:20,000 I de fet, aquest va ser un exemple de la millor cas possible, 928 01:04:20,000 --> 01:04:24,000 com vam veure en el problema. 929 01:04:24,000 --> 01:04:28,000 Hem vist que el millor cas possible es n. 930 01:04:28,000 --> 01:04:32,000 Vam anar a través de la matriu 1 vegada. 931 01:04:32,000 --> 01:04:35,000 Quin és el pitjor cas possible per aquest algorisme? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 I això quin aspecte té? Quina seria una mirada àmplia com això portaria temps ² n? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [inaudible] ordenats. 935 01:04:43,000 --> 01:04:51,000 Exactament, així que si tingués la sèrie 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 primer el 9 seria bombolla tot el camí cap amunt. 937 01:04:54,000 --> 01:04:59,000 Després d'1 repetició tindríem 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Llavors el 7 fins burbujearía, 6, 5, 2, 7, 9, i així successivament i així successivament. 939 01:05:07,000 --> 01:05:13,000 >> Hauríem d'anar a través de tota la matriu n vegades, 940 01:05:13,000 --> 01:05:16,000 i de fet pots aconseguir una mica més precís que aquest 941 01:05:16,000 --> 01:05:23,000 perquè una vegada que ens hem mogut del 9 fins al final fins en la seva última posició possible 942 01:05:23,000 --> 01:05:26,000 sabem que mai hem de comparar aquest element nou. 943 01:05:26,000 --> 01:05:29,000 Quan comencem bombollejant del 7 944 01:05:29,000 --> 01:05:35,000 sabem que podem aturar una vegada que el 7 és just abans de les 9 945 01:05:35,000 --> 01:05:37,000 doncs ja hem comparat la 9 a la mateixa. 946 01:05:37,000 --> 01:05:46,000 Si fa això d'una manera intel · ligent, no és veritat, suposo, que de molt temps. 947 01:05:46,000 --> 01:05:49,000 No vas a comparar totes les possibles combinacions de [inaudible] 948 01:05:49,000 --> 01:05:55,000 cada vegada que vostè va a través de cada iteració. 949 01:05:55,000 --> 01:05:59,000 Però tot i això, quan parlem d'aquest límit superior es diu que 950 01:05:59,000 --> 01:06:04,000 vostè està mirant ² n comparacions fins al final. 951 01:06:04,000 --> 01:06:12,000 >> Anem a tornar, i ja que estem començant a aconseguir una mica curt de temps 952 01:06:12,000 --> 01:06:15,000 Jo diria que sens dubte ha de passar per la resta d'aquesta taula, 953 01:06:15,000 --> 01:06:17,000 omplir tot. 954 01:06:17,000 --> 01:06:20,000 Penseu en exemples. Penseu en exemples concrets. 955 01:06:20,000 --> 01:06:22,000 És molt pràctic i útil de fer. 956 01:06:22,000 --> 01:06:25,000 Dibuixa a terme. 957 01:06:25,000 --> 01:06:28,000 Aquest és el tipus de taula que a mesura que avança a través de la informàtica 958 01:06:28,000 --> 01:06:32,000 que realment hauria de començar a conèixer aquestes cor. 959 01:06:32,000 --> 01:06:34,000 Aquests són el tipus de preguntes que vostè aconsegueix en les entrevistes. 960 01:06:34,000 --> 01:06:36,000 Aquestes són les classes de coses que són bones saber, 961 01:06:36,000 --> 01:06:41,000 i pensar en aquests casos extrems, realment trobar la manera de pensar 962 01:06:41,000 --> 01:06:45,000 sabent que per ordenar la matriu bombolla pitjor possible 963 01:06:45,000 --> 01:06:52,000 per ordenar amb que és el que està en l'ordre invers. 964 01:06:52,000 --> 01:06:58,000 >> Punters. Anem a parlar una mica sobre els punters. 965 01:06:58,000 --> 01:07:03,000 En els últims minuts que tenim aquí 966 01:07:03,000 --> 01:07:11,000 Sé que això és com l'arxiu d'E / S que és bastant nou. 967 01:07:11,000 --> 01:07:19,000 Quan parlem sobre els punters de la raó per la qual vull parlar de punters 968 01:07:19,000 --> 01:07:24,000 és perquè, primer, quan estem treballant en C 969 01:07:24,000 --> 01:07:33,000 estem realment en un nivell força baix en comparació amb els llenguatges de programació més moderns. 970 01:07:33,000 --> 01:07:38,000 Som realment capaços de manipular les variables en la memòria, 971 01:07:38,000 --> 01:07:43,000 esbrinar on es troba realment dins la nostra memòria RAM. 972 01:07:43,000 --> 01:07:46,000 Quan hagueu arribat a prendre classes de sistema operatiu que vostè veurà 973 01:07:46,000 --> 01:07:48,000 que és, de nou, una mena d'abstracció. 974 01:07:48,000 --> 01:07:50,000 Això no és realment el cas. 975 01:07:50,000 --> 01:07:52,000 Tenim memòria virtual que està ocultant els detalls de la nostra part. 976 01:07:52,000 --> 01:07:58,000 >> Però per ara es pot assumir que quan es té un programa, 977 01:07:58,000 --> 01:08:02,000 per exemple, quan s'inicia el funcionament del seu programa-xifrat César 978 01:08:02,000 --> 01:08:06,000 Vaig a tornar al meu iPad realment ràpid- 979 01:08:06,000 --> 01:08:12,000 que en els seus inicis el seu programa, si té, per exemple, 980 01:08:12,000 --> 01:08:15,000 4 gigabytes de RAM en el seu ordinador portàtil, 981 01:08:15,000 --> 01:08:21,000 et quedes de banda aquest tros, i anomenarem a aquest RAM. 982 01:08:21,000 --> 01:08:25,000 I comença en un lloc al que anomenarem a 0, 983 01:08:25,000 --> 01:08:30,000 i acaba en un lloc que anomenarem a 4 gigabytes. 984 01:08:30,000 --> 01:08:37,000 Realment no puc escriure. L'home, que és hackejat. 985 01:08:37,000 --> 01:08:40,000 Quan s'executa el programa 986 01:08:40,000 --> 01:08:44,000 el sistema operatiu esculpeix la memòria RAM, 987 01:08:44,000 --> 01:08:51,000 i especifica els diferents segments per diferents parts del seu programa per viure 988 01:08:51,000 --> 01:08:58,000 Aquí sota aquesta zona és una mena de terra de ningú. 989 01:08:58,000 --> 01:09:02,000 Quan es puja una mica més aquí 990 01:09:02,000 --> 01:09:05,000 que tens en realitat el lloc on 991 01:09:05,000 --> 01:09:09,000 el codi de la vida dels seus programes. 992 01:09:09,000 --> 01:09:13,000 Aquest codi binari real, que en realitat arxiu executable es carrega en memòria 993 01:09:13,000 --> 01:09:17,000 quan s'executa un programa, i viu en el segment de codi. 994 01:09:17,000 --> 01:09:22,000 I a mesura que s'executa el programa el processador es veu en aquest segment de codi 995 01:09:22,000 --> 01:09:24,000 per esbrinar quina és la següent instrucció? 996 01:09:24,000 --> 01:09:27,000 Quina és la següent línia de codi que necessita per executar? 997 01:09:27,000 --> 01:09:31,000 >> També hi ha un segment de dades, i és aquí on les constants de cadena 998 01:09:31,000 --> 01:09:34,000 s'emmagatzemen que vostè ha estat utilitzant. 999 01:09:34,000 --> 01:09:42,000 I després més amunt hi ha un lloc anomenat el munt. 1000 01:09:42,000 --> 01:09:46,000 Tenim accés a la memòria d'allí usant malloc, 1001 01:09:46,000 --> 01:09:49,000 i després cap a la part superior del seu programa 1002 01:09:49,000 --> 01:09:52,000 aquí hi ha la pila, 1003 01:09:52,000 --> 01:09:57,000 i aquí és on hem estat jugant durant gairebé tot el principi. 1004 01:09:57,000 --> 01:09:59,000 Això no és a escala o res. 1005 01:09:59,000 --> 01:10:03,000 Molt d'això és molt dependent de la màquina, 1006 01:10:03,000 --> 01:10:10,000 depèn del sistema operatiu, però això és relativament com les coses es chunked dalt. 1007 01:10:10,000 --> 01:10:17,000 Quan s'executa un programa i es declara una variable anomenada x- 1008 01:10:17,000 --> 01:10:27,000 Vaig a dibuixar una altra casella de sota, i això serà una RAM també. 1009 01:10:27,000 --> 01:10:29,000 I vaig a mirar. 1010 01:10:29,000 --> 01:10:34,000 Anem a dibuixar línies irregulars per indicar que això és només una petita part de RAM 1011 01:10:34,000 --> 01:10:38,000 i no tots de la mateixa mida que ens acostem al cim. 1012 01:10:38,000 --> 01:10:43,000 >> Si jo declaro una variable sencera anomenada x, 1013 01:10:43,000 --> 01:10:49,000 llavors el que realment aconsegueix és un mapatge 1014 01:10:49,000 --> 01:10:54,000 que s'emmagatzema a la taula de símbols del programa del meu 1015 01:10:54,000 --> 01:11:00,000 que connecta la x nom a aquesta regió de memòria que he dibuixat 1016 01:11:00,000 --> 01:11:03,000 aquí entre les barres verticals. 1017 01:11:03,000 --> 01:11:08,000 Si tinc una línia de codi en el meu programa que diu que x = 7 1018 01:11:08,000 --> 01:11:15,000 el processador sap "Oh, està bé, jo sé que la vida de x en aquesta ubicació en la memòria." 1019 01:11:15,000 --> 01:11:25,000 "Vaig a seguir endavant i escriure un 7 Allà." 1020 01:11:25,000 --> 01:11:28,000 Com sap quina ubicació és a la memòria? 1021 01:11:28,000 --> 01:11:30,000 Bé, que tot es fa en temps de compilació. 1022 01:11:30,000 --> 01:11:34,000 El compilador s'encarrega d'assignar a cadascuna de les variables que s'aniran 1023 01:11:34,000 --> 01:11:40,000 i creació d'una assignació especial o en lloc de connectar els punts 1024 01:11:40,000 --> 01:11:43,000 entre un símbol i on es va, el nom d'una variable 1025 01:11:43,000 --> 01:11:46,000 i on va a viure a la memòria. 1026 01:11:46,000 --> 01:11:50,000 Però resulta que en realitat podem accedir-hi en els nostres programes també. 1027 01:11:50,000 --> 01:11:55,000 Això es fa important quan vam començar a parlar d'algunes de les estructures de dades, 1028 01:11:55,000 --> 01:11:58,000 que és un concepte que presentarem en el futur. 1029 01:11:58,000 --> 01:12:09,000 >> Però per ara, el que podem saber és que es crea un punter a aquesta ubicació, x. 1030 01:12:09,000 --> 01:12:12,000 Per exemple, pot crear una variable punter. 1031 01:12:12,000 --> 01:12:16,000 Quan creem una variable punter s'utilitza la notació estrella. 1032 01:12:16,000 --> 01:12:21,000 En aquest cas, es diu que jo vaig a crear un punter a un int. 1033 01:12:21,000 --> 01:12:24,000 És un tipus com qualsevol altre. 1034 01:12:24,000 --> 01:12:27,000 Li donem una variable com i, 1035 01:12:27,000 --> 01:12:32,000 i després el va posar igual a la direcció, a una adreça. 1036 01:12:32,000 --> 01:12:38,000 En aquest cas, podem establir i assenyalar x 1037 01:12:38,000 --> 01:12:43,000 prenent la direcció de x, que fem amb aquest signe, 1038 01:12:43,000 --> 01:12:55,000 i després posem i apuntar a la mateixa. 1039 01:12:55,000 --> 01:12:59,000 El que això fa és essencialment si mirem al nostre RAM 1040 01:12:59,000 --> 01:13:02,000 això crea una variable independent. 1041 01:13:02,000 --> 01:13:04,000 Es dirà i, 1042 01:13:04,000 --> 01:13:06,000 i quan aquesta línia de codi s'executa 1043 01:13:06,000 --> 01:13:13,000 en realitat crearà un punter poc que solem anomenar com una fletxa, 1044 01:13:13,000 --> 01:13:15,000 i fixa i per apuntar a x. 1045 01:13:15,000 --> 01:13:17,000 Sí 1046 01:13:17,000 --> 01:13:19,000 [Estudiant] x Si ja és un punter, que vostè acaba de fer 1047 01:13:19,000 --> 01:13:22,000 int * i = x en lloc de tenir el signe? 1048 01:13:22,000 --> 01:13:24,000 Sí 1049 01:13:24,000 --> 01:13:27,000 Si x és ja un indicador, llavors es pot establir dos punters iguals entre si, 1050 01:13:27,000 --> 01:13:30,000 en aquest cas i no indiquen la x, 1051 01:13:30,000 --> 01:13:34,000 però seria apuntar a qualsevol x està apuntant. 1052 01:13:34,000 --> 01:13:37,000 Malauradament, estem fora de temps. 1053 01:13:37,000 --> 01:13:44,000 >> El que vull dir en aquest punt, podem parlar d'això fora de línia, 1054 01:13:44,000 --> 01:13:49,000 però jo diria que començar a treballar a través d'aquest problema, # 14. 1055 01:13:49,000 --> 01:13:53,000 Vostè pot veure que hi ha ja una mica ple en aquí per tu. 1056 01:13:53,000 --> 01:13:57,000 Es pot veure que quan declarem 2 punteres, int * x i i *, 1057 01:13:57,000 --> 01:14:01,000 i observi que assenyalar amb el * al costat de la variable va ser una cosa que es va fer l'any passat. 1058 01:14:01,000 --> 01:14:05,000 Resulta que això és similar al que estem fent aquest any. 1059 01:14:05,000 --> 01:14:11,000 No importa on s'escriu el * quan vostè està declarant el punter. 1060 01:14:11,000 --> 01:14:17,000 Però hem escrit la asterisc al costat del tipus de 1061 01:14:17,000 --> 01:14:24,000 perquè això fa que sigui molt clar que vostè està declarant una variable punter. 1062 01:14:24,000 --> 01:14:27,000 Es pot veure que la declaració dels 2 punters ens dóna 2 caixes. 1063 01:14:27,000 --> 01:14:31,000 Aquí quan ens vam posar x igual a malloc 1064 01:14:31,000 --> 01:14:34,000 El que això diu és deixar de banda la memòria en el munt. 1065 01:14:34,000 --> 01:14:41,000 Aquesta petita caixa aquí, aquest cercle, es troba en el munt. 1066 01:14:41,000 --> 01:14:43,000 X està apuntant a la mateixa. 1067 01:14:43,000 --> 01:14:46,000 Recordeu que i encara no apunta a res. 1068 01:14:46,000 --> 01:14:50,000 Per aconseguir la memòria-per emmagatzemar el nombre 42 en x 1069 01:14:50,000 --> 01:14:55,000 usarem la notació què? 1070 01:14:55,000 --> 01:14:59,000 [Estudiant] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Exactament, x = 42. 1072 01:15:01,000 --> 01:15:06,000 Això significa seguir la fletxa i llençar 42 en aquest país. 1073 01:15:06,000 --> 01:15:09,000 Aquí on ens vam posar yyx tenim i que apunta a x. 1074 01:15:09,000 --> 01:15:13,000 De nou, això és el mateix que el que Kevin va dir que ens vam proposar i igual a x. 1075 01:15:13,000 --> 01:15:15,000 I no apunta x. 1076 01:15:15,000 --> 01:15:19,000 Més aviat, està apuntant al que x està assenyalant així. 1077 01:15:19,000 --> 01:15:24,000 >> I, finalment, en aquesta última caixa hi ha 2 possibles coses que podríem fer. 1078 01:15:24,000 --> 01:15:28,000 Una d'elles és que podríem dir * x = 13. 1079 01:15:28,000 --> 01:15:33,000 L'altra cosa és que podríem dir-Alex, saps el que podríem fer aquí? 1080 01:15:33,000 --> 01:15:37,000 Es podria dir * x = 13 or- 1081 01:15:37,000 --> 01:15:41,000 [Estudiant] Es pot dir qualsevol cosa int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Si això es coneix com una variable int que podíem fer això. 1083 01:15:45,000 --> 01:15:49,000 També podríem dir * i = 13 perquè els dos estan apuntant al mateix lloc, 1084 01:15:49,000 --> 01:15:51,000 per poder utilitzar qualsevol d'elles per arribar-hi. 1085 01:15:51,000 --> 01:15:56,000 Si. >> [Estudiant] Quin aspecte tindria si ens limitem a dir x int és de 13? 1086 01:15:56,000 --> 01:16:00,000 Això seria declarar una nova variable anomenada x, que no anava a funcionar. 1087 01:16:00,000 --> 01:16:04,000 Tindríem una col · lisió perquè va declarar que x sigui un punter fins aquí. 1088 01:16:04,000 --> 01:16:10,000 [Estudiant] Si acaba de tenir aquesta declaració per si mateix el que es veuria en termes del cercle? 1089 01:16:10,000 --> 01:16:14,000 Si haguéssim de x = 13 llavors tindríem una caixa, i en lloc de tenir una fletxa 1090 01:16:14,000 --> 01:16:16,000 que surt de la caixa que havia empat com un 13. 1091 01:16:16,000 --> 01:16:19,000 [Estudiant] A la caixa. Bé. 1092 01:16:19,000 --> 01:16:24,000 >> Gràcies per mirar i bona sort en el concurs 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]