1 00:00:00,000 --> 00:00:02,880 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> ALTAVEU 1: Aquest és CS50 i aquest és el començament de la setmana dues. 4 00:00:13,500 --> 00:00:18,400 Per tant, anem a bussejar a la dreta en alguna cosa és a dir amb errors, per així dir-ho. 5 00:00:18,400 --> 00:00:24,015 Per tant, aquí és IDE CS50 i he detenir amb antelació aquest screen-- maleïda 6 00:00:24,015 --> 00:00:25,070 ella. 7 00:00:25,070 --> 00:00:25,760 Spoiler d'alerta. 8 00:00:25,760 --> 00:00:26,260 Tot bé. 9 00:00:26,260 --> 00:00:29,060 He tirat aquesta pantalla aquí, que té un programa molt simple. 10 00:00:29,060 --> 00:00:32,659 Si ens desplacem cap avall, la majoria d'això és simplement comenta, 11 00:00:32,659 --> 00:00:36,730 però aquí a les línies 13 a través 17 tenim un programa. 12 00:00:36,730 --> 00:00:40,580 >> És sintàcticament vàlida, el que significa que si Va compilar ell, compilar i executar, 13 00:00:40,580 --> 00:00:41,920 però és buggy. 14 00:00:41,920 --> 00:00:47,330 Aquest programa pretén en els comentaris sobre de la tapa que s'hagi d'imprimir 10 estels, 15 00:00:47,330 --> 00:00:48,870 però no ho fa. 16 00:00:48,870 --> 00:00:53,290 I en base a la seva experiència, o aviat a ser experiència amb C, 17 00:00:53,290 --> 00:00:56,820 Potser lògicament destriar per què això és, de fet, amb errors? 18 00:00:56,820 --> 00:00:57,804 Sí? 19 00:00:57,804 --> 00:00:59,220 AUDIÈNCIA: Es va de zero a 10. 20 00:00:59,220 --> 00:01:01,884 Això és 11 iteracions. 21 00:01:01,884 --> 00:01:02,550 ALTAVEU 1: Sí. 22 00:01:02,550 --> 00:01:06,030 Així, va de zero a través d'e iguals a 10, 23 00:01:06,030 --> 00:01:08,140 que per descomptat és d'11 iteracions. 24 00:01:08,140 --> 00:01:10,020 Per tant, es va a impressió, de fet, 11 estrelles. 25 00:01:10,020 --> 00:01:13,040 Per tant, la convenció de la informàtica en la majoria dels llenguatges de programació 26 00:01:13,040 --> 00:01:15,270 és, de fet, només per començarà a comptar des de zero, 27 00:01:15,270 --> 00:01:18,800 però comptar fins, però no a través de la valor que en realitat importa. 28 00:01:18,800 --> 00:01:21,216 >> Ara, això és una cosa que Pren una mica de temps per acostumar 29 00:01:21,216 --> 00:01:25,350 i fins i tot Scratch, dissenyada com és per als no programadors o no equip 30 00:01:25,350 --> 00:01:28,070 científics i per als nens en gran mesura, està dissenyat per tenir 31 00:01:28,070 --> 00:01:29,570 començar a comptar en general a la una. 32 00:01:29,570 --> 00:01:30,277 I això està bé. 33 00:01:30,277 --> 00:01:33,110 Pot començar a comptar absolutament en un si això és més còmode. 34 00:01:33,110 --> 00:01:37,210 I comptar fins ia través de 10, però et donaràs compte particular aquesta setmana 35 00:01:37,210 --> 00:01:39,950 i més enllà que tan moltes coses en la programació 36 00:01:39,950 --> 00:01:42,465 suposar que 0 és el primer dígits amb què es compta, 37 00:01:42,465 --> 00:01:45,590 que vostè va a resultar més fàcil només per entrar en aquest hàbit de partida 38 00:01:45,590 --> 00:01:49,490 des de zero i comptar fins al valor vostè es preocupa en aquest moment de la 39 00:01:49,490 --> 00:01:49,990 aconseguir anar. 40 00:01:49,990 --> 00:01:50,990 >> Per tant, que s'ha fixat que. 41 00:01:50,990 --> 00:01:53,670 Canviem el menor o equival a poc menys. 42 00:01:53,670 --> 00:01:56,050 Fem una ullada a un segon exemple aquí. 43 00:01:56,050 --> 00:01:59,585 >> Així, aquest programa també afirma en la seva comenta sobre de la tapa que s'hagi d'imprimir 44 00:01:59,585 --> 00:02:02,260 deu estrelles, però no ho fa. 45 00:02:02,260 --> 00:02:05,540 Quin és l'error aquí? 46 00:02:05,540 --> 00:02:07,930 >> Així, què-- i ho sento, siguem clars. 47 00:02:07,930 --> 00:02:08,610 10 estels. 48 00:02:08,610 --> 00:02:11,644 Un per línia, però no és així. 49 00:02:11,644 --> 00:02:14,810 Així que, de fet, em va deixar anar endavant i compilar aquest perquè és una mica menys 50 00:02:14,810 --> 00:02:16,900 aclarir basat en aquesta descripció. 51 00:02:16,900 --> 00:02:18,720 Déjame anar al nostre directori d'origen. 52 00:02:18,720 --> 00:02:25,110 Fer cotxet un tall de punts, un buggy. 53 00:02:25,110 --> 00:02:28,680 OK, veig 11 estrelles, que segueix sent problemàtica, 54 00:02:28,680 --> 00:02:30,090 però també són tot en una sola línia. 55 00:02:30,090 --> 00:02:31,500 Quin és el problema aquí? 56 00:02:31,500 --> 00:02:32,339 Sí. 57 00:02:32,339 --> 00:02:33,255 AUDIÈNCIA: [inaudible]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 ALTAVEU 1: Sí. 60 00:02:36,860 --> 00:02:40,210 Així que aquesta és una subtilesa que pot Recordo haver-me fet un breu esment de. 61 00:02:40,210 --> 00:02:42,793 Tot i que tot es veu bastant, i està molt ben sangria, 62 00:02:42,793 --> 00:02:45,850 i com que es veu a les ratllades com en aquesta línia 16 i 17 són, 63 00:02:45,850 --> 00:02:47,600 de fet, amb sagnia sota aquest bucle. 64 00:02:47,600 --> 00:02:48,400 Això és irrellevant. 65 00:02:48,400 --> 00:02:50,460 L'equip no es conèixer o veure l'espai en blanc. 66 00:02:50,460 --> 00:02:52,910 L'espai en blanc és només per nosaltres els éssers humans, estilísticament. 67 00:02:52,910 --> 00:02:57,010 L'equip no sap quan es té claus, que seria, de fet, 68 00:02:57,010 --> 00:02:58,280 solucionar aquest problema. 69 00:02:58,280 --> 00:03:02,350 >> Així, si en realitat vam ser i posar explícitament en aquestes claus 70 00:03:02,350 --> 00:03:05,220 això seria fer això deixant en clar que el compilador 71 00:03:05,220 --> 00:03:07,930 que realment vull per executar dues línies de codi nou, 72 00:03:07,930 --> 00:03:09,220 i una altra, i una altra. 73 00:03:09,220 --> 00:03:11,680 Però quina és l'explicació fonamental? 74 00:03:11,680 --> 00:03:12,180 Oi? 75 00:03:12,180 --> 00:03:15,260 Nosaltres no estrictament necessari arrissat es prepara tot el temps, 76 00:03:15,260 --> 00:03:18,210 tot i que és probablement el millor pràctica per entrar en l'hàbit de totes maneres 77 00:03:18,210 --> 00:03:20,878 encara que afegeix dues caràcters al seu codi. Per què? 78 00:03:20,878 --> 00:03:22,380 >> AUDIÈNCIA: [inaudible]? 79 00:03:22,380 --> 00:03:24,630 ALTAVEU 1: Sí, així que és una altra solució en conjunt. 80 00:03:24,630 --> 00:03:25,130 Oi? 81 00:03:25,130 --> 00:03:28,250 Sobretot si a primera vista no ho fa realment apreciar el que està passant. 82 00:03:28,250 --> 00:03:31,070 Bé, segurament podríem acaba de fer dues coses alhora 83 00:03:31,070 --> 00:03:32,710 i simplement evitar el problema del tot. 84 00:03:32,710 --> 00:03:36,080 I això està bé, però ara, per als propòsits de l'actualitat, el que 85 00:03:36,080 --> 00:03:38,200 és l'explicació per l'error? 86 00:03:38,200 --> 00:03:39,810 Per què eren totes aquestes estrelles en una línia? 87 00:03:39,810 --> 00:03:40,806 Sí? 88 00:03:40,806 --> 00:03:43,296 >> AUDIÈNCIA: Sembla que si vostè té una línia de codi, 89 00:03:43,296 --> 00:03:46,649 vostè pot fer-ho sense ells. 90 00:03:46,649 --> 00:03:47,440 ALTAVEU 1: Exactament. 91 00:03:47,440 --> 00:03:48,750 Això és només una convenció humana. 92 00:03:48,750 --> 00:03:50,750 La gent s'adona que és un mica molest o avorrit 93 00:03:50,750 --> 00:03:53,470 a haver de posar les claus de tot de les vegades si el que vols fer 94 00:03:53,470 --> 00:03:55,090 és executar una línia de codi. 95 00:03:55,090 --> 00:03:57,660 Per tant, els éssers humans van decidir alguns Fa temps que això està bé. 96 00:03:57,660 --> 00:04:01,180 Si vostè vol posar tota la seva bucle en aquesta sola línia com aquesta, 97 00:04:01,180 --> 00:04:04,030 això està bé amb el single punt i coma al final. 98 00:04:04,030 --> 00:04:07,210 Però només es pot fer una d'aquestes línia sense les claus. 99 00:04:07,210 --> 00:04:09,900 >> Així que, quan la guia d'estil CS50 com li per assenyalar, 100 00:04:09,900 --> 00:04:11,980 veuràs que en general, és bon hàbit 101 00:04:11,980 --> 00:04:14,920 per entrar en això fins que estiguis pèrdua bastant còmode 102 00:04:14,920 --> 00:04:17,404 d'aquest tipus de convencions i fer la seva pròpia cosa. 103 00:04:17,404 --> 00:04:18,820 Mentre estàs acte consistent. 104 00:04:18,820 --> 00:04:21,540 I parlarem més sobre estil una mica més tard avui. 105 00:04:21,540 --> 00:04:23,200 >> Per tant, permetin-me obro un altre programa. 106 00:04:23,200 --> 00:04:24,930 Per descomptat, hem fixar que el 10 també. 107 00:04:24,930 --> 00:04:32,470 Déjame anar endavant i escric un veritable programa ràpid que vaig a trucar, 108 00:04:32,470 --> 00:04:38,140 diguem, llaç dot C. Així, llaç dot C. I en bucle punt C que tindré, 109 00:04:38,140 --> 00:04:41,970 incloure E / S estàndard punt H int void main. 110 00:04:41,970 --> 00:04:44,020 I ara farem, de fet, un bucle. 111 00:04:44,020 --> 00:04:46,020 Així, 4 int I aconsegueix zero. 112 00:04:46,020 --> 00:04:48,660 I és menys de, diguem, 50. 113 00:04:48,660 --> 00:04:49,950 I més, més. 114 00:04:49,950 --> 00:04:53,350 I llavors aquí anem seguir endavant i no imprimir F. 115 00:04:53,350 --> 00:04:56,400 I després vull imprimir R i una nova línia, punt i coma. 116 00:04:56,400 --> 00:05:00,015 >> I això ha d'imprimir tot el números de zero fins a 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Alguns cap assenteix. 119 00:05:03,680 --> 00:05:04,270 Uns núms. 120 00:05:04,270 --> 00:05:05,339 Quin és l'error ja? 121 00:05:05,339 --> 00:05:06,630 Quin és l'error fàcil que vaig fer? 122 00:05:06,630 --> 00:05:07,170 Sí. 123 00:05:07,170 --> 00:05:08,544 >> AUDIÈNCIA: [inaudible]. 124 00:05:08,544 --> 00:05:09,210 ALTAVEU 1: Sí. 125 00:05:09,210 --> 00:05:11,520 Així que, encara que sembla com això és el que em proposo, 126 00:05:11,520 --> 00:05:13,920 Recordo que I és també Només un caràcter ASCII. 127 00:05:13,920 --> 00:05:14,955 >> Per tant, si jo dic, imprimir "I." 128 00:05:14,955 --> 00:05:16,670 És, literalment, va imprimir I. Per tant, si jo 129 00:05:16,670 --> 00:05:20,030 voler plug-in d'un marcador de posició valor que en realitat necessito fer això 130 00:05:20,030 --> 00:05:22,630 i després plug-in de la valor d'I dinàmicament. 131 00:05:22,630 --> 00:05:25,200 Altrament, només vaig a obtenir 50 d'I a la pantalla. 132 00:05:25,200 --> 00:05:28,140 >> Així que, deixa anar endavant i fer d'aquest bucle, executar-lo, 133 00:05:28,140 --> 00:05:30,650 i, de fet, tenim tot el camí a través de 49. 134 00:05:30,650 --> 00:05:34,140 I si em desplaço en el temps que veig el número zero al principi. 135 00:05:34,140 --> 00:05:36,050 >> Bé, i si em espècie de pota? 136 00:05:36,050 --> 00:05:37,800 Què passa si faig això? 137 00:05:37,800 --> 00:05:40,120 El fet que jo no estic pensant. 138 00:05:40,120 --> 00:05:40,970 Quin és aquest programa. 139 00:05:40,970 --> 00:05:43,970 Una vegada que estàs compila i s'executa, va a fer lògicament? 140 00:05:43,970 --> 00:05:44,870 >> AUDIÈNCIA: Res. 141 00:05:44,870 --> 00:05:45,661 >> ALTAVEU 1: Res. 142 00:05:45,661 --> 00:05:47,156 Perquè és això? 143 00:05:47,156 --> 00:05:49,124 >> AUDIÈNCIA: I està dissenyat per al zero. 144 00:05:49,124 --> 00:05:51,899 Per tant, la condició és falsa. 145 00:05:51,899 --> 00:05:52,940 ALTAVEU 1: Sí, exactament. 146 00:05:52,940 --> 00:05:55,110 Tot el codi és correcte, sintàcticament. 147 00:05:55,110 --> 00:05:57,310 Això compilar aquest codi s'executarà, però no ho és 148 00:05:57,310 --> 00:06:00,110 farà res útil perquè jo em inicialitzar a zero. 149 00:06:00,110 --> 00:06:02,240 Després vam comprovar, és que més del 50? 150 00:06:02,240 --> 00:06:03,810 Òbviament, no, no ho és. 151 00:06:03,810 --> 00:06:05,760 Així que el bucle no s'executa en absolut. 152 00:06:05,760 --> 00:06:09,580 >> ¿I si fem alguna cosa una mica més temerari? 153 00:06:09,580 --> 00:06:12,890 Així que, què passa si ho fem com int I aconsegueix zero. 154 00:06:12,890 --> 00:06:15,640 I ara em deixa utilitzar l'estona bucle, que era una altra condició. 155 00:06:15,640 --> 00:06:21,810 I mentre jo dic, mentre que I és més gran que o igual a zero i, a continuació, en l'aquí 156 00:06:21,810 --> 00:06:26,070 seguir endavant i guardar l'arxiu, feu bucle. 157 00:06:26,070 --> 00:06:27,070 I estic a punt d'executar. 158 00:06:27,070 --> 00:06:30,230 Què vaig a veure això temps amb un bucle while? 159 00:06:30,230 --> 00:06:30,852 Sí. 160 00:06:30,852 --> 00:06:32,120 >> AUDIÈNCIA: Un bucle infinit? 161 00:06:32,120 --> 00:06:35,360 >> ALTAVEU 1: Un bucle infinit? 162 00:06:35,360 --> 00:06:36,662 Sí, i per què? 163 00:06:36,662 --> 00:06:38,120 AUDIÈNCIA: Perquè és sempre zero. 164 00:06:38,120 --> 00:06:38,786 ALTAVEU 1: Sí. 165 00:06:38,786 --> 00:06:40,100 Així que s'inicialitza a zero. 166 00:06:40,100 --> 00:06:44,470 Per descomptat que és sempre més gran que o igual a 0 com a resultat. 167 00:06:44,470 --> 00:06:46,460 Així que, jo només vaig a veure això infinitament. 168 00:06:46,460 --> 00:06:49,850 I ara, aquest ha arribat una vegada o dues vegades al capdavant del curs. 169 00:06:49,850 --> 00:06:52,417 Què passa quan vostè tenir un bucle infinit? 170 00:06:52,417 --> 00:06:53,314 >> AUDIÈNCIA: Control C. 171 00:06:53,314 --> 00:06:53,980 ALTAVEU 1: Sí. 172 00:06:53,980 --> 00:06:56,250 Així Control C eventualment respondre. 173 00:06:56,250 --> 00:06:59,520 Per desgràcia, hem imprimim milions i milions de zeros ja 174 00:06:59,520 --> 00:07:01,520 per la qual cosa l'equip té tipus de tinc davant meu. 175 00:07:01,520 --> 00:07:03,394 Per tant, va ignorar em per una mica. 176 00:07:03,394 --> 00:07:06,560 Però si vostè acaba de colpejar Control C uns pocs vegades en el seu teclat Mac o PC, 177 00:07:06,560 --> 00:07:08,790 finalment deu, de fet, donar per acabat. 178 00:07:08,790 --> 00:07:11,770 I si no, li mostrarem alguns tècniques abans de temps en el qual 179 00:07:11,770 --> 00:07:14,850 en realitat pot matar la força als programes, igual que en Windows i Mac OS, 180 00:07:14,850 --> 00:07:15,562 si cal. 181 00:07:15,562 --> 00:07:16,770 Però anem a intentar alguna cosa més. 182 00:07:16,770 --> 00:07:19,895 Anem realitat Increment I. És això encara serà infinit? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Déjame córrer això. 185 00:07:25,140 --> 00:07:27,090 I ara vostè pot classe de veure el que està passant. 186 00:07:27,090 --> 00:07:30,140 Això, també, és un bucle infinit. 187 00:07:30,140 --> 00:07:33,080 Però això és una mica d'una pregunta amb trampa. 188 00:07:33,080 --> 00:07:35,460 ¿Això va a imprimir números de sempre? 189 00:07:35,460 --> 00:07:36,647 >> AUDIÈNCIA: No. 190 00:07:36,647 --> 00:07:37,230 ALTAVEU 1: No. 191 00:07:37,230 --> 00:07:37,620 Per què? 192 00:07:37,620 --> 00:07:38,820 He sentit que alguns ens aquí. 193 00:07:38,820 --> 00:07:41,859 Algú-- Sí. 194 00:07:41,859 --> 00:07:44,275 AUDIÈNCIA: No té prou bits per mantenir realment està passant. 195 00:07:44,275 --> 00:07:44,730 ALTAVEU 1: D'acord. 196 00:07:44,730 --> 00:07:46,000 Així que no tinc prou bits per seguir endavant. 197 00:07:46,000 --> 00:07:47,124 Llavors, què passarà? 198 00:07:47,124 --> 00:07:49,320 És només va a parar? 199 00:07:49,320 --> 00:07:52,542 >> AUDIÈNCIA: En algun moment que tancarà ell-- 200 00:07:52,542 --> 00:07:54,500 ALTAVEU 1: Es tancarà el down bucle, però per què? 201 00:07:54,500 --> 00:07:57,950 ¿Què passarà al final de les seves fronteres? 202 00:07:57,950 --> 00:07:58,479 Sí? 203 00:07:58,479 --> 00:08:00,520 AUDIÈNCIA: Es farà un cicle de nou als nombres negatius. 204 00:08:00,520 --> 00:08:02,900 ALTAVEU 1: Per als nombres negatius, o si només estàvem tractant positiu, 205 00:08:02,900 --> 00:08:03,570 zero com a mínim. 206 00:08:03,570 --> 00:08:04,550 Així que sí, absolutament. 207 00:08:04,550 --> 00:08:08,059 Recordem que vam veure l'última vegada que si incrementar els seus trossets massa vegades, 208 00:08:08,059 --> 00:08:10,225 i vosaltres Fore desbordament la capacitat de la seva int 209 00:08:10,225 --> 00:08:13,058 o el que sigui el tipus de dades és, ets va a embolicar al voltant, probablement, 210 00:08:13,058 --> 00:08:14,020 dos nombres negatius. 211 00:08:14,020 --> 00:08:16,644 O si vostè ha especificat que el seu aquest producte ha de ser positiva, 212 00:08:16,644 --> 00:08:18,560 que es pot fer, però nosaltres no hem vist això encara, 213 00:08:18,560 --> 00:08:21,420 podria acabar almenys tornar a zero. 214 00:08:21,420 --> 00:08:22,410 Encara que, en realitat si. 215 00:08:22,410 --> 00:08:24,320 En aquest cas, negatiu números, en el cas 216 00:08:24,320 --> 00:08:26,870 el bucle es va a acabar perquè no és, de fet, 217 00:08:26,870 --> 00:08:29,220 més gran que o igual a zero si és negatiu. 218 00:08:29,220 --> 00:08:31,780 >> Així que, per desgràcia, com llarga hauríem d'esperar? 219 00:08:31,780 --> 00:08:35,490 En aquest moment estem fins què, 2000000-ish? 220 00:08:35,490 --> 00:08:37,705 Som com 2 mil milions, anem a haver d'esperar 221 00:08:37,705 --> 00:08:39,330 fins que realment podem veure aquest símptoma. 222 00:08:39,330 --> 00:08:46,200 Però podem veure una mica més ràpid, maybe-- anem a veure si podem interrompre. 223 00:08:46,200 --> 00:08:46,700 Vine. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Fins i tot els menús estan apareixent lentament. 226 00:08:51,331 --> 00:08:51,830 Tot bé. 227 00:08:51,830 --> 00:08:54,270 Per tant, anem a tornar a que en poc temps. 228 00:08:54,270 --> 00:08:56,320 És una bona temps-- maleïda sigui, els cadells. 229 00:08:56,320 --> 00:08:58,280 >> És un bon moment perquè alguns anuncis. 230 00:08:58,280 --> 00:09:01,225 Així que, si et poden agradar per participar en YHack, 231 00:09:01,225 --> 00:09:03,600 que és ser un esdeveniment patrocinat pels nostres amics de Yale. 232 00:09:03,600 --> 00:09:05,990 I, de fet, alguns el curs de TFS a Yale estan involucrats amb això. 233 00:09:05,990 --> 00:09:08,610 YHack és una organització internacional Hack-a-thon organitzada per i va sostenir 234 00:09:08,610 --> 00:09:12,395 a Yale, que reuneix 1.500 de la mateixa manera que els hackers de mentalitat i creatius tots 235 00:09:12,395 --> 00:09:13,120 el món. 236 00:09:13,120 --> 00:09:14,610 Si això és d'interès, fer una ullada aquí. 237 00:09:14,610 --> 00:09:17,401 Si això és massa breument en la pantalla, fer una ullada a les diapositives d'avui 238 00:09:17,401 --> 00:09:19,622 per a la direcció URL per yhack.org. 239 00:09:19,622 --> 00:09:21,080 Per tant, també a pocs anunciar. 240 00:09:21,080 --> 00:09:24,410 Així que, oficialment seccions començaran la setmana que ve aquí i New Haven. 241 00:09:24,410 --> 00:09:27,660 Recordeu que vaig a rebre una correu electrònic a la fi d'aquest cap de setmana d'allò més probable. 242 00:09:27,660 --> 00:09:29,390 Es triga molt de temps per CS50 a la secció, 243 00:09:29,390 --> 00:09:32,080 donades totes les persones en el classe i tothom es mou al voltant. 244 00:09:32,080 --> 00:09:34,871 I tots els becaris d'ensenyament ' horaris també estan encara solidificant, 245 00:09:34,871 --> 00:09:38,110 però estigui atent a un correu electrònic i si cal ser, pot tornar a la secció d'allà després. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Per tant, fins i tot si vostè és un participant constant en seccions, adonar-se que gairebé tots 248 00:09:43,280 --> 00:09:46,786 dels recursos que fem servir en seccions estan a disposició del públic en el CS50 249 00:09:46,786 --> 00:09:48,460 Estudiar a aquest URL aquí. 250 00:09:48,460 --> 00:09:51,630 Per tant, si desitja mai per tornar opinió el material de la secció, o llegir per davant, 251 00:09:51,630 --> 00:09:54,170 o no es pot fer una mica de setmana, adonar-se que les diapositives de la mostra, 252 00:09:54,170 --> 00:09:58,210 i els problemes i les definicions, i més estan tots allí també. 253 00:09:58,210 --> 00:10:00,645 >> Les hores d'oficina reprenen avui, i demà, i dimecres, 254 00:10:00,645 --> 00:10:03,020 i el dijous comprovar el supòsit de lloc web per a l'horari. 255 00:10:03,020 --> 00:10:05,690 >> I també, ara el llançament avui és CS50 Discutiu. 256 00:10:05,690 --> 00:10:09,230 Per tant, sempre que vostè té preguntes per entre si o per al personal de l'assignatura, 257 00:10:09,230 --> 00:10:12,099 i generalment estan treballant en un conjunt de problemes, 258 00:10:12,099 --> 00:10:15,015 t'adones que no ho fa necessàriament de donar volta a la humana pròxima a vostè. 259 00:10:15,015 --> 00:10:17,810 Si no hi ha ningú allà, vostè pot arribar a nosaltres i companys de classe 260 00:10:17,810 --> 00:10:19,890 en línia a través CS50 Discutiu. 261 00:10:19,890 --> 00:10:22,600 Per tant, aquesta és una discussió pensió per al curs, 262 00:10:22,600 --> 00:10:24,550 i adonar-se que aquest és potser el millor 263 00:10:24,550 --> 00:10:28,480 lloc per començar quan vostè té preguntes quan fora de les hores d'oficina 264 00:10:28,480 --> 00:10:29,470 en particular. 265 00:10:29,470 --> 00:10:31,070 >> Per dur començaran aquesta setmana també. 266 00:10:31,070 --> 00:10:33,170 En Foc i Gel [Inaudible] a New Haven. 267 00:10:33,170 --> 00:10:35,379 Fes una ullada a el curs de pàgina web amb la finalitat de confirmar la seva assistència. 268 00:10:35,379 --> 00:10:36,753 En primer arribat, primer servit per això. 269 00:10:36,753 --> 00:10:39,380 Si no rep en aquesta setmana farem aquests divendres majoria de tots els 270 00:10:39,380 --> 00:10:40,400 durant el termini. 271 00:10:40,400 --> 00:10:41,830 >> OK, i ara una paraula sobre la classificació. 272 00:10:41,830 --> 00:10:44,690 Especialment en entrar en un problema establir un, que està fora aquesta setmana, 273 00:10:44,690 --> 00:10:46,670 i el problema va fixar dos ia partir de llavors. 274 00:10:46,670 --> 00:10:51,680 Com fem per avaluar conjunts P i avaluar la qualitat dels mateixos? 275 00:10:51,680 --> 00:10:55,560 Així, és de quatre eixos que utilitzem en CS50, i són aquests quatre aquí. 276 00:10:55,560 --> 00:10:59,200 >> Àmbit d'aplicació, que captura en una numèrica base de tot el del conjunt P 277 00:10:59,200 --> 00:10:59,860 Què fer front a. 278 00:10:59,860 --> 00:11:02,890 Es correspon aproximadament amb esforç, i és la nostra forma de capturar 279 00:11:02,890 --> 00:11:05,190 ¿Va tractar la meitat de la P set, tot el conjunt P. 280 00:11:05,190 --> 00:11:08,860 Això és fàcil d'aconseguir perfecta puntuacions en si ho fa, de fet, 281 00:11:08,860 --> 00:11:11,020 tractar tots els aspectes del conjunt P. 282 00:11:11,020 --> 00:11:12,010 Així, tingues-ho en compte. 283 00:11:12,010 --> 00:11:13,420 >> La correcció és exactament això. 284 00:11:13,420 --> 00:11:17,760 El seu treball codi com l'especificació i com a solució de la mostra el personal ' 285 00:11:17,760 --> 00:11:19,730 suggereixen que el seu codi deu, de fet, treballar. 286 00:11:19,730 --> 00:11:23,260 Check 50, si no s'ha complert amb el però, està en P establir una especificació 287 00:11:23,260 --> 00:11:25,060 i de la voluntat general, donar-li respostes sí / no 288 00:11:25,060 --> 00:11:26,518 pel que fa a si el codi és correcte. 289 00:11:26,518 --> 00:11:30,680 Almenys en el que anem Per avaluar en base a les proves 290 00:11:30,680 --> 00:11:32,430 que es corre dins d'aquest programa. 291 00:11:32,430 --> 00:11:33,850 >> El disseny és molt més subjectiva. 292 00:11:33,850 --> 00:11:35,994 Això és el ben escrit és el seu codi. 293 00:11:35,994 --> 00:11:38,410 I això és una cosa que vas a millorar en el transcurs del temps, 294 00:11:38,410 --> 00:11:41,201 i és una cosa que anem a proporcionar més informació qualitativa sobre. 295 00:11:41,201 --> 00:11:43,350 I per disseny que podria significa abans d'hora 296 00:11:43,350 --> 00:11:47,650 podria tenir la temptació d'alguna P set de fer alguna cosa loopingly, 297 00:11:47,650 --> 00:11:51,590 però per tenir potser tres, o quatre, o 5 bucles niats davanteres o mentre niat 298 00:11:51,590 --> 00:11:52,090 bucles. 299 00:11:52,090 --> 00:11:54,130 Això generalment ha començar a fer tremolar 300 00:11:54,130 --> 00:11:56,070 i seria generalment mal disseny considerat. 301 00:11:56,070 --> 00:11:59,490 I vostè començarà a veure a la classe i De la classe que bones maneres de fer les coses, 302 00:11:59,490 --> 00:12:02,920 males maneres de fer les coses que podrien ser tots correctes, però no 303 00:12:02,920 --> 00:12:04,304 necessàriament ben dissenyat. 304 00:12:04,304 --> 00:12:05,220 Igual que escriure un assaig. 305 00:12:05,220 --> 00:12:08,100 Vostè pot ser capaç de posar paraules en una pàgina que són gramaticalment correcte, 306 00:12:08,100 --> 00:12:10,016 però l'assaig o la tesi que estan en és 307 00:12:10,016 --> 00:12:11,810 completament incoherent o poc convincent. 308 00:12:11,810 --> 00:12:15,930 I el que podria ser l'anàleg al món escrit de mal o bon disseny. 309 00:12:15,930 --> 00:12:18,490 >> I l'estil, també, és bastant subjectiu. 310 00:12:18,490 --> 00:12:20,060 Però almenys que esperem coherència. 311 00:12:20,060 --> 00:12:21,480 Això és el bonic que és el seu codi. 312 00:12:21,480 --> 00:12:22,840 Són coses molt bé sagnia? 313 00:12:22,840 --> 00:12:26,600 Són les seves variables bé nomenats / Són tots de les seves parèntesi i claus 314 00:12:26,600 --> 00:12:27,920 alineat com haurien de ser? 315 00:12:27,920 --> 00:12:31,490 Tenim una guia d'estil CS50 com el conjunt problema t'orientarà en. 316 00:12:31,490 --> 00:12:33,730 Els més còmodes són la benvinguda a allunyar-se aquest 317 00:12:33,730 --> 00:12:35,771 sempre que vostè treballa per compte consistent. 318 00:12:35,771 --> 00:12:38,020 I això, també, és una lliçó reforçarem en la secció. 319 00:12:38,020 --> 00:12:40,990 Així que, si tot això era una mica , Explica el conjunt i les seccions P ràpida 320 00:12:40,990 --> 00:12:42,900 vaig a entrar en més profunditat en poc temps. 321 00:12:42,900 --> 00:12:45,490 >> Però en general, tenim molt pocs cubs per CS50. 322 00:12:45,490 --> 00:12:48,170 Les puntuacions són generalment en una escala d'un a tres, o d'un a cinc. 323 00:12:48,170 --> 00:12:50,836 Estem literally-- i jo no podem dir això prou en la primera setmana. 324 00:12:50,836 --> 00:12:51,582 Tres és bona. 325 00:12:51,582 --> 00:12:54,290 Així, tot i que, sí, tres de cinc anys normalment, matemàticament, 326 00:12:54,290 --> 00:12:57,240 podria ser un 60 per cent o menys com un D. 327 00:12:57,240 --> 00:12:58,840 Tres és, de fet, bona. 328 00:12:58,840 --> 00:13:01,050 I, de fet, esperem la majoria dels estudiants a la classe 329 00:13:01,050 --> 00:13:04,280 per començar el terme al voltant dos en dos, i tres, i quatre potes. 330 00:13:04,280 --> 00:13:05,510 Probablement no tants cincs. 331 00:13:05,510 --> 00:13:06,661 No hi ha molts altres. 332 00:13:06,661 --> 00:13:08,910 Però en general per iniciar en el punt ideal de la corba 333 00:13:08,910 --> 00:13:11,694 de manera que a mesura que passa el temps, en realitat hi ha espai per a, 334 00:13:11,694 --> 00:13:13,360 i oportunitats per a la progressió superior. 335 00:13:13,360 --> 00:13:15,810 Així que, per favor no equiparar 3 amb 60%. 336 00:13:15,810 --> 00:13:17,410 És molt més abstracte que això. 337 00:13:17,410 --> 00:13:20,160 La fórmula amb la qual es calcula graus es ponderaran de la manera següent. 338 00:13:20,160 --> 00:13:21,610 Correcció val més. 339 00:13:21,610 --> 00:13:23,010 Disseny val una mica menys. 340 00:13:23,010 --> 00:13:24,490 Estil val una mica menys. 341 00:13:24,490 --> 00:13:26,950 I això generalment captura la quantitat de temps 342 00:13:26,950 --> 00:13:29,800 que va en aconseguir cada un d'aquests eixos just. 343 00:13:29,800 --> 00:13:31,810 L'estil és molt fàcil, ha de ser súper ràpid, 344 00:13:31,810 --> 00:13:33,657 però és un hàbit fàcil per obtenir mandra. 345 00:13:33,657 --> 00:13:35,490 La correcció podria prendre que la major part del temps. 346 00:13:35,490 --> 00:13:38,990 Perseguint alguns podrien error prendre aquesta hora extra o més, 347 00:13:38,990 --> 00:13:41,737 i així, el marcador en última instància, que capta. 348 00:13:41,737 --> 00:13:43,070 I per això, ara una paraula més greu. 349 00:13:43,070 --> 00:13:45,240 Des CS50 té la distinció, per bé 350 00:13:45,240 --> 00:13:47,440 o per mal, de ser potser millor informat 351 00:13:47,440 --> 00:13:50,065 amb els temes de l'acadèmica l'honestedat de la majoria de qualsevol altre curs. 352 00:13:50,065 --> 00:13:53,720 I, en efecte, és al meu coneixement que enviem més estudiants, per desgràcia, 353 00:13:53,720 --> 00:13:56,690 amb fins disciplinaris cada any com a conseqüència d'això. Per tant, 354 00:13:56,690 --> 00:13:59,040 en l'interès de la plena divulgació, parlarem breument 355 00:13:59,040 --> 00:14:02,820 sobre el que succeeix en CS50, i el que pot fer, i el que pot tenir en compte. 356 00:14:02,820 --> 00:14:05,530 >> Així doncs, aquí des de 2007, quan Vaig heretar el curs, 357 00:14:05,530 --> 00:14:07,870 és el nombre de casos de taula Ad. 358 00:14:07,870 --> 00:14:10,690 Junta d'anunci és disciplinària de Harvard cos, o ara el Consell d'Honor, 359 00:14:10,690 --> 00:14:13,790 a la qual es refereixen els casos quan els estudiants fan alguna cosa que el curs de 360 00:14:13,790 --> 00:14:15,470 programa considera irraonable. 361 00:14:15,470 --> 00:14:17,220 No hi ha patró veritable aquí, diria jo. 362 00:14:17,220 --> 00:14:19,530 Es fluctua en el anys, però en general 363 00:14:19,530 --> 00:14:22,262 aquest és el nombre de els casos que es coneixen. 364 00:14:22,262 --> 00:14:23,970 El nombre d'estudiants que estan involucrats? 365 00:14:23,970 --> 00:14:25,290 És també varia. 366 00:14:25,290 --> 00:14:27,930 En general, l'any passat per exemple, 29 estudiants de la Universitat de Harvard 367 00:14:27,930 --> 00:14:29,740 eren Ad embarcats, per així dir-ho. 368 00:14:29,740 --> 00:14:32,670 29 d'ells els estudiants actuals, Dos d'ells estudiants anteriors, 369 00:14:32,670 --> 00:14:35,610 que estaven col·laborant d'alguna manera desfavorable. 370 00:14:35,610 --> 00:14:38,400 I després, en termes de la percentatge, en general al voltant de 3% 371 00:14:38,400 --> 00:14:41,360 de la classe que, per desgràcia, fa que aquest tipus de decisions. 372 00:14:41,360 --> 00:14:44,470 >> Així, l'any passat va ser de 3,5% del total d'estudiants de CS50 373 00:14:44,470 --> 00:14:46,820 que era Ad embarcats, per així dir-ho. 374 00:14:46,820 --> 00:14:48,490 >> Així que, què vol dir tot això? 375 00:14:48,490 --> 00:14:49,660 I què és el que realment fem? 376 00:14:49,660 --> 00:14:52,930 >> Així, per a la divulgació completa, ens absolutament, com els informàtics, 377 00:14:52,930 --> 00:14:57,620 comptar amb eines de programari a la nostra disposició i és molt fàcil per a nosaltres, per ser justos, 378 00:14:57,620 --> 00:15:00,980 companys de classe que altres que no són creuar aquestes línies per creuar comparar 379 00:15:00,980 --> 00:15:04,570 cada presentació aquest any en contra de cada presentació durant els últims vuit anys. 380 00:15:04,570 --> 00:15:05,445 Programari fa això. 381 00:15:05,445 --> 00:15:07,440 I en última instància, és els ulls humans que decideixen 382 00:15:07,440 --> 00:15:11,410 si o no fer cap referència la matèria per a la seva posterior adjudicació, 383 00:15:11,410 --> 00:15:12,737 però el programari sense dubte ajuda. 384 00:15:12,737 --> 00:15:15,820 I això, francament, és per això que crec que tenim un nombre tan gran de CS50. 385 00:15:15,820 --> 00:15:18,540 No és perquè CS50 estudiants o estudiants CS més 386 00:15:18,540 --> 00:15:20,840 generalment són menys honestos que qualsevol altre estudiant, 387 00:15:20,840 --> 00:15:22,340 és només tenim la eines i les tècniques 388 00:15:22,340 --> 00:15:24,095 amb la qual aprofitar aquesta primera passada. 389 00:15:24,095 --> 00:15:25,960 >> Però sí mantenir un ull en totes aquestes coses 390 00:15:25,960 --> 00:15:30,340 així, de nou, en interès de la reconeixent el treball que s'està posant 391 00:15:30,340 --> 00:15:32,397 en per una súper majoria de la classe. 392 00:15:32,397 --> 00:15:34,230 I la política del curs en l'honestedat acadèmica, 393 00:15:34,230 --> 00:15:37,021 tot i que és un munt de paràgrafs de llarg amb un munt de bales 394 00:15:37,021 --> 00:15:40,490 que són d'esperar bastant llegible, que realment no es redueixen a ser raonable. 395 00:15:40,490 --> 00:15:44,000 I la millor regla d'or que oferim dins del pla d'estudis 396 00:15:44,000 --> 00:15:46,020 És aquesta, l'essència de tot el treball que 397 00:15:46,020 --> 00:15:47,850 sotmetre a aquest curs ha de ser la seva. 398 00:15:47,850 --> 00:15:51,510 I de fet, en gairebé tots els casos referits per acció disciplinària 399 00:15:51,510 --> 00:15:55,640 que era a causa d'algun estudiant a altes hores de nit típicament tornar el seu codi 400 00:15:55,640 --> 00:15:58,130 més pura i simple a un company de classe, que després el va adoptar 401 00:15:58,130 --> 00:16:00,840 en la seva totalitat o significativament dels mateixos. 402 00:16:00,840 --> 00:16:02,680 >> Però en realitat, això està bé. 403 00:16:02,680 --> 00:16:04,684 I de fet, a l'oficina hores, les tires de paper 404 00:16:04,684 --> 00:16:07,850 vostè ha estat lliurat si véns per l'oficina hores la setmana passada encoratja tant. 405 00:16:07,850 --> 00:16:09,710 Tens tota la benvinguts i encoratjats 406 00:16:09,710 --> 00:16:12,340 per discutir els butlletins de problemes amb els companys de classe. 407 00:16:12,340 --> 00:16:14,461 Per ajudar els altres quan ensopegada. 408 00:16:14,461 --> 00:16:17,710 Però en general, la regla d'or ha de ser això, "quan vostè està demanant ajuda, 409 00:16:17,710 --> 00:16:20,412 vostè pot mostrar el seu codi als altres, però vostè no pot veure la seva ". 410 00:16:20,412 --> 00:16:22,620 Així que, en altres paraules, si estic lluitant amb algun conjunt P 411 00:16:22,620 --> 00:16:25,290 i jo estic assegut allà al menjador saló, oa la biblioteca, 412 00:16:25,290 --> 00:16:28,470 oa l'aula tractant de trobar alguna falta, 413 00:16:28,470 --> 00:16:30,340 Certament puc mostrar el meu codi a la meva pantalla 414 00:16:30,340 --> 00:16:32,590 a la persona que s'asseu al costat per a mi, sens dubte el personal, 415 00:16:32,590 --> 00:16:33,600 sinó també un company de classe. 416 00:16:33,600 --> 00:16:36,580 Però si la solució que el meu company de classe ofereix és, oh, 417 00:16:36,580 --> 00:16:39,200 aquí només fer una ullada al que Ho vaig fer, que creua la línia. 418 00:16:39,200 --> 00:16:43,120 >> I m'atreviria a dir que és en general una cosa raonable per a la majoria de la gent 419 00:16:43,120 --> 00:16:45,030 de detectar molt fàcilment la línia de. 420 00:16:45,030 --> 00:16:47,195 I així, consulteu el pla d'estudis per a més detall. 421 00:16:47,195 --> 00:16:49,070 I ara un dels més aspectes controvertits 422 00:16:49,070 --> 00:16:52,529 del programa CS50 que vaig pensar que parlaria en conclusió aquí 423 00:16:52,529 --> 00:16:53,820 és l'anomenada clàusula de penediment. 424 00:16:53,820 --> 00:16:55,340 Així que, aquí hi ha tota la lletra petita. 425 00:16:55,340 --> 00:16:58,090 Però, en general hem vist en els últims 8 anys o més 426 00:16:58,090 --> 00:17:01,510 que, de fet, gairebé tots CS50 de casos de deshonestedat acadèmica 427 00:17:01,510 --> 00:17:04,390 han estat el resultat de simplement pobres fent tard a la nit la decisió. 428 00:17:04,390 --> 00:17:07,144 El resultat de la tensió, el resultat de falta d'alimentació, la falta de son, 429 00:17:07,144 --> 00:17:09,560 massa sèries P, massa terminis, massa compromisos. 430 00:17:09,560 --> 00:17:13,520 S'acumuli en febrer 1 a.m. Estrès, 03:00 AM, 04:00, amb un termini imminent. 431 00:17:13,520 --> 00:17:17,020 La majoria dels estudiants en aquests casos simplement han pres males decisions 432 00:17:17,020 --> 00:17:20,619 que molt bé podrien lamentar la matí següent si no minuts més tard, 433 00:17:20,619 --> 00:17:25,490 però fins l'any passat no hi va haver vàlvula d'escapament que aquests estudiants podrien 434 00:17:25,490 --> 00:17:29,140 realment obrir-se a abordar realment el problema de front i sense por de ser 435 00:17:29,140 --> 00:17:30,850 arrencat des de la universitat en conjunt. 436 00:17:30,850 --> 00:17:33,260 >> I, de fet, hem introduït aquesta clàusula tot l'any passat, 437 00:17:33,260 --> 00:17:35,970 que diu que si dins 72 hores, tres dies, 438 00:17:35,970 --> 00:17:37,970 de creuar alguna línia prescrit en el pla d'estudis 439 00:17:37,970 --> 00:17:41,178 véns endavant a un el curs de cap i tindrem una xerrada sobre aquest tema. 440 00:17:41,178 --> 00:17:43,720 Encara hi ha alguns dels que resultat, al contrari del que és 441 00:17:43,720 --> 00:17:44,990 ha informat del contrari. 442 00:17:44,990 --> 00:17:49,190 Encara hi ha algun resultat que és accionable pel curs, 443 00:17:49,190 --> 00:17:51,611 en general, la reducció a zero d'un conjunt P o prendre alguna altra acció, 444 00:17:51,611 --> 00:17:53,610 però ho farem, de fet, manejar nosaltres mateixos i no 445 00:17:53,610 --> 00:17:58,460 consulteu el més alt eren el resultat podria ser molt més greus. 446 00:17:58,460 --> 00:18:01,810 I, de fet, per compartir el que va passar l'any passat, en els vuit anys, i ara 447 00:18:01,810 --> 00:18:04,950 nou anys, de l'ensenyament d'aquest curs i després de jugar amb diversos botons, 448 00:18:04,950 --> 00:18:07,866 girant diversos dials en l'últim diversos anys en l'honestedat acadèmica, 449 00:18:07,866 --> 00:18:11,920 i veure per les dades sense aparents impacte, fins i tot dels discursos d'aquest tipus, 450 00:18:11,920 --> 00:18:15,490 Aquest va ser sens dubte el millor hem introduït pedagògicament 451 00:18:15,490 --> 00:18:18,090 en vuit anys al llarg de aquestes línies en CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 estudiants es van presentar sota aquesta clàusula l'any passat. 453 00:18:21,010 --> 00:18:23,389 Ens prenem cap mesura per set d'aquests estudiants, 454 00:18:23,389 --> 00:18:25,430 determinar que eren innecessàriament preocupat. 455 00:18:25,430 --> 00:18:27,304 Ells no tenien, de fet, creuat una línia, però 456 00:18:27,304 --> 00:18:28,960 va ser una bona xerrada per tenir, però. 457 00:18:28,960 --> 00:18:31,190 Ens ho van treure 11 de les puntuacions que es van presentar. 458 00:18:31,190 --> 00:18:33,840 I en un cas, li preguntem a un estudiant per fer un conjunt de problemes. 459 00:18:33,840 --> 00:18:36,370 Però més convincent, sincerament, amb aquests 19 xerrades, 460 00:18:36,370 --> 00:18:39,020 que era molt més del que s'espera que tinguin, cadascuna d'elles 461 00:18:39,020 --> 00:18:41,370 10 minuts de potser una una hora de durada, també va portar 462 00:18:41,370 --> 00:18:44,920 a la llum una sèrie de qüestions en relació amb problemes familiars, problemes d'amic, 463 00:18:44,920 --> 00:18:46,940 problemes de salut mental que després contracten, 464 00:18:46,940 --> 00:18:50,200 amb la benedicció, resident de l'estudiant degà, o amics, o qualsevol altre número 465 00:18:50,200 --> 00:18:51,450 dels recursos de suport. 466 00:18:51,450 --> 00:18:54,454 Així que això era de lluny un dels millors usos del nostre temps 467 00:18:54,454 --> 00:18:55,870 i un dels millors intervencions. 468 00:18:55,870 --> 00:18:58,870 >> Amb això dit, no tenia d'entrada a la taxa de detecció 469 00:18:58,870 --> 00:19:00,909 de deshonestedat acadèmica en general. 470 00:19:00,909 --> 00:19:02,950 I m'atreveixo a dir, aquest subconjunt dels estudiants d'últim any 471 00:19:02,950 --> 00:19:06,350 era un grup demogràfic que mai abans identificat abans 472 00:19:06,350 --> 00:19:08,140 i mai havia connectat abans. 473 00:19:08,140 --> 00:19:10,020 I així, es tractava de meravelloses històries d'èxit 474 00:19:10,020 --> 00:19:13,390 tot i que van sortir a la llum en menys de circumstàncies òptimes. 475 00:19:13,390 --> 00:19:15,640 Per tant, tingui això en compte com vostè fa, potser, 476 00:19:15,640 --> 00:19:17,390 alguna mala decisió a tu mateix a la nit, 477 00:19:17,390 --> 00:19:20,151 que es recorre tant de temps com l'estudiant en aquesta situació 478 00:19:20,151 --> 00:19:23,400 posseir i presentar perquè puguem tenir aquest tipus de xerrada i tractar amb ell 479 00:19:23,400 --> 00:19:27,310 d'una manera que és educatiu, i després podem deixar-lo enrere al dia següent. 480 00:19:27,310 --> 00:19:30,335 >> Així que sense més preàmbuls, prendre la vora fora d'aquesta conversa, 481 00:19:30,335 --> 00:19:35,080 la raó per la qual els cadells són fins a dir només per trencar el gel per un moment. 482 00:19:35,080 --> 00:19:39,560 I, per desgràcia, tots són el son, però el que se suposava anava a succeir aquí 483 00:19:39,560 --> 00:19:41,760 era tot el món se suposava per sorpresa i tipus de relaxar 484 00:19:41,760 --> 00:19:43,910 després d'això molt pesada conversa. 485 00:19:43,910 --> 00:19:46,930 Però pel que sembla, em vaig posar els cadells per dormir. 486 00:19:46,930 --> 00:19:50,070 Però si vas a CS50 de cadells web Slash, 487 00:19:50,070 --> 00:19:51,610 pots veure'ls tot el dia. 488 00:19:51,610 --> 00:19:55,280 Particularment potser 02:00, o 3.00 hores, o 4:00 del matí a la nit 489 00:19:55,280 --> 00:19:57,480 per veure una mica d'alleujament de la tensió allà. 490 00:19:57,480 --> 00:19:58,805 Així que això és slash cadells. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Tot bé. 493 00:20:02,200 --> 00:20:03,020 ¿No era això divertit? 494 00:20:03,020 --> 00:20:04,200 D'ACORD. 495 00:20:04,200 --> 00:20:07,140 Així que, tornant a algun equip ciència, si m'ho permet. 496 00:20:07,140 --> 00:20:10,600 >> Per tant, recordar que l'última vegada que vam començar sense mirar just a principal, que 497 00:20:10,600 --> 00:20:13,930 va ser la funció per defecte, el quan bandera verda clic equivalent, 498 00:20:13,930 --> 00:20:16,999 però també vam començar breument escriure algunes de les nostres pròpies funcions. 499 00:20:16,999 --> 00:20:20,040 I fins al moment cap d'aquestes funcions han estat particularment gran o carnós. 500 00:20:20,040 --> 00:20:24,570 Et fiques en els més grans funcions, probablement, P conjunt 2, P 3 set, 501 00:20:24,570 --> 00:20:26,410 Definitivament P va fixar 4 en endavant. 502 00:20:26,410 --> 00:20:29,340 En aquest moment la majoria dels seus programes, si no tots ells, sens dubte per a P 503 00:20:29,340 --> 00:20:31,550 conjunt 1 es pot fer en la seva totalitat en principal. 504 00:20:31,550 --> 00:20:33,810 Si el seu programa només cinc línies, 10 línies, 505 00:20:33,810 --> 00:20:37,070 fins i tot 20 línies de llarg, perfectament raonable per escriure 506 00:20:37,070 --> 00:20:40,930 tot en principal i de no complicar més el seu codi, però el que estem fent avui 507 00:20:40,930 --> 00:20:44,360 i cap endavant està intentant també introduir algunes bones tècniques de disseny 508 00:20:44,360 --> 00:20:48,660 de manera que ara el codi es torna més complicat i com els problemes 509 00:20:48,660 --> 00:20:51,690 vol resoldre d'obtenir més i més interessant que té, més o menys, 510 00:20:51,690 --> 00:20:55,850 les eines en la seva caixa d'eines amb les que per dissenyar bones solucions a aquests. 511 00:20:55,850 --> 00:21:01,210 >> Per tant, anem a fer una ullada ràpida de tornada a aquest programa des de la darrera setmana, que 512 00:21:01,210 --> 00:21:06,550 va ser funcions zero punt C. I compte que, senzillament, 513 00:21:06,550 --> 00:21:10,310 sembla que això amb dos funcions, el principal i el nom d'impressió. 514 00:21:10,310 --> 00:21:13,160 I pensant a tornar o potser revertir l'enginyeria d'avui, 515 00:21:13,160 --> 00:21:16,880 el que va ser la motivació per introduir una funció en la línia 28 flama, 516 00:21:16,880 --> 00:21:18,180 Nom d'impressió? 517 00:21:18,180 --> 00:21:21,745 O el que era aquest un exemple d'en termes d'un principi o menjar per emportar, 518 00:21:21,745 --> 00:21:22,605 si ho faria. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Alguns murmuris. 521 00:21:27,300 --> 00:21:28,830 Què? 522 00:21:28,830 --> 00:21:32,210 >> Sí descomposició tan funcional és una espècie de la manera elegant de dir, 523 00:21:32,210 --> 00:21:34,690 descompondre el seu programa en les seves parts constituents 524 00:21:34,690 --> 00:21:37,530 i aleshores utilitzar aquestes parts per acoblar un conjunt. 525 00:21:37,530 --> 00:21:39,620 Per tant, això també és només una mica d'un mos ja, 526 00:21:39,620 --> 00:21:42,050 però això és potser fins i tot una millor exemple d'alguna cosa 527 00:21:42,050 --> 00:21:43,081 acaba de cridar l'abstracció. 528 00:21:43,081 --> 00:21:43,580 Oi? 529 00:21:43,580 --> 00:21:46,950 Abstracció serà un dels temes recurrents en CS50 530 00:21:46,950 --> 00:21:49,085 i ciències de la computació més en general, ja que és 531 00:21:49,085 --> 00:21:53,060 una tècnica amb la qual es pot resoldre problemes de manera més eficaç, ja que 532 00:21:53,060 --> 00:21:56,807 pot escriure solucions més intuïtivament i de manera que les escales 533 00:21:56,807 --> 00:21:58,390 i és comprensible per altres persones. 534 00:21:58,390 --> 00:21:59,860 Què vull dir amb això? 535 00:21:59,860 --> 00:22:04,340 >> Així, es podria dir que és molt més fàcil de llegir mirar un programa com aquest, 536 00:22:04,340 --> 00:22:05,990 súper curt que sigui. 537 00:22:05,990 --> 00:22:10,050 Quan vegi en la línia 22 que hi ha una funció anomenada, el nom d'impressió. 538 00:22:10,050 --> 00:22:12,620 Aquest nom només diu el que fa. 539 00:22:12,620 --> 00:22:15,780 Aquesta funció aparentment presa d'entrada entre els seus parèntesis, 540 00:22:15,780 --> 00:22:18,600 i pel que sembla fa alguna cosa, presumiblement imprimeix el nom. 541 00:22:18,600 --> 00:22:20,880 I així, tot i que absolutament podria tenir 542 00:22:20,880 --> 00:22:25,280 fet el que vam fer fa una setmana, que era acaba de prendre aquesta línia real de codi, 543 00:22:25,280 --> 00:22:28,710 desfer-se d'aquest, i obtenir desfer d'aquest tots junts, 544 00:22:28,710 --> 00:22:31,436 quin tipus de resumir distància la noció de la impressió d'un nom. 545 00:22:31,436 --> 00:22:33,060 No m'importa si vostè està utilitzant def impressió. 546 00:22:33,060 --> 00:22:35,601 No m'importa si té una cent S i N. Aquests barra invertida 547 00:22:35,601 --> 00:22:37,270 són detalls molt arcans. 548 00:22:37,270 --> 00:22:40,090 El que m'importa com programador està imprimint un nom. 549 00:22:40,090 --> 00:22:43,414 I així, què millor manera de fer- que per cridar a una funció, el nom d'impressió? 550 00:22:43,414 --> 00:22:46,330 I així, aquesta va ser una de les motivacions per fer alguna cosa com això. 551 00:22:46,330 --> 00:22:50,370 Fer el codi més llegible, més reutilitzable, i també s'auto descriptiva. 552 00:22:50,370 --> 00:22:52,120 Ara, anem a fer una ullada en un altre exemple, 553 00:22:52,120 --> 00:22:56,220 que era un funcions, que teníem aquí. 554 00:22:56,220 --> 00:23:00,367 >> Per tant, aquest és potser encara més convincent perquè, en aquest cas, 555 00:23:00,367 --> 00:23:01,700 No vull que acaba d'obtenir un int. 556 00:23:01,700 --> 00:23:03,320 Vull aconseguir un int positiu. 557 00:23:03,320 --> 00:23:06,470 I resulta que per obtenir un resultat positiu int que ha de fer un munt de treball de camp. 558 00:23:06,470 --> 00:23:06,969 Oi? 559 00:23:06,969 --> 00:23:09,600 No és una simple línia cridar com el nom d'impressió era, 560 00:23:09,600 --> 00:23:11,480 que és certament menys convincent. 561 00:23:11,480 --> 00:23:16,000 >> Per obtenir un int positiu, logically-- m'ho dius a mi desplaço cap avall per ocultar això. 562 00:23:16,000 --> 00:23:18,887 Què has de fer? 563 00:23:18,887 --> 00:23:20,720 Com totes les eines que tenen en aquest moment es 564 00:23:20,720 --> 00:23:24,440 coses com definició d'impressió de Standard Biblioteca i també de la biblioteca CS50 565 00:23:24,440 --> 00:23:26,990 tenim Obtenir Int, i obtenir Float, Obtenir Llarg Llarg, Get String, 566 00:23:26,990 --> 00:23:29,260 però l'únic, Germane, en aquest moment és aconseguir Int. 567 00:23:29,260 --> 00:23:32,970 Per tant, si l'única eina que tens en la seva caixa d'eines és Aconsegueix Int, 568 00:23:32,970 --> 00:23:35,505 com fem per a la implementació que per aconseguir int positiu? 569 00:23:35,505 --> 00:23:35,929 >> AUDIÈNCIA: Crear un registre i se'ls de si l'entrada que van donar 570 00:23:35,929 --> 00:23:36,762 va ser positiu o no. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> ALTAVEU 1: Perfecte. 573 00:23:40,640 --> 00:23:41,200 Exactament. 574 00:23:41,200 --> 00:23:43,950 Una altra de les eines que tenim a la nostra caixa d'eines d'una o dues setmanes 575 00:23:43,950 --> 00:23:45,419 és només la construcció de bucle. 576 00:23:45,419 --> 00:23:48,210 I així, si, si fem servir un temps llaç, o do while, o un primer pla 577 00:23:48,210 --> 00:23:50,850 bucle que probablement podria aconseguir lluny amb qualsevol dels que estan en alguna forma. 578 00:23:50,850 --> 00:23:55,140 Podem aplicar la noció de get int positiu només per l'ús Aconsegueix Int, 579 00:23:55,140 --> 00:23:57,830 i després simplement seguir cridant- de nou i mantenir molestar a l'usuari 580 00:23:57,830 --> 00:24:00,320 fins que ell o ella realment ens dóna el que volem. 581 00:24:00,320 --> 00:24:03,260 >> I ara, aquest abstracció del procés 582 00:24:03,260 --> 00:24:05,680 d'aconseguir un int positiu en una funció anomenada 583 00:24:05,680 --> 00:24:08,930 Obtenir Int positiu és una mica més convincent perquè mira això. 584 00:24:08,930 --> 00:24:10,990 Aquests són com 10 més línies de codi que 585 00:24:10,990 --> 00:24:15,090 estan involucrats en l'obtenció d'un int positiu, i jo no m'importa com ho facis. 586 00:24:15,090 --> 00:24:17,850 L'única cosa que importa és que vostè pot fer-ho, i per això m'he 587 00:24:17,850 --> 00:24:21,660 ocults tots aquests detalls darrere d'un funció anomenada Get Positiu int que, 588 00:24:21,660 --> 00:24:23,430 de fet, té aquesta do while. 589 00:24:23,430 --> 00:24:27,660 >> I veure la setmana passada per la sintaxi allà, però simplement declara N, 590 00:24:27,660 --> 00:24:29,800 i s'imprimeix el instruccions per a l'usuari. 591 00:24:29,800 --> 00:24:33,330 Crida Obtenir Int i després comprova aquesta condició de nou, i una altra, 592 00:24:33,330 --> 00:24:35,230 i una altra fins que l'usuari coopera. 593 00:24:35,230 --> 00:24:38,000 >> Així que ara, a poques comprovacions de sanitat. 594 00:24:38,000 --> 00:24:40,370 Per a aquells familiaritzats potser amb una mica de programació, 595 00:24:40,370 --> 00:24:46,410 Per què es declara N, per què crec N fora del bucle Do While? 596 00:24:46,410 --> 00:24:50,370 Per què és en la línia 29 i no en com 33, per exemple. 597 00:24:50,370 --> 00:24:53,529 >> AUDIÈNCIA: Perquè quan declarar fora, tipus 598 00:24:53,529 --> 00:24:56,688 de més, la scope-- més gran 599 00:24:56,688 --> 00:24:58,146 >> ALTAVEU 1: Good. 600 00:24:58,146 --> 00:24:59,604 >> AUDIÈNCIA: --i si es declara que dins del bucle, [inaudible] 601 00:24:59,604 --> 00:25:00,979 perquè no sap res d'ell. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 ALTAVEU 1: Exactament. 604 00:25:03,610 --> 00:25:06,330 Si puc simplify-- és un problema d'abast. 605 00:25:06,330 --> 00:25:11,530 I abast es refereix al context en el que hi ha una variable o és utilitzable. 606 00:25:11,530 --> 00:25:15,050 I la bona regla d'or aquí és que en general, quan es declara o crear 607 00:25:15,050 --> 00:25:21,642 una variable només es pot utilitzar a l'interior dels més propers abraçar claus. 608 00:25:21,642 --> 00:25:22,600 Llavors, què vol dir això? 609 00:25:22,600 --> 00:25:26,551 Si, en canvi, desfer això i vaig amb cosa que se sent una mica més simple. 610 00:25:26,551 --> 00:25:27,050 Oi? 611 00:25:27,050 --> 00:25:29,360 >> Línia 32 només es veu més net per a mi ara. 612 00:25:29,360 --> 00:25:31,500 Estic fent les dues coses a una vegada i després assignar 613 00:25:31,500 --> 00:25:33,070 la mà dreta a la mà esquerra. 614 00:25:33,070 --> 00:25:35,180 El problema ara es basa en que la definició de l'àmbit d'aplicació 615 00:25:35,180 --> 00:25:41,130 N és que es pot utilitzar en línies 31 i 32 a l'interior d'aquest bucle, 616 00:25:41,130 --> 00:25:45,100 però on per aquesta definició pot no ser utilitzat? 617 00:25:45,100 --> 00:25:45,660 D'acord, què? 618 00:25:45,660 --> 00:25:46,160 Sí. 619 00:25:46,160 --> 00:25:47,490 >> AUDIÈNCIA: 35. 620 00:25:47,490 --> 00:25:49,180 >> ALTAVEU 1: 35. 621 00:25:49,180 --> 00:25:50,480 Definitivament no 35. 622 00:25:50,480 --> 00:25:52,349 I també on si no? 623 00:25:52,349 --> 00:25:52,890 AUDIÈNCIA: 34. 624 00:25:52,890 --> 00:25:55,040 ALTAVEU 1: Fins i tot 34 és problemàtic perquè és 625 00:25:55,040 --> 00:25:56,450 fora de les claus. 626 00:25:56,450 --> 00:25:58,200 I així, de fet, anem a veure què passa. 627 00:25:58,200 --> 00:25:58,700 Oi? 628 00:25:58,700 --> 00:26:00,722 Això pot semblar una mica intuïtiva o no podria, 629 00:26:00,722 --> 00:26:02,680 però anem a veure el que el compilador ha de dir quan 630 00:26:02,680 --> 00:26:04,730 entrem en directori d'origen d'avui. 631 00:26:04,730 --> 00:26:08,950 Fer funció un. 632 00:26:08,950 --> 00:26:11,231 Déu meu. 633 00:26:11,231 --> 00:26:12,980 Bé, finalment vaig acabar que, per cert. 634 00:26:12,980 --> 00:26:14,030 Tot bé. 635 00:26:14,030 --> 00:26:15,510 ¿I quin és el problema aquí? 636 00:26:15,510 --> 00:26:17,430 Molt arcana a la vista. 637 00:26:17,430 --> 00:26:19,570 Però això és el que typed-- fer funcionar un. 638 00:26:19,570 --> 00:26:21,640 Això és el que indueix, que és en realitat 639 00:26:21,640 --> 00:26:23,705 utilitzant el so metàl·lic del compilador amb algunes d'aquestes banderes 640 00:26:23,705 --> 00:26:25,080 que veurem de nou en poc temps. 641 00:26:25,080 --> 00:26:26,829 I de nou, busqui sempre en el primer d'error, 642 00:26:26,829 --> 00:26:30,540 a causa que només podria tenir una cascada efecte de sentit en altres línies. 643 00:26:30,540 --> 00:26:34,410 >> Així que el que això significa és que el problema està en funció 1.c. 644 00:26:34,410 --> 00:26:36,890 Està en la línia 32. 645 00:26:36,890 --> 00:26:39,712 I és a la columna, o caràcter, 13. 646 00:26:39,712 --> 00:26:42,670 Així que quan el seu editor de text que pot ajudarà a identificar on és el problema. 647 00:26:42,670 --> 00:26:47,079 Així que si em desplaço cap amunt, el que és la línia 32? 648 00:26:47,079 --> 00:26:49,120 Això és de fet aquest això ja està ressaltat 649 00:26:49,120 --> 00:26:50,607 dret aquí-- no utilitzada n variable. 650 00:26:50,607 --> 00:26:51,440 Però no és inusitat. 651 00:26:51,440 --> 00:26:52,320 Ho estic fent servir. 652 00:26:52,320 --> 00:26:56,110 Però el compilador de confondre, perquè només existeix dins d'aquest àmbit. 653 00:26:56,110 --> 00:26:57,727 I el que no puc usar aquí. 654 00:26:57,727 --> 00:26:58,560 No puc usar aquí. 655 00:26:58,560 --> 00:27:01,320 I el compilador, per tant, ni tan sols importa que estic tractant. 656 00:27:01,320 --> 00:27:03,940 Sembla ser inusitat dins del seu abast real. 657 00:27:03,940 --> 00:27:08,854 >> Així que podem ampliar l'abast fent exactament el que vam començar con-- int n. 658 00:27:08,854 --> 00:27:11,020 I tot i que no és així mirar tan elegant, potser, 659 00:27:11,020 --> 00:27:15,110 i estem tenint una línia addicional aquí, ara és l'abast de tothom. 660 00:27:15,110 --> 00:27:15,970 Així que anem a intentar-ho de nou. 661 00:27:15,970 --> 00:27:19,040 Així que la funció d'un. 662 00:27:19,040 --> 00:27:19,610 Niça. 663 00:27:19,610 --> 00:27:23,370 I ara si em si jo va executar la funció un, anem a donar-li negatiu 10, 664 00:27:23,370 --> 00:27:27,170 negatiu 1, 0, 1, i de fet funciona. 665 00:27:27,170 --> 00:27:28,610 >> Així que no hi ha una altra solució aquí. 666 00:27:28,610 --> 00:27:29,280 Tu saps que? 667 00:27:29,280 --> 00:27:31,230 Què passa si jo realment estic lluitant amb això? 668 00:27:31,230 --> 00:27:33,140 Jo no sé on és el n suposa que ha d'anar. 669 00:27:33,140 --> 00:27:33,723 Tu saps que? 670 00:27:33,723 --> 00:27:39,220 Jo només vaig a posar tot el forma a la part superior del meu arxiu aquí. 671 00:27:39,220 --> 00:27:42,835 Com seria això fer, què et sembla? 672 00:27:42,835 --> 00:27:43,335 Sí? 673 00:27:43,335 --> 00:27:44,251 >> AUDIÈNCIA: [inaudible]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 ALTAVEU 1: Sí. 676 00:27:48,630 --> 00:27:50,560 Així que m'he fet global, per dir-ho. 677 00:27:50,560 --> 00:27:54,430 Si vostè té una variable que està fora totes les funcions que se li permet, 678 00:27:54,430 --> 00:27:58,780 i el codi ha compilar i n ara serà accessible no només en get 679 00:27:58,780 --> 00:28:02,490 int positiu, però també en què main-- és una mica preocupant perquè hi ha 680 00:28:02,490 --> 00:28:04,864 ia una n en principal, de manera que més en què en tan sols un moment-- 681 00:28:04,864 --> 00:28:06,530 però això seria considerat un mal disseny. 682 00:28:06,530 --> 00:28:06,910 Tot bé. 683 00:28:06,910 --> 00:28:08,570 Si vostè ha de recórrer a alguna cosa així com, oh, vaig a 684 00:28:08,570 --> 00:28:10,125 només cal posar aquí perquè el codi sembla compilar 685 00:28:10,125 --> 00:28:12,180 en general, no és la millor pràctica. 686 00:28:12,180 --> 00:28:14,590 Més aviat vol triar el més estret possible abast 687 00:28:14,590 --> 00:28:18,720 per a les variables, el que significaria va amb el nostre disseny inicial, que 688 00:28:18,720 --> 00:28:19,920 és aquí. 689 00:28:19,920 --> 00:28:24,400 >> Ara com un a part, si tinguessis una forma idèntica amb nom de variable d'aquí, 690 00:28:24,400 --> 00:28:27,750 la forma c manejaría esto-- encara que això no va a succeir massa often-- 691 00:28:27,750 --> 00:28:30,150 és que això segueix sent perfectament bé aquí. 692 00:28:30,150 --> 00:28:35,000 Però aquesta definició de n en línia 22 hi haurà ombra el global. 693 00:28:35,000 --> 00:28:38,190 Així que aquest treballarà dins principal, i el global 694 00:28:38,190 --> 00:28:41,670 en realitat s'apliquen quan vostè està en aconseguir int positiu però més sobre això 695 00:28:41,670 --> 00:28:43,890 una altra vegada, però només Per als curiosos. 696 00:28:43,890 --> 00:28:45,970 >> Així que en resum, podem solucionar aquest problema aquí. 697 00:28:45,970 --> 00:28:49,220 Ara anem a esmicolar altres dues peces abans de veure una última línia de codi 698 00:28:49,220 --> 00:28:50,170 en aquest programa. 699 00:28:50,170 --> 00:28:52,170 Obtenir int positiu. 700 00:28:52,170 --> 00:28:54,450 A la banda esquerra de la seva paraula és la paraula int. 701 00:28:54,450 --> 00:28:56,860 Què significa això què et sembla? 702 00:28:56,860 --> 00:28:58,900 Fins ara hem vist majorment buit. 703 00:28:58,900 --> 00:28:59,400 Sí? 704 00:28:59,400 --> 00:29:01,810 >> AUDIÈNCIA: És el tipus de variable que vostè està preguntant sobre. 705 00:29:01,810 --> 00:29:04,550 >> ALTAVEU 1: Sí, és el tipus de, deixa No diguis variable, però el tipus de valor 706 00:29:04,550 --> 00:29:05,990 que jo estic demanant tornar. 707 00:29:05,990 --> 00:29:08,070 I de fet, això és intuïtiva aquí, és d'esperar. 708 00:29:08,070 --> 00:29:08,200 Oi? 709 00:29:08,200 --> 00:29:10,250 Si vols aconseguir un int positiu, què és el que 710 00:29:10,250 --> 00:29:12,920 vol que el function-- com el nostre voluntaris de la setmana passada 711 00:29:12,920 --> 00:29:15,720 a lliurar una còpia d'una peça de paper amb un int en ell? 712 00:29:15,720 --> 00:29:19,190 I així hem especificat que el tipus anomenat de retorn d'aquesta funció 713 00:29:19,190 --> 00:29:20,450 és aconseguir int positiu. 714 00:29:20,450 --> 00:29:22,990 Si no volem que tornar res, dius buit. 715 00:29:22,990 --> 00:29:25,270 Si vols que torni una cadena, dius cadena. 716 00:29:25,270 --> 00:29:27,310 Si vols que torni un flotador, dius flotador. 717 00:29:27,310 --> 00:29:30,440 Però l'únic que s'aplica aquí lògicament, perquè estic fent servir get int, 718 00:29:30,440 --> 00:29:34,130 tot i que m'estic limitant a valors positius, és retornar un int. 719 00:29:34,130 --> 00:29:38,380 >> Així que per contra, què significa que hi ha un buit en parèntesi? 720 00:29:38,380 --> 00:29:40,130 Què fan els parèntesis generalment definir? 721 00:29:40,130 --> 00:29:40,588 Sí? 722 00:29:40,588 --> 00:29:42,880 >> AUDIÈNCIA: Significa la funció de en realitat no aconseguir-ho. 723 00:29:42,880 --> 00:29:44,650 >> ALTAVEU 1: Significa la funció de en realitat no aconseguir què? 724 00:29:44,650 --> 00:29:45,430 >> AUDIÈNCIA: Una entrada. 725 00:29:45,430 --> 00:29:46,763 >> ALTAVEU 1: Una entrada, en absolut. 726 00:29:46,763 --> 00:29:49,870 Així que de fet, si el parèntesi aquí s'especifica buit, 727 00:29:49,870 --> 00:29:51,650 Això només vol dir que no vull cap entrada. 728 00:29:51,650 --> 00:29:53,269 Jo m'encarrego de el problema jo mateix. 729 00:29:53,269 --> 00:29:55,810 I, de fet, vostè no ha de dir-li aconseguir res int positiu. 730 00:29:55,810 --> 00:29:59,630 Vostè acaba de dir, obtenir int positiu, i que la funció s'apagarà i fer la seva cosa. 731 00:29:59,630 --> 00:30:02,970 >> Però hi ha hagut un petit truc que he estat jugant aquí tot aquest temps 732 00:30:02,970 --> 00:30:04,970 per assegurar-se que el codi es compila. 733 00:30:04,970 --> 00:30:09,620 Observi que int-- obtenir positiu int void-- està en la línia 27. 734 00:30:09,620 --> 00:30:14,530 Però per alguna raó aparentment estrany és també aquí a la línia 16. 735 00:30:14,530 --> 00:30:18,530 I només per si de cas vaig a repetir això pel que és perfectament idèntics. 736 00:30:18,530 --> 00:30:21,640 I jo he dit prototip amb un petit comentari d'una sola línia. 737 00:30:21,640 --> 00:30:28,850 Què passa si elimino que, I Ara torneu a executar fan la funció 1, introdueixi. 738 00:30:28,850 --> 00:30:29,350 Vaja. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Espera un minut. 741 00:30:33,110 --> 00:30:34,764 On és la meva fitxa? 742 00:30:34,764 --> 00:30:35,263 Eh? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 Espera. 745 00:30:39,620 --> 00:30:41,570 Realitza la funció 1. 746 00:30:41,570 --> 00:30:42,150 Cal anar. 747 00:30:42,150 --> 00:30:42,310 D'ACORD. 748 00:30:42,310 --> 00:30:43,400 No hi havia guardat correctament. 749 00:30:43,400 --> 00:30:45,220 Per tant, crec que hi ha una mica de error aquí on jo no estic 750 00:30:45,220 --> 00:30:46,636 veure el nom de la fitxa en el moment. 751 00:30:46,636 --> 00:30:47,940 Llavors, què està passant aquí? 752 00:30:47,940 --> 00:30:52,210 Declaració implícita de la funció aconseguir int positiu és vàlida en C99. 753 00:30:52,210 --> 00:30:53,940 Així confonent de nou. 754 00:30:53,940 --> 00:30:55,200 Llavors, què és això indicatiu? 755 00:30:55,200 --> 00:30:57,287 Bé, resulta que C és bastant estúpid. 756 00:30:57,287 --> 00:30:59,912 Bé, és la programació idioma, o millor dit, el compilador és. 757 00:30:59,912 --> 00:31:02,940 Només se sap el que té ensenyat, i és només 758 00:31:02,940 --> 00:31:05,640 va a saber alguna cosa si ensenyat abans. 759 00:31:05,640 --> 00:31:07,960 En altres paraules, en principal en aquest moment, estic 760 00:31:07,960 --> 00:31:10,900 tractant de cridar a una funció anomenada aconseguir int positiu. 761 00:31:10,900 --> 00:31:14,120 Però el compilador no va adonar-se que aconseguir int positiu 762 00:31:14,120 --> 00:31:16,500 existeix fins a la línia 26. 763 00:31:16,500 --> 00:31:21,360 I així, el que fa el compilador és només errors tan aviat com es posa a la línia 17, 764 00:31:21,360 --> 00:31:23,700 dient declaració implícita d'aconseguir int positiu, que 765 00:31:23,700 --> 00:31:27,740 és només una forma elegant de dir, no ho sé sap què aconseguir int positiu és encara. 766 00:31:27,740 --> 00:31:31,240 >> Altres llenguatges com Java i Python i Ruby poden mirar cap endavant. 767 00:31:31,240 --> 00:31:32,240 C no ho fa. 768 00:31:32,240 --> 00:31:35,110 I així el camí fixem aquesta és una de dues maneres. 769 00:31:35,110 --> 00:31:40,160 Qualsevol dels dos, si el problema és que arribar int positiu no s'ha vist abans, 770 00:31:40,160 --> 00:31:42,150 així, permetin-me moc al cim. 771 00:31:42,150 --> 00:31:43,650 Això seria solucionar aquest problema. 772 00:31:43,650 --> 00:31:46,790 Però en general, és millor tècnica considerada 773 00:31:46,790 --> 00:31:50,220 per posar la seva funció principal en el mateix superior perquè un ésser humà la lectura del seu codi 774 00:31:50,220 --> 00:31:52,710 sap el que fa el programa, causa principal no s'enterra tot 775 00:31:52,710 --> 00:31:53,960 el camí a la part inferior o en el medi. 776 00:31:53,960 --> 00:31:55,130 És en la part superior. 777 00:31:55,130 --> 00:31:56,410 Perquè no se sent ideal. 778 00:31:56,410 --> 00:31:58,326 I vostè pot aconseguir realment en situacions en les 779 00:31:58,326 --> 00:32:00,820 si les trucades Una de les funcions una altra, que crida a un altre, 780 00:32:00,820 --> 00:32:04,630 vostè pot aconseguir en un problema on no pot anar sobre de l'altra, lògicament. 781 00:32:04,630 --> 00:32:05,920 Simplement no és possible. 782 00:32:05,920 --> 00:32:09,290 >> I així, la manera de treballar evitar això és simplement prendre 783 00:32:09,290 --> 00:32:13,200 La signatura de la funció, de manera que speak-- la primera línia, on és declared-- 784 00:32:13,200 --> 00:32:16,850 i acaba de copiar, enganxar al superior, però no amb braces-- arrissat 785 00:32:16,850 --> 00:32:17,980 només amb un punt i coma. 786 00:32:17,980 --> 00:32:20,840 És com una petita pista del que està per venir. 787 00:32:20,840 --> 00:32:26,630 I, de fet, tot aquest temps en què han vist coses com io.h estàndard 788 00:32:26,630 --> 00:32:33,040 i cs50.h, de manera similar, en aquests punts arxius h hi ha altres prototips. 789 00:32:33,040 --> 00:32:35,250 I veurem que en poc temps. 790 00:32:35,250 --> 00:32:39,340 >> Així que en resum, quan es té un programa en un arxiu amb múltiples funcions 791 00:32:39,340 --> 00:32:42,300 a més de principal, gairebé sempre volen declarar- 792 00:32:42,300 --> 00:32:45,360 simplement per mitjà de la seva primera línia, seguit per un punt i coma, 793 00:32:45,360 --> 00:32:48,410 a la part superior de l'arxiu. 794 00:32:48,410 --> 00:32:50,460 Això va ser una gran quantitat d'una sola vegada. 795 00:32:50,460 --> 00:32:53,130 Qualsevol pregunta? 796 00:32:53,130 --> 00:32:53,920 Qualsevol pregunta? 797 00:32:53,920 --> 00:32:54,530 Tot bé. 798 00:32:54,530 --> 00:32:59,760 >> Així que anem a passar a continuació, a una mena de tos. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Què apropiat. 801 00:33:00,570 --> 00:33:01,220 Tot bé. 802 00:33:01,220 --> 00:33:02,260 Tos. 803 00:33:02,260 --> 00:33:05,080 Així que aquí és un c implementació d'un programa 804 00:33:05,080 --> 00:33:07,560 que vam fer l'altre dia en Rasguño que molt simplement 805 00:33:07,560 --> 00:33:08,691 diu la tos, tos, tos. 806 00:33:08,691 --> 00:33:09,190 Tot bé. 807 00:33:09,190 --> 00:33:11,136 I algú va dir unes poques Fa dies que no hi ha 808 00:33:11,136 --> 00:33:12,760 una manera de netejar el codi ja. 809 00:33:12,760 --> 00:33:12,880 Tot bé? 810 00:33:12,880 --> 00:33:15,440 Tan aviat com vostè està copiant i enganxar probablement mal disseny. 811 00:33:15,440 --> 00:33:18,725 Almenys una vegada que arribem a quatre o cinc o 20 tos, se sent una mala pràctica. 812 00:33:18,725 --> 00:33:19,850 Acabem de seguir copiar, enganxar. 813 00:33:19,850 --> 00:33:22,213 Quina és la solució òbvia a la neteja d'aquest programa per dalt? 814 00:33:22,213 --> 00:33:23,120 >> AUDIÈNCIA: Loop. 815 00:33:23,120 --> 00:33:23,350 >> ALTAVEU 1: Sí. 816 00:33:23,350 --> 00:33:24,070 Així que utilitzi un bucle. 817 00:33:24,070 --> 00:33:27,697 I podem fer servir un bucle per, per un temps bucle, qualsevol nombre d'enfocaments. 818 00:33:27,697 --> 00:33:29,780 I de fet, això és el que que fem en la versió un aquí. 819 00:33:29,780 --> 00:33:32,250 En canvi m'he reescrit en la versió un cough.c 820 00:33:32,250 --> 00:33:35,170 sent la tos només dins d'un bucle per. 821 00:33:35,170 --> 00:33:38,240 Molt bé, però hi ha una oportunitat ara de tipus d'inici 822 00:33:38,240 --> 00:33:41,630 per dissenyar aquest una mica més com la lliçó que ens va ensenyar fa un moment, 823 00:33:41,630 --> 00:33:46,190 que és esto-- suposar que volia per crear una funció anomenada tos, 824 00:33:46,190 --> 00:33:49,730 Considerem per un moment el que va a ser similar. 825 00:33:49,730 --> 00:33:51,900 Així que si vull alguna cosa a tossir, només necessito 826 00:33:51,900 --> 00:33:53,800 utilitzar la impressió f dins de la funció. 827 00:33:53,800 --> 00:33:55,030 I de fet ho sóc. 828 00:33:55,030 --> 00:33:56,990 I de fet, tot això temps, en qualsevol moment que estiguis 829 00:33:56,990 --> 00:33:59,000 cosa que imprimir la pantalla, un programador 830 00:33:59,000 --> 00:34:00,610 exigiria que un efecte secundari. 831 00:34:00,610 --> 00:34:02,990 No és lliurant algú de tornada un valor. 832 00:34:02,990 --> 00:34:06,170 M'està prenent algun tipus d'acció que podria ser visualment evident. 833 00:34:06,170 --> 00:34:10,672 Però aquesta funció tos, què tornar qualsevol cosa basada en la seva primera línia? 834 00:34:10,672 --> 00:34:12,880 No, perquè el seu tipus de retorn és nul·la, la qual cosa només vol dir 835 00:34:12,880 --> 00:34:14,250 no m'ha d'entregar res a canvi. 836 00:34:14,250 --> 00:34:16,791 Podria estar fent alguna cosa visualment, però és que no em lliura 837 00:34:16,791 --> 00:34:18,639 còpies d'un full de paper com la setmana passada. 838 00:34:18,639 --> 00:34:21,310 >> Necessita alguna entrada? 839 00:34:21,310 --> 00:34:21,810 No. 840 00:34:21,810 --> 00:34:23,134 I el que és nul·la aquí també. 841 00:34:23,134 --> 00:34:25,600 Així que això també és una mena de sobre-enginyeria d'aquest problema. 842 00:34:25,600 --> 00:34:26,099 Oi? 843 00:34:26,099 --> 00:34:28,820 He fet el programa més complexos, més línies de codi, 844 00:34:28,820 --> 00:34:31,889 No he fet cap més funcional, però això 845 00:34:31,889 --> 00:34:34,210 seria un trampolí, potser, per a una més àmplia 846 00:34:34,210 --> 00:34:36,830 context amb codi més complicat. 847 00:34:36,830 --> 00:34:38,150 Però què passa amb això? 848 00:34:38,150 --> 00:34:42,050 Què he done-- simplement fent una ullada a això sense mirar el comentari 849 00:34:42,050 --> 00:34:46,076 a la part superior del file-- el tenen Jo fonamentalment fet aquí amb el meu tos 850 00:34:46,076 --> 00:34:47,409 aplicació que és diferent? 851 00:34:47,409 --> 00:34:48,327 Sí, a l'esquena? 852 00:34:48,327 --> 00:34:51,384 >> AUDIÈNCIA: Que sigui el que pot té un caràcter s'apagui. 853 00:34:51,384 --> 00:34:52,050 ALTAVEU 1: Sí. 854 00:34:52,050 --> 00:34:53,270 Així que això se sent una mica agradable. 855 00:34:53,270 --> 00:34:53,389 Oi? 856 00:34:53,389 --> 00:34:56,600 És com l'addició d'una característica al seu programa o de la seva funció, en aquest cas. 857 00:34:56,600 --> 00:34:57,830 Encara no retorna res. 858 00:34:57,830 --> 00:35:00,538 Podria tenir un efecte secundari visual, perquè està trucant impressió f. 859 00:35:00,538 --> 00:35:02,800 Però ara he parametritzada la funció, que 860 00:35:02,800 --> 00:35:06,470 vol dir que he pres especificats d'entrada de tipus int i cridar-n, 861 00:35:06,470 --> 00:35:08,510 però podia dir-el que vulgui. 862 00:35:08,510 --> 00:35:11,550 De fet, podria ser només vegades que siguin encara més explícit. 863 00:35:11,550 --> 00:35:13,310 I llavors jo podria canviar això aquí. 864 00:35:13,310 --> 00:35:16,450 Però el punt és que així és com jo crear una funció que pren l'entrada. 865 00:35:16,450 --> 00:35:19,530 I si vostè recorda voltejant potser a través d'Internet en un sol 866 00:35:19,530 --> 00:35:23,000 dels passejos virtuals, la quart i l'exemple la tos final, 867 00:35:23,000 --> 00:35:27,150 t'adonaràs que aquí m'has generalitzar el meu codi de tipus further-- de abstreta 868 00:35:27,150 --> 00:35:27,690 encara més. 869 00:35:27,690 --> 00:35:31,390 Igual que la tos i l'esternut, tots dos són sobre com dir alguna cosa o fer 870 00:35:31,390 --> 00:35:32,330 algun tipus de so. 871 00:35:32,330 --> 00:35:34,725 Guardar seria el corresponent bloc de Scratch. 872 00:35:34,725 --> 00:35:37,350 I així ho vaig fer en aquesta versió, que podem simplement fer una ullada a, 873 00:35:37,350 --> 00:35:43,170 és tos és com dir, [TOS], tos, i mentrestant, l'esternut és 874 00:35:43,170 --> 00:35:44,570 com dir, [ACHOO]. 875 00:35:44,570 --> 00:35:46,900 I pel que he generalitzi l'aplicació d'aquells 876 00:35:46,900 --> 00:35:48,970 per ara l'aplicació aquesta funció genèrica, 877 00:35:48,970 --> 00:35:51,490 dir, que és interessant per als propòsits d'avui 878 00:35:51,490 --> 00:35:54,300 només perquè encara no té un tipus de retorn. 879 00:35:54,300 --> 00:35:56,398 Però, quantes entrades té? 880 00:35:56,398 --> 00:35:56,981 AUDIÈNCIA: Dos. 881 00:35:56,981 --> 00:35:57,430 ALTAVEU 1: Dos. 882 00:35:57,430 --> 00:35:59,263 I així, si vols prendre en dos arguments, 883 00:35:59,263 --> 00:36:00,710 simplement separar amb una coma. 884 00:36:00,710 --> 00:36:03,110 I si vols a continuació cridar a aquesta funció, 885 00:36:03,110 --> 00:36:05,800 notar que acaba truqui per exemple, cita, cap de la cita, 886 00:36:05,800 --> 00:36:09,090 per al primer argument, comuna n, per al segon argument. 887 00:36:09,090 --> 00:36:12,130 Així que de nou, només tenim ara la blocs de construcció perquè puguem realment 888 00:36:12,130 --> 00:36:15,686 posar en pràctica algunes de les nostres pròpies funcions. 889 00:36:15,686 --> 00:36:16,570 Tot bé. 890 00:36:16,570 --> 00:36:19,690 Per a qualsevol dubte sobre aquestes? 891 00:36:19,690 --> 00:36:22,400 >> Així que ara anem a pelar una capa de ser així. 892 00:36:22,400 --> 00:36:24,840 I l'objectiu, en darrera instància, és un problema conjunt de la setmana que 893 00:36:24,840 --> 00:36:27,710 va a estar a cryptogrophy-- l'art de la codificació de la informació. 894 00:36:27,710 --> 00:36:30,640 I específicament, la informació haurà de xifrar o desxifrar 895 00:36:30,640 --> 00:36:31,605 va ser de text. 896 00:36:31,605 --> 00:36:33,980 I així, aquest tipus d'invitacions la qüestió avui com així, 897 00:36:33,980 --> 00:36:38,480 el que està passant sota de la campana amb el text més enllà d'ASCII de setmana zero, 898 00:36:38,480 --> 00:36:40,730 I com podem realment començar a manipular-? 899 00:36:40,730 --> 00:36:43,070 Així que aquí està el nom de Zamyla. 900 00:36:43,070 --> 00:36:47,380 I en text, que podrien ser introduïts a igual que la funció de cadena get. 901 00:36:47,380 --> 00:36:52,540 I a partir d'ara, quan veieu una cadena com esto-- Z-A-H-I-L-A-- 902 00:36:52,540 --> 00:36:56,550 començar a pensar-hi com si cada d'aquests personatges és en una caixa de la seva 903 00:36:56,550 --> 00:36:57,050 pròpia. 904 00:36:57,050 --> 00:36:59,460 I de fet, en una setmana o així és temps, cadascuna d'aquestes caixes 905 00:36:59,460 --> 00:37:04,280 representarà molt específica un bloc de memory-- un mos de memòria. 906 00:37:04,280 --> 00:37:07,050 Així que cadascuna d'aquestes cartes, en última instància, representarà 8 bits. 907 00:37:07,050 --> 00:37:10,560 I en realitat a veure el que està passant de sota la campana al meu ordinador. 908 00:37:10,560 --> 00:37:13,440 >> No obstant això, per no n'hi ha prou només per mirar Zamyla 909 00:37:13,440 --> 00:37:17,520 a través d'aquesta lent, pel qual cadascun aquestes cartes és en la seva pròpia caixa. 910 00:37:17,520 --> 00:37:22,697 I molt bé prou en C podem accedir a cadascuna d'aquestes caixes directament. 911 00:37:22,697 --> 00:37:25,530 Així que si vol aconseguir el primer lletra del seu nom, súper fàcil en C. 912 00:37:25,530 --> 00:37:28,410 Si voleu aconseguir l'últim carta, super fàcil, així 913 00:37:28,410 --> 00:37:30,240 amb un tros de nova sintaxi. 914 00:37:30,240 --> 00:37:36,250 >> Així que seguiré endavant en CS50 IDE i obrir la cadena de zero punt C. 915 00:37:36,250 --> 00:37:40,270 I en aquest exemple aquí, hi ha un parell de coses noves que fer. 916 00:37:40,270 --> 00:37:44,360 Així que per primera vegada en la línia 19, que hem vist aquesta cadena get abans--. 917 00:37:44,360 --> 00:37:49,840 Així que com una prova de seny ràpida, si algú pot oferir verbalment 918 00:37:49,840 --> 00:37:52,662 L'explicació d'un laic de el que està passant a la línia 19. 919 00:37:52,662 --> 00:37:55,370 Com acaba de traduir això en Anglès que no company d'habitació en CS50 920 00:37:55,370 --> 00:37:56,416 podria entendre. 921 00:37:56,416 --> 00:37:56,916 Sí. 922 00:37:56,916 --> 00:37:59,749 >> AUDIÈNCIA: Tenir l'entrada d'un usuari corda i deseu-lo en un s variable. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 ALTAVEU 1: Good. 925 00:38:02,600 --> 00:38:05,579 Tenir l'entrada de l'usuari una cadena i emmagatzemar-lo en una variable s. 926 00:38:05,579 --> 00:38:06,120 Això és genial. 927 00:38:06,120 --> 00:38:08,090 Així que a la mà dreta banda, anomenem cadena get. 928 00:38:08,090 --> 00:38:10,340 Que torna un valor que no van ser assignats 929 00:38:10,340 --> 00:38:14,230 del costat dret a l'esquerre a mà costat en una variable anomenada es que és 930 00:38:14,230 --> 00:38:15,950 dissenyat per emmagatzemar una cadena. 931 00:38:15,950 --> 00:38:16,800 Exactament. 932 00:38:16,800 --> 00:38:20,000 >> Així que ara la línia 22, per el comentari a la línia 21, 933 00:38:20,000 --> 00:38:22,780 òbviament imprimeix aquesta cadena un caràcter per línia. 934 00:38:22,780 --> 00:38:23,740 Però com? 935 00:38:23,740 --> 00:38:27,040 Així que en primer lloc, inicialitzem I 0. 936 00:38:27,040 --> 00:38:31,061 I llavors, com s'arriba a al final del nom de Zamyla? 937 00:38:31,061 --> 00:38:32,810 Bé, al final de El nom de Zamyla, vaig poder 938 00:38:32,810 --> 00:38:38,151 escriure manualment en l'últim caràcter de el seu nom d'alguna manera, o el nombre de la mateixa. 939 00:38:38,151 --> 00:38:38,650 Oi? 940 00:38:38,650 --> 00:38:43,500 Si ens remuntem aquí-- Z-A-M-L-- I-L-A-- perquè jo pogués escriure. 941 00:38:43,500 --> 00:38:47,340 Què és l'índex de L'última carta de Zamyla? 942 00:38:47,340 --> 00:38:52,517 Si aquesta és 0-- parlant com un programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Jo heard-- tan de fet, l'última lletra en el nom de Zamyla és el sisè, 944 00:38:56,570 --> 00:38:58,890 però si comptem des de 0, que serà el número 5. 945 00:38:58,890 --> 00:39:01,320 Així que tingues-ho en compte aquí. 946 00:39:01,320 --> 00:39:04,929 >> Resulta que hi ha una funció en C diu strlen i tornada al dia 947 00:39:04,929 --> 00:39:06,720 i fins a la data segueix sent, una gran quantitat de programadors 948 00:39:06,720 --> 00:39:09,524 triar sincronitzar noms per a la seva funcions que sonen com les paraules 949 00:39:09,524 --> 00:39:10,440 que estan tractant de dir. 950 00:39:10,440 --> 00:39:12,590 Així strlen és longitud de la cadena. 951 00:39:12,590 --> 00:39:18,168 I així ho faria longitud de la cadena de S tornar quan Zamyla és l'entrada? 952 00:39:18,168 --> 00:39:19,569 >> AUDIÈNCIA: Cinc. 953 00:39:19,569 --> 00:39:22,090 >> ALTAVEU 1: Z-A-H-I-L. Sis. 954 00:39:22,090 --> 00:39:22,590 Oi? 955 00:39:22,590 --> 00:39:23,940 Quina és la longitud del nom de Zamyla? 956 00:39:23,940 --> 00:39:24,440 Oi? 957 00:39:24,440 --> 00:39:26,240 I en realitat, 6 lletres. 958 00:39:26,240 --> 00:39:26,740 Oi? 959 00:39:26,740 --> 00:39:28,940 I així, què significa això per al nostre bucle? 960 00:39:28,940 --> 00:39:32,130 Anem a anar de 0 fins a sis, que 961 00:39:32,130 --> 00:39:33,650 ens va a donar 5 iteracions. 962 00:39:33,650 --> 00:39:34,890 Què fem a cada iteració? 963 00:39:34,890 --> 00:39:36,870 Bé, cent C, algú endevinat l'altre dia, 964 00:39:36,870 --> 00:39:38,710 significa un marcador de posició per a què? 965 00:39:38,710 --> 00:39:39,335 >> AUDIÈNCIA: Char. 966 00:39:39,335 --> 00:39:40,293 ALTAVEU 1: Només un char. 967 00:39:40,293 --> 00:39:42,877 Així que un sol character-- no múltiples personatges com una cadena. 968 00:39:42,877 --> 00:39:45,251 I llavors aquí està la nova línia que tenim imprimir. 969 00:39:45,251 --> 00:39:46,580 I llavors aquí està la nova sintaxi. 970 00:39:46,580 --> 00:39:51,130 Si voleu imprimir l'i-th caràcter de la cadena S, per així dir-ho, 971 00:39:51,130 --> 00:39:54,060 vostè pot simplement dir el nom de la cadena S, 972 00:39:54,060 --> 00:39:58,230 i després obrir claudàtor, i després va tancar claudàtor, amb una i 973 00:39:58,230 --> 00:39:58,780 el mig. 974 00:39:58,780 --> 00:40:01,430 I és una mica agradable en aquest quin tipus d'sembla a un quadrat 975 00:40:01,430 --> 00:40:06,210 igual que les places en què Zamyla de existeixen personatges en aquesta foto allà. 976 00:40:06,210 --> 00:40:09,970 >> Així que si realment executar aquest Ara, anem a veure què passa. 977 00:40:09,970 --> 00:40:15,190 Feu cadena 0 punt slash string 0, i llavors estic 978 00:40:15,190 --> 00:40:16,720 va escriure el nom de Zamyla. 979 00:40:16,720 --> 00:40:19,428 No hi ha ràpida, perquè jo no ho vaig fer utilitzar la impressió f, però això està bé. 980 00:40:19,428 --> 00:40:20,660 Només sé el que fer. 981 00:40:20,660 --> 00:40:23,240 I, en efecte, imprimeix El nom de Zamyla, un per línia. 982 00:40:23,240 --> 00:40:25,760 >> Ara serem una mica imprudent. 983 00:40:25,760 --> 00:40:28,461 Suposem que jo no sabia sobre strlen i vaig pensar, 984 00:40:28,461 --> 00:40:31,460 bé, ningú va a tenir un nom més gran que com 50 caràcters. 985 00:40:31,460 --> 00:40:36,360 Seguirem endavant i tornar a compilar aquest i torneu a executar i, a continuació, escriviu en Zamyla 986 00:40:36,360 --> 00:40:37,160 de nou. 987 00:40:37,160 --> 00:40:40,850 Lògicament, el que és el programa va a tractar d'imprimir? 988 00:40:40,850 --> 00:40:49,545 Z-A-H-I-L-A continuació, igual que 45 bytes desconeguts de memòria. 989 00:40:49,545 --> 00:40:51,670 I de fet, tornarem a aquesta idea de la memòria. 990 00:40:51,670 --> 00:40:54,180 Però així, lògicament, si El nom de Zamyla és aquest llarg, 991 00:40:54,180 --> 00:40:56,450 com per la imatge aquí, el que estem dient 992 00:40:56,450 --> 00:40:59,810 es mantindrà la impressió, tingui la impressió, mantingui impressió, tingui la impressió, tingui la impressió, 993 00:40:59,810 --> 00:41:03,781 tot el camí fins al caràcter 50a, que qui sap el que ha de passar. 994 00:41:03,781 --> 00:41:05,030 Així que anem realment a fer una ullada. 995 00:41:05,030 --> 00:41:06,720 Anem escrigui en Zamyla. 996 00:41:06,720 --> 00:41:07,250 Interessant. 997 00:41:07,250 --> 00:41:08,190 Vam tenir sort. 998 00:41:08,190 --> 00:41:09,700 Només un munt d'espai en blanc. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Hi ha un caràcter funky. 1001 00:41:11,120 --> 00:41:14,577 Es veu una mica com una pregunta estranya marcar allà, però no és el nom de Zamyla. 1002 00:41:14,577 --> 00:41:15,660 Arribarem molt imprudent. 1003 00:41:15,660 --> 00:41:20,000 Què tal si imprimim 500 blocs al desconegut? 1004 00:41:20,000 --> 00:41:24,380 Seguirem endavant i fer això així i després tornar a executar. 1005 00:41:24,380 --> 00:41:27,980 I la pantalla completa, perquè anem hem de veure més espai. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Tens sort de nou. 1008 00:41:31,830 --> 00:41:33,070 >> Ens atrevim a arribar més temerari? 1009 00:41:33,070 --> 00:41:36,070 Aconseguirem més temerari. 1010 00:41:36,070 --> 00:41:39,350 50.000 caràcters. 1011 00:41:39,350 --> 00:41:41,390 Això no és, certament, una bona idea. 1012 00:41:41,390 --> 00:41:41,890 Tot bé. 1013 00:41:41,890 --> 00:41:42,990 Feu cadena 0. 1014 00:41:42,990 --> 00:41:44,720 Aquesta serà la nostra última demostració. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Ugh. 1017 00:41:48,632 --> 00:41:50,010 Ugh. 1018 00:41:50,010 --> 00:41:50,680 D'ACORD. 1019 00:41:50,680 --> 00:41:54,407 Així que la meva memòria és realment buit en aquest moment, que és en realitat una mica convenient. 1020 00:41:54,407 --> 00:41:55,990 El que estic tractant d'arribar A-- bé. 1021 00:41:55,990 --> 00:41:57,614 I ara estic sol aconseguirà imprudent. 1022 00:41:57,614 --> 00:41:58,570 500.000. 1023 00:41:58,570 --> 00:42:03,860 Make-- de pantalla completa de deixar-ho. 1024 00:42:03,860 --> 00:42:04,990 Retorn. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Cal anar. 1028 00:42:13,390 --> 00:42:15,610 No tinc ni idea del que és, però sona malament. 1029 00:42:15,610 --> 00:42:16,110 Tot bé. 1030 00:42:16,110 --> 00:42:20,322 I, de fet, molt aviat, si vostè està entre els pocs afortunats en horari d'oficina 1031 00:42:20,322 --> 00:42:22,780 i en el problema d'establir un, podria molt bé trobar-se amb això. 1032 00:42:22,780 --> 00:42:25,490 Fallada de segmentació fa realitat tenen un significat ben definit. 1033 00:42:25,490 --> 00:42:28,450 Això significa algun tipus d'error relativa a un segment de la memòria. 1034 00:42:28,450 --> 00:42:30,490 I en termes simples, que vol dir que toquem 1035 00:42:30,490 --> 00:42:34,780 memory-- utilitzem memòria RAM en el meu equip perquè jo no he tingut accés. 1036 00:42:34,780 --> 00:42:37,050 I això és el que alhora potent i també perillós 1037 00:42:37,050 --> 00:42:39,910 sobre C és que en realitat tenir accés sense restriccions 1038 00:42:39,910 --> 00:42:45,910 a la totalitat de la memòria del programa o bytes o RAM, més específicament. 1039 00:42:45,910 --> 00:42:49,510 >> Així que, encara que el nom de Zamyla és només sis caràcters de longitud, 1040 00:42:49,510 --> 00:42:51,450 Encara puc anar enlloc en la memòria que vull. 1041 00:42:51,450 --> 00:42:53,491 I com un a part, si tens Has llegit algun article 1042 00:42:53,491 --> 00:42:55,610 al llarg dels anys sobre alguns servidor o algun programa 1043 00:42:55,610 --> 00:42:58,654 aconseguir esquerdats o hacker això és aprofitat alguna cosa 1044 00:42:58,654 --> 00:43:00,820 anomenat un desbordament de memòria intermèdia explotar que anem a realitat 1045 00:43:00,820 --> 00:43:04,970 parlar en poques setmanes, això és en general, en referència a alguna forma d'enganyar 1046 00:43:04,970 --> 00:43:09,090 un ordinador a anar bé més enllà dels límits de la memòria 1047 00:43:09,090 --> 00:43:11,410 que hauria de tenir, i trobar alguna cosa sucosa 1048 00:43:11,410 --> 00:43:13,530 en què un memory-- contrasenya, potser, d'una manera 1049 00:43:13,530 --> 00:43:16,990 d'eludir algun número de sèrie xec, o simplement generalment capaços 1050 00:43:16,990 --> 00:43:20,360 per enganyar l'ordinador està executant codi que no es pretenia. 1051 00:43:20,360 --> 00:43:22,360 Però tornem a la realitat per un moment 1052 00:43:22,360 --> 00:43:24,550 on estava aquest programa implementat amb strlen, 1053 00:43:24,550 --> 00:43:26,110 i introduir una cosa aquí. 1054 00:43:26,110 --> 00:43:30,030 Què hi ha de nou entre aquestes tres línies superiors? 1055 00:43:30,030 --> 00:43:30,910 >> Així punt cadena h. 1056 00:43:30,910 --> 00:43:35,490 Resulta que hi ha aquesta biblioteca anomenada Cadena punt H, o la Biblioteca de cordes, 1057 00:43:35,490 --> 00:43:38,490 el fitxer de capçalera, per així dir-ho, és punt cadena h que em dóna 1058 00:43:38,490 --> 00:43:40,860 l'accés a aquesta funció strlen. 1059 00:43:40,860 --> 00:43:43,841 Si ometo que el compilador és va a cridar a mi d'alguna manera. 1060 00:43:43,841 --> 00:43:44,590 Però saps què? 1061 00:43:44,590 --> 00:43:46,090 Ara anem a arribar molt matisada. 1062 00:43:46,090 --> 00:43:50,820 En la línia 22, hi ha alguna cosa tipus de inefficient-- mal dissenyat, 1063 00:43:50,820 --> 00:43:53,990 arguably-- sobre aquesta línia de codi. 1064 00:43:53,990 --> 00:43:56,280 Penseu en com s'implementen per-loop 1065 00:43:56,280 --> 00:44:00,140 i quins passos succeeixi de nou i una i altra vegada-- la inicialització, 1066 00:44:00,140 --> 00:44:04,110 la condició, el codi que és executat, llavors l'increment 1067 00:44:04,110 --> 00:44:07,880 o el canvi, llavors la condició, després el codi, llavors el canvi, llavors 1068 00:44:07,880 --> 00:44:11,280 la condició, llavors el codi, llavors el canvi, i així successivament. 1069 00:44:11,280 --> 00:44:15,320 Llavors, què podria ser una mica preocupant o mal fet aquí? 1070 00:44:15,320 --> 00:44:16,387 Sí, en blau. 1071 00:44:16,387 --> 00:44:18,220 AUDIÈNCIA: strlen és anomenat moltes, moltes vegades. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 ALTAVEU 1: Sí. 1074 00:44:21,320 --> 00:44:23,700 Així strlen es diu moltes vegades, però el que és 1075 00:44:23,700 --> 00:44:27,113 la longitud del nom de la Zamyla primera vegada que el bucle s'executa? 1076 00:44:27,113 --> 00:44:27,860 >> AUDIÈNCIA: Sis. 1077 00:44:27,860 --> 00:44:28,110 >> ALTAVEU 1: Sis. 1078 00:44:28,110 --> 00:44:30,976 Bé, quina és la longitud del seu nom la segona vegada que s'executa el codi? 1079 00:44:30,976 --> 00:44:31,432 >> AUDIÈNCIA: Sis. 1080 00:44:31,432 --> 00:44:31,890 >> ALTAVEU 1: D'acord. 1081 00:44:31,890 --> 00:44:32,720 Encara és 06:00. 1082 00:44:32,720 --> 00:44:33,220 Oi? 1083 00:44:33,220 --> 00:44:35,260 El nom de-la no té canviat, fins i tot si estic buscant 1084 00:44:35,260 --> 00:44:38,240 a només una part de les lletres del seu nom. 1085 00:44:38,240 --> 00:44:41,349 I així, el fet que sóc efectivament fer aquesta pregunta, quin és 1086 00:44:41,349 --> 00:44:44,640 la longitud d'Zamyla, quin és la longitud de Zamyla, quin és la longitud de Zamyla, 1087 00:44:44,640 --> 00:44:47,990 sis vegades per separat, o de set, fins i tot, és una estupidesa, 1088 00:44:47,990 --> 00:44:50,390 perquè això és immutable aquesta resposta. 1089 00:44:50,390 --> 00:44:53,550 I així el que vaig poder en realitat fer és esto-- en cadena d'un 1090 00:44:53,550 --> 00:44:55,680 Tinc una mica millor versió aquí. 1091 00:44:55,680 --> 00:45:00,110 Allà- cadena whoops-- ha dos que tinc una versió lleugerament millor en el qual 1092 00:45:00,110 --> 00:45:05,010 Faig esto-- en lloc de només inicialitzar i a 0, també amb una coma 1093 00:45:05,010 --> 00:45:07,990 declarar una segona variable anomenada N-- Jo no he de dir int nou. 1094 00:45:07,990 --> 00:45:09,220 Que no hauria, de fet. 1095 00:45:09,220 --> 00:45:10,380 Però jo us dic n. 1096 00:45:10,380 --> 00:45:13,610 I llavors em inicialitzar n de el strlen de n, de manera que ara 1097 00:45:13,610 --> 00:45:17,110 Quantes vegades strlen s'executen en total? 1098 00:45:17,110 --> 00:45:17,610 Només una vegada. 1099 00:45:17,610 --> 00:45:20,257 I així que això és el que volem dir abans sobre un millor disseny. 1100 00:45:20,257 --> 00:45:23,090 En realitat una vegada que el seu codi és correcte, anant i pensament a través de, 1101 00:45:23,090 --> 00:45:26,820 estic fent servir tan poc memòria o tan pocs segons 1102 00:45:26,820 --> 00:45:30,409 o mil·lisegons de temps d'ordinador com possible implementar algun problema? 1103 00:45:30,409 --> 00:45:32,200 I jo vaig a desplaçar- i acaba d'esmentar 1104 00:45:32,200 --> 00:45:34,283 que hi ha aquesta menció de null en aquesta versió, 1105 00:45:34,283 --> 00:45:36,390 però anem a tornar a que en poc temps. 1106 00:45:36,390 --> 00:45:41,010 Perquè per ara, anem a fer una ullada en on això ens va a portar. 1107 00:45:41,010 --> 00:45:44,110 Així que un, resulta que ara que tenim la capacitat 1108 00:45:44,110 --> 00:45:46,860 mirar a caràcters individuals, podem aprofitar alguna cosa 1109 00:45:46,860 --> 00:45:50,807 des de la setmana 0 que era molt arcana i espècie d'interessant en el moment. 1110 00:45:50,807 --> 00:45:53,390 Però ara, i sobretot quan ens arribar a la criptografia en una setmana, 1111 00:45:53,390 --> 00:45:54,820 que serà molt poderosa. 1112 00:45:54,820 --> 00:45:57,450 Resulta que amb una mica de ints i carrosses de dades tipus-- 1113 00:45:57,450 --> 00:46:00,300 i caràcters i cadenes i una altra coses-- alguns d'ells 1114 00:46:00,300 --> 00:46:02,800 es pot molt fàcilment convertida a un altre. 1115 00:46:02,800 --> 00:46:05,840 >> Per exemple, quan parlem sobre ASCII algun temps ago-- aquí està 1116 00:46:05,840 --> 00:46:07,796 Les lletres majúscules A a través de M, punt, punt, 1117 00:46:07,796 --> 00:46:12,530 dot-- hem dit que hi ha un mapatge entre aquestes lletres i números. 1118 00:46:12,530 --> 00:46:14,970 I de fet, és cert per a les lletres minúscules també. 1119 00:46:14,970 --> 00:46:17,470 Minúscules a és 97, el capital és un 65. 1120 00:46:17,470 --> 00:46:20,860 I hi ha un nombre en ASCII, que és just aquest mapeig 1121 00:46:20,860 --> 00:46:23,240 sistema per a totes aquestes altres lletres. 1122 00:46:23,240 --> 00:46:25,030 Llavors, què vol dir això? 1123 00:46:25,030 --> 00:46:28,390 Bé, vaig a seguir endavant i obert alguna cosa realment ràpid anomenat 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, la majoria dels quals són els comentaris. 1125 00:46:31,240 --> 00:46:33,860 I de nou en línia sempre es pot vista a través dels comentaris. 1126 00:46:33,860 --> 00:46:36,180 >> I mirin el que això va a fer. 1127 00:46:36,180 --> 00:46:38,410 Així que té una funció principal. 1128 00:46:38,410 --> 00:46:41,490 He modificable els números només per ara, perquè sé el que estic fent. 1129 00:46:41,490 --> 00:46:42,950 Jo sé el que vull veure aquí. 1130 00:46:42,950 --> 00:46:45,220 I jo he inicialitzat a 65. 1131 00:46:45,220 --> 00:46:48,490 I estic explicant a través de 26 cartes en total. 1132 00:46:48,490 --> 00:46:52,990 ¿I què vaig a imprimir una línia alhora 1133 00:46:52,990 --> 00:46:54,930 si es pot interpretar això posa en relleu la línia? 1134 00:46:54,930 --> 00:46:55,970 El que es impresa? 1135 00:46:55,970 --> 00:46:56,797 Sí. 1136 00:46:56,797 --> 00:46:57,264 >> AUDIÈNCIA: Vas per imprimir la carta que 1137 00:46:57,264 --> 00:46:59,805 correspon al mapa de la valor carta i valor enter? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 ALTAVEU 1: Exactament. 1140 00:47:01,990 --> 00:47:04,740 Vaig a imprimir la carta corresponent al valor de nombre sencer, 1141 00:47:04,740 --> 00:47:06,131 i viceversa, de la següent manera. 1142 00:47:06,131 --> 00:47:08,880 Bé, això, algú va dir abans, és només un marcador de posició per a un char. 1143 00:47:08,880 --> 00:47:09,490 És encara. 1144 00:47:09,490 --> 00:47:12,280 Això, per descomptat, és un marcador de posició per a un no int-- una nova línia. 1145 00:47:12,280 --> 00:47:18,140 I ara noti, el meu primer valor que Estic connectant per aquest marcador de posició 1146 00:47:18,140 --> 00:47:22,320 no és només I. Estic dient, parèntesi, char I, 1147 00:47:22,320 --> 00:47:26,700 que el residu carbonós parèntesi és dient-li al compilador, el tractament que 1148 00:47:26,700 --> 00:47:28,490 no com el que és, que és un nombre. 1149 00:47:28,490 --> 00:47:30,490 Tractar-lo com un personatge real. 1150 00:47:30,490 --> 00:47:34,490 Considerant que el segon valor que estic endollant en-- jo-- hauria de ser només un nombre. 1151 00:47:34,490 --> 00:47:38,140 >> Així que si puc compilar aquest program-- així que això és fer ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 ASCII slash dot 0-- Acabo d'arribar aquesta petita pràctica taula que 1153 00:47:41,720 --> 00:47:44,950 em mostra tot el possible assignacions sense haver de pensar- 1154 00:47:44,950 --> 00:47:46,450 a través o esbrinar pel meu compte. 1155 00:47:46,450 --> 00:47:48,783 I també estic imprimint, notar les lletres minúscules, 1156 00:47:48,783 --> 00:47:51,410 perquè unes poques línies més endavant, em també imprimir aquest mapeig 1157 00:47:51,410 --> 00:47:53,737 també, que és només per dir que una vegada que entengui 1158 00:47:53,737 --> 00:47:55,570 el que està passant sota el capó, oi 1159 00:47:55,570 --> 00:47:57,111 convertir automàticament un costat a un altre. 1160 00:47:57,111 --> 00:48:00,160 I de fet, si algun de vostès mai va fer això en l'escola primària 1161 00:48:00,160 --> 00:48:03,490 o escoltat sobre algú tenint míticament una nota 1162 00:48:03,490 --> 00:48:05,620 i que passa al seu o la seva amiga a la classe, 1163 00:48:05,620 --> 00:48:08,300 però la regirats cartes de com A es converteix en B, 1164 00:48:08,300 --> 00:48:11,240 i B es converteix en C, o alguna cosa més complicat que això, bé, 1165 00:48:11,240 --> 00:48:13,410 Com anar sobre la implementació que quan era petit? 1166 00:48:13,410 --> 00:48:16,340 Bé, només una mica sap A esdevé B, B es converteix en C, 1167 00:48:16,340 --> 00:48:19,700 però matemàticament, el que estava fent aquest noi? 1168 00:48:19,700 --> 00:48:22,050 Què estava afegint a cada lletra? 1169 00:48:22,050 --> 00:48:23,340 Efectivament, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Així que quan vostè canvia de A a B, això és alguna cosa així com el canvi de 65 a 66, 1171 00:48:27,740 --> 00:48:29,590 que matemàticament significa simplement afegiu 1. 1172 00:48:29,590 --> 00:48:33,300 I pel que si anés a posar en pràctica aquest petit tècnica enganyosa 1173 00:48:33,300 --> 00:48:36,380 per al seu professor en codi, podria fer exactament això només 1174 00:48:36,380 --> 00:48:38,552 mitjançant l'addició d'una sola lletra junts. 1175 00:48:38,552 --> 00:48:40,260 Així que després de poc temps, estem anem a veure com ens 1176 00:48:40,260 --> 00:48:43,300 pot prendre avantatge d'això per realment lluita genuïna i unscramble 1177 00:48:43,300 --> 00:48:43,991 informació. 1178 00:48:43,991 --> 00:48:47,240 Mentrestant, sabem que hem començat introduir un parell d'altres biblioteques 1179 00:48:47,240 --> 00:48:48,990 aquí-- la cadena un avui. 1180 00:48:48,990 --> 00:48:51,180 I un lloc molt útil esperem que pugui trobar 1181 00:48:51,180 --> 00:48:55,010 es diu reference.cs50.net, que el professorat s'han reunit, 1182 00:48:55,010 --> 00:48:57,510 de manera que si vostè vol veure com funciona strlen, 1183 00:48:57,510 --> 00:48:59,300 vostè pot començar a escriure El nom de la funció, 1184 00:48:59,300 --> 00:49:02,890 feu clic strlen allà, i després una explicació menys còmode 1185 00:49:02,890 --> 00:49:03,700 va a aparèixer. 1186 00:49:03,700 --> 00:49:06,880 O si voleu que l'oficial Explicació basada en Linux, 1187 00:49:06,880 --> 00:49:08,945 pot fer clic més còmoda a la part superior dreta, i 1188 00:49:08,945 --> 00:49:12,070 presentarà la mateixa informació, però en termes més complexos. 1189 00:49:12,070 --> 00:49:15,070 Això és un recurs útil per a realment sap el que fa tot. 1190 00:49:15,070 --> 00:49:17,320 >> La propera vegada que anem a fer una ullada a Ovaltine 1191 00:49:17,320 --> 00:49:20,070 i més, i presentar- al món de la criptografia. 1192 00:49:20,070 --> 00:49:21,930 Abans d'això, ja veurem més tard aquesta setmana. 1193 00:49:21,930 --> 00:49:23,390 I ara, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Ens veiem dimecres. 1195 00:49:26,730 --> 00:49:30,216 >> [REPRODUCCIÓ DE MÚSICA] 1196 00:49:30,216 --> 00:49:33,702 >> [REPRODUCCIÓ DE MÚSICA] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> ALTAVEU 1: El que el [SENYAL] estàs fent? 1199 00:49:42,200 --> 00:49:45,720 >> ALTAVEU 1: Estic menjant el meu postres? 1200 00:49:45,720 --> 00:49:47,160 Com es menja això? 1201 00:49:47,160 --> 00:49:47,860 Amb les mans? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [REPRODUCCIÓ DE MÚSICA] 1204 00:49:57,940 --> 00:50:03,453