1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. Malan: Molt bé, aquest és CS50, i és aquesta la 2 00:00:11,630 --> 00:00:14,790 l'inici de la segona setmana. 3 00:00:14,790 --> 00:00:16,300 Gràcies. 4 00:00:16,300 --> 00:00:19,000 Comencem aquí amb una trucada telefònica. 5 00:00:19,000 --> 00:00:30,005 Estic a punt de marcar 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Aquest és CS50. 7 00:00:31,230 --> 00:00:33,930 Per Boy Shuttle, premeu 1. 8 00:00:33,930 --> 00:00:36,660 Per començar de nou, premeu 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. Malan: Això diu Noi Shuttle, premeu 1. 10 00:00:38,180 --> 00:00:41,560 Així que anem a pressionar 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Quin és el seu origen? 12 00:00:43,230 --> 00:00:45,340 Per quad, premeu 1. 13 00:00:45,340 --> 00:00:47,080 Mather, premeu 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, premeu 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, premeu 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, premeu 5. 17 00:00:53,210 --> 00:00:55,660 Per començar de nou, premeu 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. Malan: Anem a pressionar 1 per el quad. 19 00:00:59,590 --> 00:01:03,610 CS50: Shuttle Següent surt en aquest mateix instant a la 1:10 pm, i 20 00:01:03,610 --> 00:01:09,820 després a les 1:20 pm, 1:30 pm, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Això és CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. Malan: Així que aquesta és la veu del CS50. 23 00:01:15,570 --> 00:01:18,030 I és un exemple dels tipus de projectes fi de carrera, per 24 00:01:18,030 --> 00:01:19,500 exemple, es pot arrencar amb les dents cap 25 00:01:19,500 --> 00:01:20,600 Al final del semestre. 26 00:01:20,600 --> 00:01:23,840 Per exemple, que hi ha shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 en realitat un projecte que vaig escriure per primera vegada després de prendre CS51 28 00:01:28,200 --> 00:01:29,740 quan jo era estudiant. 29 00:01:29,740 --> 00:01:32,250 I aquí la inspiració era per aquell temps, l'únic que tenia era 30 00:01:32,250 --> 00:01:34,320 els horaris d'autobusos, transport impresos i no havia 31 00:01:34,320 --> 00:01:35,970 noció de veure les coses en línia. 32 00:01:35,970 --> 00:01:38,730 I, llavors, una mena de colom en un cap de setmana, s'aboca a través de la 33 00:01:38,730 --> 00:01:41,460 calendari imprès, i portat a un programa d'ordinador. 34 00:01:41,460 --> 00:01:43,790 En aquest moment, el programa d'ordinador que va passar a ser escrit 35 00:01:43,790 --> 00:01:47,110 en C. I en realitat corria per Boy trasllat escrivint en un 36 00:01:47,110 --> 00:01:48,600 parpelleig ràpid com ho hem estat fent fins ara. 37 00:01:48,600 --> 00:01:50,450 Però amb els anys, ha evolucionat fins a convertir-se en un instant 38 00:01:50,450 --> 00:01:51,390 missatgeria bot. 39 00:01:51,390 --> 00:01:53,970 Ha evolucionat més recentment en aquest lloc web, en un 40 00:01:53,970 --> 00:01:57,720 Basat en SMS eina, així com en aquesta eina basat en la veu. 41 00:01:57,720 --> 00:02:00,170 I això és fer al · lusió a la classe de coses que vostè pot 42 00:02:00,170 --> 00:02:02,380 fer per si mateix pel final del semestre. 43 00:02:02,380 --> 00:02:05,490 >> Per exemple, hi ha la versió de SMS Boy trasllat passa 44 00:02:05,490 --> 00:02:06,510 per operar com segueix. 45 00:02:06,510 --> 00:02:10,880 Si en el seu telèfon mòbil, enviar un missatge de text al 41411 i 46 00:02:10,880 --> 00:02:14,300 a continuació, enviar el sboy símbol especial, per al noi de trasllat, 47 00:02:14,300 --> 00:02:18,350 seguit per A i B, on A és un origen i B és un 48 00:02:18,350 --> 00:02:19,070 destí - 49 00:02:19,070 --> 00:02:21,030 per exemple, Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 el que s'ha de tornar en uns pocs segons és un text 51 00:02:23,330 --> 00:02:25,820 missatge de Boy trasllat dient exactament quan el 52 00:02:25,820 --> 00:02:28,990 pròxims autobusos són pocs, des d'aquest punt Una situació que 53 00:02:28,990 --> 00:02:29,640 punt B. 54 00:02:29,640 --> 00:02:32,510 I aquest és un exemple més general del que es coneix com 55 00:02:32,510 --> 00:02:33,920 mitjançant una API. 56 00:02:33,920 --> 00:02:36,930 >> Així, per exemple, això aquí és només shuttleboy.cs50.net, el 57 00:02:36,930 --> 00:02:39,300 real de web encarnació d'aquesta. 58 00:02:39,300 --> 00:02:42,480 Però les dades que subratlla aquesta i altres aplicacions que CS50 59 00:02:42,480 --> 00:02:45,560 ha desenvolupat estan tots exposats a tots aquí a la forma 60 00:02:45,560 --> 00:02:49,340 d'APIs, interfícies de programació d'aplicacions. 61 00:02:49,340 --> 00:02:52,220 I això és només una forma elegant de dir que la gent que ens agrada a 62 00:02:52,220 --> 00:02:56,010 Internet i altres han passat algun temps en la creació 63 00:02:56,010 --> 00:02:59,970 programari que es pot utilitzar amb la finalitat d'apoderar de les dades de nosaltres i 64 00:02:59,970 --> 00:03:02,510 després construir les seves pròpies aplicacions a la part superior 65 00:03:02,510 --> 00:03:03,840 d'aquest conjunt de dades. 66 00:03:03,840 --> 00:03:06,610 Així, per exemple, aquest noi de trasllat pàgina de l'API aquí, que 67 00:03:06,610 --> 00:03:09,390 passa a ser en el manual d'CS50, essencialment documents 68 00:03:09,390 --> 00:03:13,080 com vostè pot anar sobre la sol · licitud CS50 servidors de dades. 69 00:03:13,080 --> 00:03:16,240 Per exemple, si vostè està familiaritzat amb els arxius CSV, comma 70 00:03:16,240 --> 00:03:18,940 valors separats, aquests són només una espècie de ràpid i brut 71 00:03:18,940 --> 00:03:20,310 Excel-com els arxius. 72 00:03:20,310 --> 00:03:23,110 Així que vostè pot fer Boy trasllat de totes les dades en tota la 73 00:03:23,110 --> 00:03:25,090 cases i les seves coordenades GPS, i obtindrà 74 00:03:25,090 --> 00:03:27,300 de nou, en essència, un full de càlcul com el que 75 00:03:27,300 --> 00:03:30,820 la qual cosa pot llegir-se en un programa del seu compte i després 76 00:03:30,820 --> 00:03:33,250 generar resultats, com el Nen de trasllat en si 77 00:03:33,250 --> 00:03:34,160 passa a estar fent. 78 00:03:34,160 --> 00:03:37,030 Per als més familiars, representacions de dades més moderns 79 00:03:37,030 --> 00:03:39,420 incloure JSON, notació JavaScript Object. 80 00:03:39,420 --> 00:03:40,620 Una cosa sortirà de nou a vostè cap 81 00:03:40,620 --> 00:03:41,720 Al final del semestre. 82 00:03:41,720 --> 00:03:45,440 >> Però de nou, això és només una de diverses de les API del mateix CS50. 83 00:03:45,440 --> 00:03:48,320 I el més emocionant és ara, en aquests dies, Facebook i 84 00:03:48,320 --> 00:03:51,110 Twitter i Google i pràcticament tots els llocs web populars cap a fora 85 00:03:51,110 --> 00:03:54,130 no té algun tipus d'API, el que significa que si vostè llegeix el 86 00:03:54,130 --> 00:03:56,620 documentació al seu lloc web, vostè s'inscriu en un 87 00:03:56,620 --> 00:03:59,980 compte, vostè pot llavors començar a escriure programari en la part superior de 88 00:03:59,980 --> 00:04:03,680 qualsevol eina o dades que l'empresa no proporciona. 89 00:04:03,680 --> 00:04:06,210 I així, un dels nostres companys docents propis un parell d'anys enrere 90 00:04:06,210 --> 00:04:07,620 va escriure una versió per a Mac d'això. 91 00:04:07,620 --> 00:04:10,990 Així que a l'enllaç titulat Mac aquí dalt a l'esquerra, en realitat es pot 92 00:04:10,990 --> 00:04:13,940 descarregar un giny de Mac OS que s'executa en el seu propi Mac per fer el 93 00:04:13,940 --> 00:04:15,040 mateix tipus de coses. 94 00:04:15,040 --> 00:04:17,970 Així que és tot sobre la construcció a la part superior dels conjunts de dades com aquests. 95 00:04:17,970 --> 00:04:21,839 Però més sobre això cap al final del semestre. 96 00:04:21,839 --> 00:04:25,780 >> Així que anem a bussejar en ràpid real a un error, només per tipus d'aconseguir 97 00:04:25,780 --> 00:04:27,990 coses en calor avui, i penso en alguns dels 98 00:04:27,990 --> 00:04:29,660 ho vam veure la setmana passada. 99 00:04:29,660 --> 00:04:32,840 En particular, vull seguir endavant i aixecar, per exemple, 100 00:04:32,840 --> 00:04:34,080 aquest exemple aquí. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, està disponible a la pàgina web del curs si s'havia 102 00:04:37,500 --> 00:04:40,250 Voleu descarregar-la i ficar al teu voltant. 103 00:04:40,250 --> 00:04:43,520 Però anem a apropar aquí en aquest programa bastant curt, i només 104 00:04:43,520 --> 00:04:46,550 un resum super-ràpid d'alguns dels elements bàsics que 105 00:04:46,550 --> 00:04:48,880 que realment van a començar a limitar-se a prendre per fet. 106 00:04:48,880 --> 00:04:51,860 >> Així les coses blau, a les línies 1 a 9, són només 107 00:04:51,860 --> 00:04:53,670 preguntes de softbol. 108 00:04:53,670 --> 00:04:54,590 Així que aquests són només comentaris. 109 00:04:54,590 --> 00:04:56,230 Ells no tenen un significat funcional. 110 00:04:56,230 --> 00:04:58,460 Però són els comentaris en el sentit que són les notes que 111 00:04:58,460 --> 00:05:02,010 Jo, l'ésser humà, fet a mi mateix, perquè en la conferència i després d' 112 00:05:02,010 --> 00:05:04,340 conferència, realment puc recordar el que aquest programa 113 00:05:04,340 --> 00:05:07,120 fa sense haver de llegir línia per línia i 114 00:05:07,120 --> 00:05:08,990 recrear la història en la meva ment. 115 00:05:08,990 --> 00:05:11,000 D'altra banda, si es em lliuri aquest programa a una altra persona com 116 00:05:11,000 --> 00:05:14,420 vostè, és molt més clar per a vostè, a causa dels comentaris d'aquest tipus, 117 00:05:14,420 --> 00:05:16,680 el que el programa està fent en realitat, o almenys el que el 118 00:05:16,680 --> 00:05:18,210 programa suposa que ha de fer. 119 00:05:18,210 --> 00:05:20,760 Si és o no és correcte és una altra qüestió. 120 00:05:20,760 --> 00:05:25,040 Ara, en C, amb comentaris de diverses línies, recordem que en la línia 121 00:05:25,040 --> 00:05:27,880 d'aquí és el símbol de la màgia, / *. 122 00:05:27,880 --> 00:05:30,380 Això vol dir que aquí ve l'inici d'un comentari. 123 00:05:30,380 --> 00:05:34,560 I res més importa fins que arribi al final de terminació, 124 00:05:34,560 --> 00:05:36,700 que és * /, el contrari. 125 00:05:36,700 --> 00:05:39,120 Així que el fet que tinc 80-algunes estrelles imparells des d'aquí 126 00:05:39,120 --> 00:05:41,550 d'esquerra a dreta és en realitat només un detall estètic. 127 00:05:41,550 --> 00:05:43,370 No té cap significat funcional. 128 00:05:43,370 --> 00:05:44,490 >> Ara, què hi ha de la línia 11? 129 00:05:44,490 --> 00:05:46,940 Què fa això en termes simples? 130 00:05:51,560 --> 00:05:52,540 Què és això? 131 00:05:52,540 --> 00:05:54,280 AUDIÈNCIA: Inclou la norma. 132 00:05:54,280 --> 00:05:54,740 DAVID J. Malan: OK, bo. 133 00:05:54,740 --> 00:05:57,500 Per tant, inclou la biblioteca stdio.h. 134 00:05:57,500 --> 00:05:58,230 Llavors, què significa això? 135 00:05:58,230 --> 00:06:01,570 Doncs bé, dins d'aquest arxiu, stdio.h, són un munt de 136 00:06:01,570 --> 00:06:03,320 declaracions de funció - 137 00:06:03,320 --> 00:06:05,290 és a dir, el codi que una altra persona va escriure. 138 00:06:05,290 --> 00:06:08,160 I un exemple perfecte d'una funció que es declara en 139 00:06:08,160 --> 00:06:10,250 stdio.h és - 140 00:06:10,250 --> 00:06:11,980 que per ara favorit? 141 00:06:11,980 --> 00:06:14,300 Així printf, un dels més comuns d'usar, certament 142 00:06:14,300 --> 00:06:15,840 des del principi, des que la biblioteca està allà. 143 00:06:15,840 --> 00:06:19,290 Si excloc aquesta línia de codi, Clang va a cridar 144 00:06:19,290 --> 00:06:22,550 a mi alguna cosa sobre l'ús d'un símbol no declarat. 145 00:06:22,550 --> 00:06:24,930 Alguna cosa no declarat és, probablement, la paraula clau, perquè 146 00:06:24,930 --> 00:06:27,770 no ens han informat que el compilador ho veu printf 147 00:06:27,770 --> 00:06:29,230 llevat que ens agradaria incloure aquesta línia. 148 00:06:29,230 --> 00:06:31,830 I més a la Terra, en realitat, el que està dient és la línia 149 00:06:31,830 --> 00:06:34,890 obrir aquest arxiu, stdio.h, allà on es troba al servidor de 150 00:06:34,890 --> 00:06:38,200 disc dur o unitat de disc dur del dispositiu, i copiar i enganxar-it 151 00:06:38,200 --> 00:06:40,240 aquí mateix en el meu arxiu, sense el meu 152 00:06:40,240 --> 00:06:41,730 haver de fer-ho manualment. 153 00:06:41,730 --> 00:06:44,420 >> Ara, un cop que arribem fins aquí per principal, en poc temps anem a començar 154 00:06:44,420 --> 00:06:46,900 bromes a part el int i el que és buit. 155 00:06:46,900 --> 00:06:48,430 Però per ara, anem a veure les tres línies 156 00:06:48,430 --> 00:06:50,350 dins de 15 a 17. 157 00:06:50,350 --> 00:06:52,250 Això aquí afirmo com buggy. 158 00:06:52,250 --> 00:06:54,900 Línia 7 en els meus comentaris diu: "En cas d'imprimir 10 159 00:06:54,900 --> 00:06:59,410 asteriscs, però no. "Per què això no s'imprimeixen, de fet, 160 00:06:59,410 --> 00:07:01,097 10 estels d'aquest tipus? 161 00:07:01,097 --> 00:07:02,347 AUDIÈNCIA: [inaudible]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. Malan: Exactament. 163 00:07:05,800 --> 00:07:08,720 Així adonar que estem començant a comptar des de 0. 164 00:07:08,720 --> 00:07:10,780 I això és en realitat una convenció en la programació i 165 00:07:10,780 --> 00:07:13,230 ciències de la computació en general, començant a comptar 166 00:07:13,230 --> 00:07:14,610 de 0 en lloc d'1. 167 00:07:14,610 --> 00:07:16,690 I això realment només es deriva del fet que, per 168 00:07:16,690 --> 00:07:18,940 exemple, quan teníem vuit persones a l'escenari, quan 169 00:07:18,940 --> 00:07:20,680 ningú aixecava la mà, eren 170 00:07:20,680 --> 00:07:22,340 tots els zeros eficaç. 171 00:07:22,340 --> 00:07:24,260 I el que és només una espècie de convenció ordinador per, 172 00:07:24,260 --> 00:07:26,030 per tant, per començar a comptar des de 0. 173 00:07:26,030 --> 00:07:29,130 Si aquest és el menor nombre que pot representar en binari. 174 00:07:29,130 --> 00:07:32,270 >> Així que aquí hem començat la inicialització i en 0. 175 00:07:32,270 --> 00:07:34,230 Hem establert i igual a 0. 176 00:07:34,230 --> 00:07:37,780 Però llavors vaig fer aquest error aquí, dient que és menor o 177 00:07:37,780 --> 00:07:38,820 igual a 10. 178 00:07:38,820 --> 00:07:41,700 Però si vostè pensa que a través d', si començo a 0 i després em vaig 179 00:07:41,700 --> 00:07:46,410 fins a 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, de fet vaig a 180 00:07:46,410 --> 00:07:49,980 imprimir 11 estrelles a la pantalla, perquè he pujat 181 00:07:49,980 --> 00:07:52,410 a i igual a 10. 182 00:07:52,410 --> 00:07:55,090 Així que la solució fàcil aquí és, llavors, què? 183 00:07:55,090 --> 00:07:56,070 AUDIÈNCIA: [inaudible]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. Malan: Només has de canviar a menys. 185 00:07:57,350 --> 00:07:59,700 Si realment voleu, vostè pot fer això. 186 00:07:59,700 --> 00:08:01,370 Però, en general, que està mal vist. 187 00:08:01,370 --> 00:08:04,020 I així comença a comptar des de 0 és només una cosa que hauria 188 00:08:04,020 --> 00:08:05,510 normalment s'acostuma. 189 00:08:05,510 --> 00:08:07,810 Ara, què passa amb tota aquesta construcció en si i per si mateixa? 190 00:08:07,810 --> 00:08:10,640 Aquesta línia 15 deMarks un bucle for. 191 00:08:10,640 --> 00:08:12,510 Així que per no és una funció. 192 00:08:12,510 --> 00:08:13,640 És només una declaració. 193 00:08:13,640 --> 00:08:16,180 És una construcció de bucle, com hem vist al Scratch. 194 00:08:16,180 --> 00:08:17,600 I té tres parts. 195 00:08:17,600 --> 00:08:19,740 Recordeu que no és la primera part de 196 00:08:19,740 --> 00:08:21,350 l'esquerra de la coma. 197 00:08:21,350 --> 00:08:24,200 Aquí està la part mitjana entre els dos punts i comes. 198 00:08:24,200 --> 00:08:26,250 I després hi ha la part de la dreta a la dreta 199 00:08:26,250 --> 00:08:27,640 del punt i coma segon. 200 00:08:27,640 --> 00:08:31,822 Ara, la primera d'elles fa què? 201 00:08:31,822 --> 00:08:33,679 AUDIÈNCIA: [inaudible]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. Malan: Tornar allà? 203 00:08:34,270 --> 00:08:34,816 Sí? 204 00:08:34,816 --> 00:08:35,980 AUDIÈNCIA: Inicialització. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. Malan: Inicialització. 206 00:08:36,850 --> 00:08:37,840 Llavors, què significa això? 207 00:08:37,840 --> 00:08:40,690 Hem declarat una variable anomenada i. 208 00:08:40,690 --> 00:08:43,840 És de tipus int, perquè he especificat int i. 209 00:08:43,840 --> 00:08:46,470 I estic i inicialitzar amb el valor de 0. 210 00:08:46,470 --> 00:08:47,730 Llavors, què està dient realment? 211 00:08:47,730 --> 00:08:50,680 És efectivament dient a l'ordinador hey, dóna'm suficient 212 00:08:50,680 --> 00:08:53,660 memòria RAM suficient, per ajustar-se a un nombre i, a continuació, posar el 213 00:08:53,660 --> 00:08:56,130 nombre 0 en aquest bloc de memòria RAM. 214 00:08:56,130 --> 00:08:59,100 I en un apart, què tan gran és un int en general, si més no dins 215 00:08:59,100 --> 00:09:00,280 l'aparell? 216 00:09:00,280 --> 00:09:01,000 AUDIÈNCIA: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. Malan: 32 bits. 218 00:09:01,670 --> 00:09:04,890 Això vol dir que em donen 32 bits, també coneguda com 4 bytes, 219 00:09:04,890 --> 00:09:07,250 i posar el valor 0 en el mateix, la qual cosa és bastant fàcil perquè 220 00:09:07,250 --> 00:09:09,110 Simplement significa posar tots els bits a 0. 221 00:09:09,110 --> 00:09:11,690 >> Així que ara, la segona part aquí és la condició. 222 00:09:11,690 --> 00:09:14,590 I la condició, com el seu nom ho indica, és el que es comprova 223 00:09:14,590 --> 00:09:18,100 una i altra vegada i una altra sobre si és cert o fals. 224 00:09:18,100 --> 00:09:21,410 Així que això és només dir fer les següents línies de codi - 225 00:09:21,410 --> 00:09:23,950 és a dir, la línia 16, perquè aquesta és l'única sagnia 226 00:09:23,950 --> 00:09:24,820 sota - 227 00:09:24,820 --> 00:09:26,980 sempre que i és menor que 10. 228 00:09:26,980 --> 00:09:30,520 I després de cada iteració a través d'aquest bucle, faci el 229 00:09:30,520 --> 00:09:33,840 increment, que en aquest cas és i + +. 230 00:09:33,840 --> 00:09:35,580 Ara bé, no ha de ser i + +. 231 00:09:35,580 --> 00:09:37,610 Podria ser i -. 232 00:09:37,610 --> 00:09:39,860 Però si ho vaig fer, quin és el comportament va 233 00:09:39,860 --> 00:09:41,370 sent d'aquest programa? 234 00:09:41,370 --> 00:09:42,290 AUDIÈNCIA: Serà un bucle infinit. 235 00:09:42,290 --> 00:09:44,060 DAVID J. Malan: Serà una espècie de bucle infinit, 236 00:09:44,060 --> 00:09:47,720 llevat que tinguem sort després negatiu 2 milions de dòlars o així. 237 00:09:47,720 --> 00:09:51,320 Potser les coses s'emboliquen al voltant, només per la naturalesa del finit 238 00:09:51,320 --> 00:09:53,930 nombre de bits que s'han assignat per a un int. 239 00:09:53,930 --> 00:09:56,270 Però és segur que repetirà molt més que 10 i 240 00:09:56,270 --> 00:09:58,630 sens dubte, més de 11 vegades aquí. 241 00:09:58,630 --> 00:10:02,240 >> I ara, en un apart, adonar-se que i + + i i - 242 00:10:02,240 --> 00:10:04,420 en realitat són només sucre sintàctica. 243 00:10:04,420 --> 00:10:07,210 És només la notació abreujada del que és una mica més 244 00:10:07,210 --> 00:10:08,720 explícitament escrit així: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Que és idèntica a i + +. 247 00:10:13,460 --> 00:10:15,860 És només una mica es veu més bonic que dir i + +. 248 00:10:15,860 --> 00:10:17,490 És més concís, més llegible. 249 00:10:17,490 --> 00:10:19,030 I així, la majoria de la gent fa en el seu lloc. 250 00:10:19,030 --> 00:10:21,840 Però això és funcionalment idèntica a 251 00:10:21,840 --> 00:10:22,900 el que acabem de veure. 252 00:10:22,900 --> 00:10:27,770 Així que en resum, la solució ràpida aquí és només per dir iterar i 253 00:10:27,770 --> 00:10:30,690 des de 0 tot el camí fins a menys de 10. 254 00:10:30,690 --> 00:10:32,700 I llavors certament obtindrà 10 estrelles. 255 00:10:32,700 --> 00:10:33,430 >> Així que anem a provar això. 256 00:10:33,430 --> 00:10:35,310 Deixa obrir la terminal a la part inferior. 257 00:10:35,310 --> 00:10:37,420 Déjame entrar al directori que aquest és polz 258 00:10:37,420 --> 00:10:40,030 I vaig a compilar manualment amb Clang per ara. 259 00:10:40,030 --> 00:10:44,880 I vaig a compilar això com buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 I ara buggy1, per què no hi ha tal arxiu o directori 261 00:10:50,280 --> 00:10:52,026 anomenat buggy1? 262 00:10:52,026 --> 00:10:53,850 AUDIÈNCIA: [inaudible]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. Malan: Si. 264 00:10:54,240 --> 00:10:55,420 Així que és en realitat anomenat a.out. 265 00:10:55,420 --> 00:10:57,480 Així que si vostè acaba de recordar executar Clang, on Clang és la 266 00:10:57,480 --> 00:11:00,420 compilador, i no s'especifica el nom que desitja 267 00:11:00,420 --> 00:11:03,550 donar al seu programa, que va per defecte a a.out. 268 00:11:03,550 --> 00:11:05,030 Així que en realitat, si ho faig ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 I I didn't - el tema negre i blanc alguns 271 00:11:07,680 --> 00:11:08,840 et vas enfrontar s'ha solucionat. 272 00:11:08,840 --> 00:11:10,670 Però m'ho dius a mi fer això. 273 00:11:10,670 --> 00:11:14,570 No tenim a.out a la banda esquerra hi ha. 274 00:11:14,570 --> 00:11:17,360 Així que hem d'executar a.out en lloc de buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Així que permetin-me anar endavant i fer-ho. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Intro. 277 00:11:22,840 --> 00:11:26,160 I pel que sembla no va fer el que? 278 00:11:26,160 --> 00:11:26,620 AUDIÈNCIA: Desa. 279 00:11:26,620 --> 00:11:27,390 DAVID J. Malan: Guardar la imatge. 280 00:11:27,390 --> 00:11:31,520 Així que es resol fàcilment prement S de control, o anar a 281 00:11:31,520 --> 00:11:33,450 Arxiu, Guardar, com en la majoria dels programes. 282 00:11:33,450 --> 00:11:36,360 Deixa aquí, esborrar la pantalla, s'execute altra vegada. 283 00:11:36,360 --> 00:11:37,960 I encara hi ha un error. 284 00:11:37,960 --> 00:11:41,618 Llavors, què està passant - 285 00:11:41,618 --> 00:11:42,980 AUDIÈNCIA: No compila. 286 00:11:42,980 --> 00:11:44,040 DAVID J. Malan: Ah, bé. 287 00:11:44,040 --> 00:11:45,010 Jo no ho compila. 288 00:11:45,010 --> 00:11:47,250 Com un idiota, jo estic mirant el codi per veure què passa. 289 00:11:47,250 --> 00:11:51,275 Així clang buggy1.c, ara a.out. 290 00:11:51,275 --> 00:11:52,640 I ¡uf, salvada. 291 00:11:52,640 --> 00:11:55,090 >> Així que sembla una mica lleig perquè no hi ha nova línia 292 00:11:55,090 --> 00:11:55,970 en qualsevol part del programa. 293 00:11:55,970 --> 00:11:57,390 Però, de nou, això és només un detall estètic. 294 00:11:57,390 --> 00:11:59,430 I si més no si comptem els que fos, hauríem 295 00:11:59,430 --> 00:12:01,160 10 Ara veiem d'aquestes estrelles. 296 00:12:01,160 --> 00:12:03,260 Bé, què passa amb aquest segon escalfament exemple? 297 00:12:03,260 --> 00:12:07,750 Així que en buggy2, sostinc que aquesta versió també s'imprimirà 298 00:12:07,750 --> 00:12:10,110 10 estels, una per línia. 299 00:12:10,110 --> 00:12:12,340 Així que aquesta vegada, tinc un caràcter de nova línia, només per fer 300 00:12:12,340 --> 00:12:13,520 les coses una mica més bonic. 301 00:12:13,520 --> 00:12:15,410 Però en lloc del que em passa és el següent. 302 00:12:15,410 --> 00:12:19,590 Així que permetin-me fer buggy2.c clang, Intro. 303 00:12:19,590 --> 00:12:21,790 Ara està de nou anomenat a.out. 304 00:12:21,790 --> 00:12:23,130 Retorn. 305 00:12:23,130 --> 00:12:26,900 Només veig una nova línia, només la nova línia últim que 306 00:12:26,900 --> 00:12:29,370 mou el meu sistema a la línia següent. 307 00:12:29,370 --> 00:12:32,660 I no obstant això, és clar que jo he estat imprimint *, llavors una nova línia, 308 00:12:32,660 --> 00:12:33,990 *, Llavors una nova línia. 309 00:12:33,990 --> 00:12:35,490 Però quin és l'error aquí? 310 00:12:35,490 --> 00:12:35,974 Sí? 311 00:12:35,974 --> 00:12:37,224 AUDIÈNCIA: [inaudible]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. Malan: Exactament. 313 00:12:40,470 --> 00:12:44,110 Així que a diferència d'altres llenguatges, com Python, on sagnia 314 00:12:44,110 --> 00:12:46,030 en realitat té un significat funcional, en un 315 00:12:46,030 --> 00:12:47,150 llenguatge com C - 316 00:12:47,150 --> 00:12:49,140 com veurem, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 el sagnat és realment només per benefici dels éssers humans. 318 00:12:51,940 --> 00:12:55,690 Així que el fet que he sagnat línia 16 i 17 es veu molt bé, 319 00:12:55,690 --> 00:12:57,530 però no té cap significat funcional aquí. 320 00:12:57,530 --> 00:13:00,700 Si vull a les dues línies s'executen com a part de la de 321 00:13:00,700 --> 00:13:05,140 bucle, llavors he de tancar entre claus en fer això. 322 00:13:05,140 --> 00:13:08,540 Només es pot tallar aquesta cantonada i ometi les claus si 323 00:13:08,540 --> 00:13:10,036 Quin és el cas? 324 00:13:10,036 --> 00:13:10,410 PÚBLIC: Una sola línia. 325 00:13:10,410 --> 00:13:11,130 DAVID J. Malan: Només una línia. 326 00:13:11,130 --> 00:13:15,280 Així que això és només una espècie d'un tipus bonic detall de sintaxi, de manera que 327 00:13:15,280 --> 00:13:17,900 que no perdis el temps escrivint tres línies, dues de les quals són 328 00:13:17,900 --> 00:13:20,040 claus, només per escriure una sola línia de codi. 329 00:13:20,040 --> 00:13:21,650 Però si vostè té dues o més línies, 330 00:13:21,650 --> 00:13:22,860 en realitat hi ha de fer això. 331 00:13:22,860 --> 00:13:24,210 >> Així que ara em deixa desar això. 332 00:13:24,210 --> 00:13:27,140 Deixin-me seguir endavant i tornar a executar Clang. 333 00:13:27,140 --> 00:13:31,375 Llavors m'ho dius a mi tornar a executar a.out, i ara els puc obtenir un per línia. 334 00:13:31,375 --> 00:13:33,670 Ara, de nou a.out és una espècie de nom ximple per a un programa. 335 00:13:33,670 --> 00:13:37,500 Com puc saber en realitat Clang a donar-me un nom de fitxer 336 00:13:37,500 --> 00:13:39,820 això és més fàcil d'usar, com buggy2 si mateix? 337 00:13:43,200 --> 00:13:44,466 Una mica més clarament? 338 00:13:44,466 --> 00:13:45,220 AUDIÈNCIA: [inaudible]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. Malan: OK, així que en realitat pot tenir el mateix 340 00:13:47,810 --> 00:13:51,000 de fàcil accés directe i escriure simplement fer buggy2. 341 00:13:51,000 --> 00:13:53,840 No s'especifica. C en aquest cas, i premeu Enter. 342 00:13:53,840 --> 00:13:58,530 I el que fa és fer que compila buggy2.c per a mi per 343 00:13:58,530 --> 00:14:00,260 demanant Clang per fer-ho. 344 00:14:00,260 --> 00:14:05,100 En concret, es diu Clang, s'executa utilitzant Clang manera més 345 00:14:05,100 --> 00:14:08,540 arguments de línia d'ordres o interruptors del que realment necessiten. 346 00:14:08,540 --> 00:14:11,270 Amb el temps, anem a tornar al que tots aquests diversos 347 00:14:11,270 --> 00:14:13,810 críptiques expressions amb guions significa. 348 00:14:13,810 --> 00:14:16,910 Però per ara, això és només m'estalvio la molèstia de 349 00:14:16,910 --> 00:14:19,600 haver de recordar i haver d'escriure tots els 350 00:14:19,600 --> 00:14:21,150 diverses expressions separades per guions. 351 00:14:21,150 --> 00:14:23,240 I l'avantatge que en última instància és 352 00:14:23,240 --> 00:14:25,900 que ara tinc buggy2. 353 00:14:25,900 --> 00:14:27,480 Si jo vull fer això de forma manual, però, em 354 00:14:27,480 --> 00:14:28,775 en el seu lloc pot fer això - 355 00:14:28,775 --> 00:14:34,110 clang-o buggy2 i després buggy2.c. 356 00:14:34,110 --> 00:14:37,980 I de la mateixa manera que em donarà un arxiu anomenat buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Així que en resum, Clang és el compilador. 358 00:14:39,710 --> 00:14:43,080 Fer és només una eina de fàcil ús que utilitzarem més 359 00:14:43,080 --> 00:14:44,420 i més, ja que només comença a 360 00:14:44,420 --> 00:14:47,330 simplificar les coses per a nosaltres. 361 00:14:47,330 --> 00:14:49,430 I tornem 0, finalment. 362 00:14:49,430 --> 00:14:51,890 Per ara, perquè sí, però anem a començar a burlar d'aquesta part 363 00:14:51,890 --> 00:14:52,930 avui i dimecres. 364 00:14:52,930 --> 00:14:55,560 Teniu alguna pregunta respecte tot això? 365 00:14:55,560 --> 00:14:56,450 Sí? 366 00:14:56,450 --> 00:14:58,234 AUDIÈNCIA: [inaudible] 367 00:14:58,234 --> 00:15:00,020 ls entre cometes allà? 368 00:15:00,020 --> 00:15:01,710 DAVID J. Malan: OK. 369 00:15:01,710 --> 00:15:05,880 Quan ls escrites entre cometes, que m'estava fent una mica de màgia 370 00:15:05,880 --> 00:15:07,160 darrere de les escenes per corregir un error. 371 00:15:07,160 --> 00:15:09,370 Se m'oblidava, com ho hem estat dient a molts de vostès a la 372 00:15:09,370 --> 00:15:11,600 fòrums de discussió, que es pot fer - 373 00:15:11,600 --> 00:15:17,220 farem això ara - sudo yum-i update appliance50. 374 00:15:17,220 --> 00:15:19,790 Vaja, que això està ben escrit. 375 00:15:19,790 --> 00:15:23,240 Així l'aparell és com un sistema operatiu. 376 00:15:23,240 --> 00:15:25,650 S'està executant el sistema operatiu anomenat Fedora. 377 00:15:25,650 --> 00:15:27,450 I ara, per la meva connexió a Internet lenta, no tinc 378 00:15:27,450 --> 00:15:28,260 realment una mànega. 379 00:15:28,260 --> 00:15:31,620 Llavors, executar yum update sudo, com ja et dic que facis a la 380 00:15:31,620 --> 00:15:34,080 conjunt de problemes, essencialment agrada córrer actualitzacions automàtiques 381 00:15:34,080 --> 00:15:35,420 en Mac OS o Windows. 382 00:15:35,420 --> 00:15:37,280 I la raó de l'execució d'aquest en el començament mateix de la 383 00:15:37,280 --> 00:15:39,640 conjunt de problemes és perquè quan vam crear l'aparell, em 384 00:15:39,640 --> 00:15:42,480 en mal estat, i accidentalment introduït tots els programes busquen 385 00:15:42,480 --> 00:15:45,210 negre en una pantalla en negre, de manera que vostè no els està veient 386 00:15:45,210 --> 00:15:45,860 per defecte. 387 00:15:45,860 --> 00:15:48,020 Però l'última versió de l'aparell corregeix això. 388 00:15:48,020 --> 00:15:50,500 I vaig a arreglar això durant les vacances un cop que tingui Internet 389 00:15:50,500 --> 00:15:51,280 connectivitat. 390 00:15:51,280 --> 00:15:54,630 >> Així que les cites només s'amaga el meu error, molt discretament, 391 00:15:54,630 --> 00:15:55,730 pel que sembla. 392 00:15:55,730 --> 00:15:56,980 Altres preguntes? 393 00:15:59,750 --> 00:16:00,668 Sí? 394 00:16:00,668 --> 00:16:02,012 PÚBLIC: D'on ve fer vi? 395 00:16:02,012 --> 00:16:03,810 [Inaudible] 396 00:16:03,810 --> 00:16:04,280 DAVID J. Malan: Bona pregunta. 397 00:16:04,280 --> 00:16:05,460 On fer vi? 398 00:16:05,460 --> 00:16:09,390 Es tracta d'un programa de Linux que ha existit durant molts anys, molt 399 00:16:09,390 --> 00:16:10,570 abans CS50. 400 00:16:10,570 --> 00:16:12,930 I ve amb un sistema operatiu com Fedora. 401 00:16:12,930 --> 00:16:14,830 No ve de la biblioteca CS50. 402 00:16:14,830 --> 00:16:17,560 De fet, les úniques coses que vénen de la biblioteca CS50 403 00:16:17,560 --> 00:16:20,470 fins ara, el que hem vist, són GetString, getInt, tots 404 00:16:20,470 --> 00:16:25,550 Obtenir els funcions, i la cadena de paraules, i en certa 405 00:16:25,550 --> 00:16:26,575 extensió, la paraula bool. 406 00:16:26,575 --> 00:16:29,180 Però anem a molestar que a part quan ens submergim en el CS50 407 00:16:29,180 --> 00:16:30,580 aparell en si. 408 00:16:30,580 --> 00:16:32,820 >> Així que sí, una pregunta més aquí. 409 00:16:32,820 --> 00:16:36,636 PÚBLIC: Quan vostè va dir i després fer buggy, com funciona el 410 00:16:36,636 --> 00:16:39,980 equip sap [inaudible]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. Malan: Bona pregunta. 412 00:16:40,520 --> 00:16:43,830 Així que quan vostè acaba de fer executar o fer buggy1 buggy2, com 413 00:16:43,830 --> 00:16:45,220 fa saber? 414 00:16:45,220 --> 00:16:49,900 Així que per defecte, si escriu buggy1 fer, fer looks per a una 415 00:16:49,900 --> 00:16:52,330 arxiu anomenat buggy1.c. 416 00:16:52,330 --> 00:16:55,570 I després executa les ordres Clang apropiades, 417 00:16:55,570 --> 00:17:00,380 així ignorant el fitxer de sortida per defecte anomenat a.out. 418 00:17:00,380 --> 00:17:03,670 De fet, si ens fixem en el que fan, el que - 419 00:17:03,670 --> 00:17:04,839 sortirem d'aquesta. 420 00:17:04,839 --> 00:17:09,530 Si ens fixem en el que fan en realitat estava fent, fer buggy2, 421 00:17:09,530 --> 00:17:10,470 ja està actualitzat. 422 00:17:10,470 --> 00:17:13,020 Així que em tregui la comanda rm, la 423 00:17:13,020 --> 00:17:14,319 programa que he escrit abans. 424 00:17:14,319 --> 00:17:17,319 Escrivint I-E-S per confirmar que voleu eliminar-lo. 425 00:17:17,319 --> 00:17:20,480 Si ara fan, observi que en aquesta línia molt llarga, 426 00:17:20,480 --> 00:17:22,980 hi ha aquesta última cosa que aquí,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Tots cometem està fent és passar aquest argument, per dir-ho, a 428 00:17:26,959 --> 00:17:29,665 Clang, de manera que no he de escriure jo mateix. 429 00:17:29,665 --> 00:17:32,660 >> Molt bé, així que un parell de ràpida administratiu 430 00:17:32,660 --> 00:17:33,470 anuncis. 431 00:17:33,470 --> 00:17:36,940 Així, per seccions, que va començar oficialment el proper 432 00:17:36,940 --> 00:17:38,970 Diumenge, vostè sempre voldrà portar, si 433 00:17:38,970 --> 00:17:40,120 vostè té un, un ordinador portàtil. 434 00:17:40,120 --> 00:17:42,570 Si vostè no té un ordinador portàtil, arriben a mi per 435 00:17:42,570 --> 00:17:43,580 deixar-me un correu electrònic. 436 00:17:43,580 --> 00:17:44,810 I anem a esbrinar un flux de treball. 437 00:17:44,810 --> 00:17:47,100 El que generalment trobarà al punt és que són part 438 00:17:47,100 --> 00:17:48,770 part conceptual i pràctic. 439 00:17:48,770 --> 00:17:52,190 En especial, utilitzarem la secció de preguntes, part de 440 00:17:52,190 --> 00:17:54,110 la setmana del conjunt de problemes, caminar a través d'alguns dels 441 00:17:54,110 --> 00:17:55,820 material conceptual de la conferència. 442 00:17:55,820 --> 00:17:57,480 I això és tot en el conjunt de problemes actual. 443 00:17:57,480 --> 00:18:00,010 I també anem a aprofundir en algunes de les activitats amb mans, de vegades 444 00:18:00,010 --> 00:18:02,190 dels quals es requereix que es presentarà, de vegades de 445 00:18:02,190 --> 00:18:02,830 quins no. 446 00:18:02,830 --> 00:18:04,630 Per exemple, aquesta primera setmana, que estan destinats només com un 447 00:18:04,630 --> 00:18:05,780 exercici d'escalfament. 448 00:18:05,780 --> 00:18:07,800 I t'adonaràs que aquests problemes són realment només això. 449 00:18:07,800 --> 00:18:10,220 Estan destinats a ser bastant petita, però no necessàriament 450 00:18:10,220 --> 00:18:13,100 programes trivials per escriure, que no són necessàriament 451 00:18:13,100 --> 00:18:16,230 bones oportunitats interessants en si mateixes sinó que han de 452 00:18:16,230 --> 00:18:19,620 practicar amb la sintaxi, amb noves funcions, en la comoditat d'una 453 00:18:19,620 --> 00:18:21,900 secció on vostè té alguns dels seus companys de classe presenten com 454 00:18:21,900 --> 00:18:22,870 així com el TF. 455 00:18:22,870 --> 00:18:26,210 >> I què farem amb el temps és utilitzar una eina anomenada CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 pel que en lloc d'utilitzar l'aparell CS50, vostè 457 00:18:28,940 --> 00:18:32,450 en lloc d'anar a una pàgina web en un navegador, on podràs 458 00:18:32,450 --> 00:18:35,610 per a programar en una finestra del navegador a la secció. 459 00:18:35,610 --> 00:18:38,240 I després, si et acceptes, el teu company d'ensenyament es pot mostrar 460 00:18:38,240 --> 00:18:40,980 sigui el que sigui que estàs escrivint a la pantalla al navegador 461 00:18:40,980 --> 00:18:43,930 finestra a la part davantera de la classe, ja sigui anònima o 462 00:18:43,930 --> 00:18:47,250 públicament, perquè ell o ella pot caminar a través de 463 00:18:47,250 --> 00:18:50,080 seus companys de classe el que has fet bé, el que no li va anar bé. 464 00:18:50,080 --> 00:18:52,750 I de nou, pot estar segur de tot això pot ser molt bé anònims. 465 00:18:52,750 --> 00:18:54,410 Però serà una bona oportunitat per a molt més 466 00:18:54,410 --> 00:18:56,810 interactivitat que permet una mena conferències. 467 00:18:56,810 --> 00:18:58,910 >> Mentrestant, tindrem aquestes coses anomenades súper 468 00:18:58,910 --> 00:19:01,610 seccions, que són opcionals, però estan oberts a tothom en 469 00:19:01,610 --> 00:19:04,030 la classe, de manera que vostè pot fer això de manera més col · lectiva per 470 00:19:04,030 --> 00:19:05,190 establir un problema. 471 00:19:05,190 --> 00:19:06,010 Aquí està l'horari. 472 00:19:06,010 --> 00:19:08,870 Això també es publica a la pàgina web en cs50.net. 473 00:19:08,870 --> 00:19:10,850 Recordeu que hi haurà un pirata informàtic específic 474 00:19:10,850 --> 00:19:12,430 un matí a la tarda. 475 00:19:12,430 --> 00:19:15,460 I anem a filmar un avui i demà un i publicar els 476 00:19:15,460 --> 00:19:16,720 en línia dins de les 24 hores. 477 00:19:16,720 --> 00:19:19,370 Així que si vostè no pot fer cap d'aquestes ocasions, a preocupar. 478 00:19:19,370 --> 00:19:22,720 I de nou, el programa està en línia en cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> En termes de seccionament si mateix, vostè va haver d'haver rebut un 480 00:19:25,350 --> 00:19:28,520 correu electrònic amb instruccions per anar a la pàgina d'inici del curs per trobar 481 00:19:28,520 --> 00:19:29,610 fora de la seva secció. 482 00:19:29,610 --> 00:19:32,890 Si la vida ha canviat i necessita canviar la seva secció, 483 00:19:32,890 --> 00:19:33,560 no és un problema. 484 00:19:33,560 --> 00:19:37,900 Torna a la mateixa URL, cs50.net/section, singular, 485 00:19:37,900 --> 00:19:40,090 i vostè ompli el formulari similar, perquè pugui 486 00:19:40,090 --> 00:19:41,260 que ens donin les seves preferències. 487 00:19:41,260 --> 00:19:43,360 I seguirem a finals de setmana pel que fa al que podem 488 00:19:43,360 --> 00:19:44,240 acomodar. 489 00:19:44,240 --> 00:19:49,530 La setmana passada, recordem que hem proposat utilitzar CS50 Discussió, 490 00:19:49,530 --> 00:19:51,370 el curs d'eines de discussió a classe. 491 00:19:51,370 --> 00:19:53,680 Així que vam 40 preguntes que es van formular i 492 00:19:53,680 --> 00:19:54,720 respondre durant la conferència. 493 00:19:54,720 --> 00:19:56,280 Així que sembla que ha funcionat bé, així que seguiré 494 00:19:56,280 --> 00:19:57,180 tractant de fer això. 495 00:19:57,180 --> 00:19:59,600 Si, durant la conferència, no només se senten còmodes fons 496 00:19:59,600 --> 00:20:00,780 la mà, no és un problema. 497 00:20:00,780 --> 00:20:04,640 Anar a cs50.net/discuss, ja allà, i una de les nostres ensenyaments 498 00:20:04,640 --> 00:20:07,270 companys o bé contestar electrònicament o augmentar la seva 499 00:20:07,270 --> 00:20:10,620 mà en nom anònima a demanar, en funció 500 00:20:10,620 --> 00:20:12,470 de la naturalesa de la pregunta. 501 00:20:12,470 --> 00:20:15,000 I en termes d'informació, en general els conjunts de processadors serà 502 00:20:15,000 --> 00:20:16,760 retornat aquí a una setmana. 503 00:20:16,760 --> 00:20:19,080 Com que pren una mica de temps per les seccions d'aconseguir 504 00:20:19,080 --> 00:20:22,430 equilibri, el conjunt de processadors primer, 0 i 1, serà una mica 505 00:20:22,430 --> 00:20:24,130 endarrerit ja que les coses es calmin. 506 00:20:24,130 --> 00:20:27,130 Però estigueu atents perquè en les pròximes setmanes. 507 00:20:27,130 --> 00:20:29,750 >> Molt bé, així que em vaig posar el greu 508 00:20:29,750 --> 00:20:31,040 veu per un moment. 509 00:20:31,040 --> 00:20:32,690 Així que aquest és en realitat un clima interessant per estar 510 00:20:32,690 --> 00:20:35,210 tenint aquesta discussió, el que amb totes les altres coses 511 00:20:35,210 --> 00:20:37,310 passant per la mateixa campus corresponent. 512 00:20:37,310 --> 00:20:40,220 Però CS50 certament ha tingut la seva història d'aquest particular 513 00:20:40,220 --> 00:20:43,360 tema, en tant com tots els anys, aquest curs, per a molts 514 00:20:43,360 --> 00:20:46,910 anys, ad-juntes aproximadament el 3% de la classe. 515 00:20:46,910 --> 00:20:51,620 Aquest últim any, el 2011, CS50 Administració entaulat 35 estudiants. 516 00:20:51,620 --> 00:20:54,120 Això no és, crec, a causa de la falta de claredat. 517 00:20:54,120 --> 00:20:56,760 Adonar-se que en el pla d'estudis del curs, hi ha una pàgina de 518 00:20:56,760 --> 00:20:59,020 declaració explicant que les línies són. 519 00:20:59,020 --> 00:21:01,350 Aquesta mateixa instrucció es repeteix en cadascun dels 520 00:21:01,350 --> 00:21:03,070 butlletins de problemes a la pàgina un. 521 00:21:03,070 --> 00:21:05,760 >> Així que parlar d'això avui realment només per fer 522 00:21:05,760 --> 00:21:07,030 persones conscients d'això. 523 00:21:07,030 --> 00:21:08,080 I hem intentat coses diferents. 524 00:21:08,080 --> 00:21:10,630 I el que jo pensava que anàvem a fer avui consisteix en prendre un moment per 525 00:21:10,630 --> 00:21:13,830 realment es veuen en alguns dels casos passats que han sorgit. 526 00:21:13,830 --> 00:21:16,160 En lloc de mantenir a aquests petits secrets bruts que, en realitat 527 00:21:16,160 --> 00:21:19,170 assenyalar el que han fet i com s'ha detectat 528 00:21:19,170 --> 00:21:21,630 i realment el que la motivació principal és per 529 00:21:21,630 --> 00:21:23,950 tenint aquesta conversa. 530 00:21:23,950 --> 00:21:27,060 Així que dit això, la línia essencialment és això - 531 00:21:27,060 --> 00:21:29,200 pel pla d'estudis, de res, se l'anima a 532 00:21:29,200 --> 00:21:30,210 parlar amb els companys de classe. 533 00:21:30,210 --> 00:21:31,910 Aquest és tot el propòsit de comptar amb aquests col · laboratiu 534 00:21:31,910 --> 00:21:34,470 les hores d'oficina a Annenberg i persones encoratjadores per al 535 00:21:34,470 --> 00:21:35,755 final del projecte per treballar junts. 536 00:21:35,755 --> 00:21:38,590 No obstant això, la línia es dibuixa quan arribi el moment d'escriure realment 537 00:21:38,590 --> 00:21:39,790 seva solució final. 538 00:21:39,790 --> 00:21:42,590 En parlar en anglès, totalment bé, parlant en pseudo-codi, 539 00:21:42,590 --> 00:21:43,400 totalment bé. 540 00:21:43,400 --> 00:21:46,340 Enviament per correu electrònic a un company del seu conjunt de processadors, permetent que es vegin més 541 00:21:46,340 --> 00:21:48,610 la pantalla com les mans segueixen escrivint, 542 00:21:48,610 --> 00:21:50,110 sobre la línia també. 543 00:21:50,110 --> 00:21:52,250 Miri al pla d'estudis de les línies particulars. 544 00:21:52,250 --> 00:21:55,850 >> Però només per pintar una imatge de com això és per desgràcia un 545 00:21:55,850 --> 00:21:58,370 realitat, s'adonen que hi ha llocs web per aquí que 546 00:21:58,370 --> 00:22:01,490 tenen solucions d'aquesta classe i moltes altres classes. 547 00:22:01,490 --> 00:22:04,940 El fet que vostè o un 3% de vostès saben que això existeix 548 00:22:04,940 --> 00:22:07,240 vol dir que sabem que això existeix. 549 00:22:07,240 --> 00:22:09,340 El fet que hi ha llocs com aquest en què 550 00:22:09,340 --> 00:22:11,540 pot pagar a algú per fer realitat els seus butlletins de problemes - es tractava de 551 00:22:11,540 --> 00:22:13,450 un cas real que va ocórrer l'any passat. 552 00:22:13,450 --> 00:22:15,790 Es tracta d'un lloc web anomenat odesk.com. 553 00:22:15,790 --> 00:22:20,090 I Tim era el nom de la persona que estava aquí la publicació en 554 00:22:20,090 --> 00:22:24,580 Aquest lloc web i li va demanar a algú que faci la seva pset 7 a 555 00:22:24,580 --> 00:22:25,570 aquest cas particular. 556 00:22:25,570 --> 00:22:28,350 Bé, és molt odesk.com Google-ble, i estem molt 557 00:22:28,350 --> 00:22:30,310 molt bo en buscar a Google. 558 00:22:30,310 --> 00:22:32,360 Aquí, també, hi ha llocs - i aquest és bastant 559 00:22:32,360 --> 00:22:34,234 atroç, francament. 560 00:22:34,234 --> 00:22:38,050 [Rialles] 561 00:22:38,050 --> 00:22:39,610 DAVID J. Malan: El més graciós d'aquest lloc és que si 562 00:22:39,610 --> 00:22:41,970 llegir la pàgina Sobre, parlen de la seva corporatiu 563 00:22:41,970 --> 00:22:44,390 servei de la cultura i com és el seu client número u 564 00:22:44,390 --> 00:22:46,190 prioritat, per assegurar-se que les seves assignacions obtenir 565 00:22:46,190 --> 00:22:47,890 lliurada a temps. 566 00:22:47,890 --> 00:22:50,580 >> Però de debò, un cop més, el fet que aquests llocs 567 00:22:50,580 --> 00:22:52,910 existeixen, ens adonem, també, són conscients 568 00:22:52,910 --> 00:22:53,730 aquest tipus de llocs. 569 00:22:53,730 --> 00:22:55,890 I per donar-li un sentit al que constitueix per regla general, 570 00:22:55,890 --> 00:22:58,570 presa, en general no tenen grans escàndols on la gent 571 00:22:58,570 --> 00:23:01,080 estan col · laborant en qualsevol tipus de forma massiva, sinó més aviat 572 00:23:01,080 --> 00:23:04,540 és ara nocturns de debilitat, on vostè té per 573 00:23:04,540 --> 00:23:07,550 molt per fer, són les 4:00 AM, estàs esgotat, i 574 00:23:07,550 --> 00:23:09,770 pensa a si mateix, bé, deixa fer una ullada al meu 575 00:23:09,770 --> 00:23:11,770 company de quart o codi del meu amic o similars. 576 00:23:11,770 --> 00:23:14,800 I les manifestacions d'aquesta desgràcia involucrar Estudiant 577 00:23:14,800 --> 00:23:17,640 A la presentació d'alguna cosa com això i presentació de B Estudiant 578 00:23:17,640 --> 00:23:20,370 alguna cosa com això, que per cert, en un ordinador 579 00:23:20,370 --> 00:23:23,830 classe de ciències, és molt fàcil per als científics de la computació 580 00:23:23,830 --> 00:23:25,690 per detectar amb programari. 581 00:23:25,690 --> 00:23:28,410 Aquest és un altre paradigma comú, on vostè té una espècie de 582 00:23:28,410 --> 00:23:31,010 estat treballant al costat d'algú, potser parlant en 583 00:23:31,010 --> 00:23:32,360 Anglès, molt bé, pseudocodi. 584 00:23:32,360 --> 00:23:35,080 Però llavors arriba el moment de presentar efectivament, els conjunts de processadors i 585 00:23:35,080 --> 00:23:37,910 només s'intercanvia a través de correu electrònic o Dropbox o similars. 586 00:23:37,910 --> 00:23:41,120 No obstant això, en un intent de fer que sigui menys evident que aquesta és 587 00:23:41,120 --> 00:23:44,830 el que ha passat, llavors això és el que està sotmès. 588 00:23:44,830 --> 00:23:47,880 Això, també, no es dispara fins ben escrits peces de 589 00:23:47,880 --> 00:23:50,360 programari que tenim per detectar realment 590 00:23:50,360 --> 00:23:51,280 aquest tipus de coses. 591 00:23:51,280 --> 00:23:53,760 I de fet el que fem és un programari de gestió que compara tots 592 00:23:53,760 --> 00:23:55,540 aquest any les presentacions contra tot l'any passat 593 00:23:55,540 --> 00:23:57,380 presentacions, contra tot el que trobem a la 594 00:23:57,380 --> 00:24:00,060 Internet, en contra de tots els llocs web d'ocupació que hi ha. 595 00:24:00,060 --> 00:24:01,710 És tot molt automatitzat. 596 00:24:01,710 --> 00:24:05,665 I així ho fem realment per ser justos gran al 97% que 597 00:24:05,665 --> 00:24:07,760 realment estan treballant fora dels seus ases en aquest i en altres 598 00:24:07,760 --> 00:24:11,530 classes i posant en tot aquest esforç perquè el treball 599 00:24:11,530 --> 00:24:13,030 en última instància, presentar és el seu. 600 00:24:13,030 --> 00:24:14,220 I puc continuar durant molt de temps. 601 00:24:14,220 --> 00:24:16,030 >> Aquests són només un grapat de casos l'any passat. 602 00:24:16,030 --> 00:24:19,350 Alguns estudiants van presentar aquests arxius de forma idèntica per pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, conjunt de processadors 4, 5 pset, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 En aquest cas, aquesta prova era 0 i l'any passat, on dos 605 00:24:26,360 --> 00:24:29,570 estudiants van presentar aquesta frase idèntica entre molts 606 00:24:29,570 --> 00:24:32,210 altres, "La sol · licitud de tipus -" punt, punt, punt. 607 00:24:32,210 --> 00:24:34,530 Així que, fins i tot en una classe de 600 vam detectar aquest 608 00:24:34,530 --> 00:24:36,310 presentat en concursos. 609 00:24:36,310 --> 00:24:39,080 Així que en resum, això - francament, no m'agrada tenir aquest tipus de 610 00:24:39,080 --> 00:24:41,300 conversa - però això és realment un esforç deliberat 611 00:24:41,300 --> 00:24:43,540 aquest any per intentar reduir aquest nombre. 612 00:24:43,540 --> 00:24:45,650 Perquè tot i que diuen aquest tipus de coses cada 613 00:24:45,650 --> 00:24:48,100 any, crec que la realitat d'haver habitat-hi durant uns pocs 614 00:24:48,100 --> 00:24:50,800 segons més del normal i en realitat només assenyalant 615 00:24:50,800 --> 00:24:53,600 que el que pot semblar, eh, no és una gran cosa, si més no 616 00:24:53,600 --> 00:24:56,390 pensin en aquest moment en particular, tant per ser justos amb 617 00:24:56,390 --> 00:25:00,100 tu mateix i dels teus companys de classe aquí. 618 00:25:00,100 --> 00:25:02,480 Així que si alguna vegada té alguna pregunta pel que fa a on la línia 619 00:25:02,480 --> 00:25:04,290 És a dir, si us plau, només arribar a mi personalment. 620 00:25:04,290 --> 00:25:07,190 Però la resposta és sempre, completament estressat al 621 00:25:07,190 --> 00:25:09,090 últim minut, diners en efectiu en un dia de retard. 622 00:25:09,090 --> 00:25:11,080 O si és una qüestió de no tenir dies de retard, 623 00:25:11,080 --> 00:25:12,900 Honestament, correu electrònic personal. 624 00:25:12,900 --> 00:25:14,110 Ja se'ns acudirà alguna cosa. 625 00:25:14,110 --> 00:25:17,480 Si us plau, no posis el teu temps aquí a Harvard en risc. 626 00:25:17,480 --> 00:25:18,570 >> Ara, vaig pensar que hauria alleugerir l'estat d'ànim, de manera que 627 00:25:18,570 --> 00:25:20,264 inclòs això com la següent diapositiva. 628 00:25:20,264 --> 00:25:22,770 [Rialles] 629 00:25:22,770 --> 00:25:23,630 DAVID J. Malan: Aquest lloc web va ser genial. 630 00:25:23,630 --> 00:25:24,820 De fet, em vaig posar una mica distret. 631 00:25:24,820 --> 00:25:26,330 No és aquest. 632 00:25:26,330 --> 00:25:29,590 I aquest era increïble. 633 00:25:29,590 --> 00:25:35,190 Bé, per la qual cosa pensar en gatet tard a la nit quan faci 634 00:25:35,190 --> 00:25:36,040 aquestes decisions. 635 00:25:36,040 --> 00:25:40,110 Totes les coses bé, així que de nou a més diversió i menys greus, com 636 00:25:40,110 --> 00:25:40,780 condicions. 637 00:25:40,780 --> 00:25:43,900 >> Molt bé, així que parlem breument sobre aquests. 638 00:25:43,900 --> 00:25:46,080 Això és una cosa que probablement és bastant familiar de 639 00:25:46,080 --> 00:25:47,260 el món de Scratch. 640 00:25:47,260 --> 00:25:49,860 I en el món de Scratch, tenim aquesta necessitat de vegades per 641 00:25:49,860 --> 00:25:51,110 anar a fer bifurcacions en el camí. 642 00:25:51,110 --> 00:25:54,840 Qualsevol de fer això o allò o això altre aquí. 643 00:25:54,840 --> 00:25:58,990 I quan volem fer això, podem usar, al carrer ara, si aquesta 644 00:25:58,990 --> 00:26:00,860 else. 645 00:26:00,860 --> 00:26:06,420 I llavors aquí tenim booleana. 646 00:26:06,420 --> 00:26:09,260 Per exemple, les expressions booleanes aquí, podem OR 647 00:26:09,260 --> 00:26:12,260 junts, en el sentit que tenim aquesta condició OR 648 00:26:12,260 --> 00:26:13,200 aquesta condició. 649 00:26:13,200 --> 00:26:15,100 Podem i junts, en el sentit que volem 650 00:26:15,100 --> 00:26:17,710 comprovar aquesta condició i sempre que. 651 00:26:17,710 --> 00:26:22,440 I aquí tenim una sentència switch, cosa que no és tan 652 00:26:22,440 --> 00:26:26,040 sintàcticament similars a aquest tipus de condicions, però 653 00:26:26,040 --> 00:26:30,160 ens permet fer l'equivalent a if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 si, i similars amb només enumerar cas per cas 655 00:26:34,990 --> 00:26:36,670 per cas per cas. 656 00:26:36,670 --> 00:26:38,370 Així que vam veure aquells última vegada. 657 00:26:38,370 --> 00:26:40,430 I llavors vam començar a tocar en coses com bucles. 658 00:26:40,430 --> 00:26:42,070 Vam veure una d'elles fa un moment. 659 00:26:42,070 --> 00:26:44,180 Però no són aquestes construccions de bucles altres. 660 00:26:44,180 --> 00:26:46,370 >> Per exemple, aquest d'aquí. 661 00:26:46,370 --> 00:26:50,140 Així while (condició), fer això una i altra vegada. 662 00:26:50,140 --> 00:26:53,070 Així que bàsicament, el que sembla ser diferent entre aquest 663 00:26:53,070 --> 00:26:55,760 bucle for i el bucle mentre aquí? 664 00:27:00,810 --> 00:27:05,045 Aquest bucle for i aquest bucle while. 665 00:27:05,045 --> 00:27:07,840 Sí? 666 00:27:07,840 --> 00:27:08,800 Què és això? 667 00:27:08,800 --> 00:27:10,050 AUDIÈNCIA: [inaudible]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. Malan: Good. 669 00:27:15,120 --> 00:27:17,130 Així, mentre que en la condició de bucle, hi ha clarament 670 00:27:17,130 --> 00:27:17,940 més sintaxi. 671 00:27:17,940 --> 00:27:20,560 Hi ha una inicialització, hi ha una actualització. 672 00:27:20,560 --> 00:27:23,820 En un bucle while, no només per aquesta condició. 673 00:27:23,820 --> 00:27:26,630 Així que sembla que és una mica retallada contra el d' 674 00:27:26,630 --> 00:27:28,770 bucle, el que significa que si volem tenir variables i volem 675 00:27:28,770 --> 00:27:30,800 tenir increment, en realitat hem de 676 00:27:30,800 --> 00:27:32,500 fer això nosaltres mateixos. 677 00:27:32,500 --> 00:27:34,420 >> Així que permetin-me seguir endavant i obrir gedit. 678 00:27:34,420 --> 00:27:36,320 Permetin-me canviar l'aparell. 679 00:27:36,320 --> 00:27:38,110 I farem un exemple petit programa que 680 00:27:38,110 --> 00:27:40,550 distingeix una d'elles de l'altra. 681 00:27:40,550 --> 00:27:42,490 I en el fons de la meva ment aquí, he de dir una cosa. 682 00:27:42,490 --> 00:27:44,120 Jo específicament esmentar el nom Tim. 683 00:27:44,120 --> 00:27:47,740 Tim era en realitat algú que un estudiant va tractar de trobar per fer 684 00:27:47,740 --> 00:27:48,680 seva tasca per a ells. 685 00:27:48,680 --> 00:27:51,280 No teníem Tim en aquesta secció en particular. 686 00:27:51,280 --> 00:27:53,690 Així donen compte, no sigui que jo va revelar un estudiant, no era un estudiant. 687 00:27:53,690 --> 00:27:55,720 Era una persona a l'atzar a Internet fent coses 688 00:27:55,720 --> 00:27:57,180 per l'any passat proxy. 689 00:27:57,180 --> 00:27:58,670 Així ens trobem que, també. 690 00:27:58,670 --> 00:28:00,630 Així que en aquest cas aquí, deixa seguir endavant i 691 00:28:00,630 --> 00:28:02,810 obrir un nou arxiu. 692 00:28:02,810 --> 00:28:04,800 Arxiu, Nou. 693 00:28:04,800 --> 00:28:06,050 Això em dóna una fitxa d'aquí. 694 00:28:06,050 --> 00:28:09,940 Deixin-me seguir endavant i guardar-lo com loop.c. 695 00:28:09,940 --> 00:28:11,810 Deixa anar i feu clic a Desa. 696 00:28:11,810 --> 00:28:15,340 I després aquí, seguirem endavant i començar a escriure 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Permetin-me zoom in 699 00:28:20,520 --> 00:28:23,410 Ara farem int main (void). 700 00:28:23,410 --> 00:28:30,020 Ara vaig a seguir endavant i fer for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 I ara vaig a seguir endavant i s'imprimeixen de l'estrella que em 703 00:28:36,620 --> 00:28:37,890 vam fer abans. 704 00:28:37,890 --> 00:28:39,390 I després, al final d'aquest programa, només anem a 705 00:28:39,390 --> 00:28:41,130 imprimir una nova línia, només perquè el meu missatge 706 00:28:41,130 --> 00:28:42,470 no es veu tot desordenat. 707 00:28:42,470 --> 00:28:45,170 retorna 0. 708 00:28:45,170 --> 00:28:47,610 Sembla sintàcticament correcta? 709 00:28:47,610 --> 00:28:48,040 Fins ara. 710 00:28:48,040 --> 00:28:48,560 Així que anem a veure. 711 00:28:48,560 --> 00:28:51,290 >> Així que permetin-me allunyar la imatge, entra a la meva finestra de terminal. 712 00:28:51,290 --> 00:28:54,570 I m'ho dius a mi seguir endavant i executar bucle, perquè em va cridar aquesta 713 00:28:54,570 --> 00:28:55,690 El loop.c. 714 00:28:55,690 --> 00:28:56,780 Així que loop. 715 00:28:56,780 --> 00:28:57,840 Sembla que compili a D'acord. 716 00:28:57,840 --> 00:29:00,210 Deixa córrer bucle, i Enter ara. 717 00:29:00,210 --> 00:29:01,820 I sembla que s'han imprès 10 estrelles. 718 00:29:01,820 --> 00:29:03,780 Així que anem a convertir això en un bucle de temps i veure què 719 00:29:03,780 --> 00:29:05,220 tipus de qüestions que ensopegar. 720 00:29:05,220 --> 00:29:11,290 Així que en lloc d'això, deixa entrar aquí i dir mentre que i és 721 00:29:11,290 --> 00:29:12,760 menys de 10 - 722 00:29:12,760 --> 00:29:14,910 em deixa estirar el bucle for. 723 00:29:14,910 --> 00:29:17,170 OK, així que tenim un parell de problemes ja. 724 00:29:17,170 --> 00:29:21,110 Així que l'estat és el mateix, però òbviament estic perdent la 725 00:29:21,110 --> 00:29:21,680 inicialització. 726 00:29:21,680 --> 00:29:23,840 Em falta l'increment. 727 00:29:23,840 --> 00:29:28,020 Llavors, què hauria el compilador probablement em dirà quan tracte de 728 00:29:28,020 --> 00:29:29,170 compilar aquest programa? 729 00:29:29,170 --> 00:29:29,666 Sí? 730 00:29:29,666 --> 00:29:31,154 AUDIÈNCIA: [inaudible]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. Malan: Good. 732 00:29:31,650 --> 00:29:34,180 Així que va a dir alguna cosa així com no declarat - en aquest 733 00:29:34,180 --> 00:29:35,280 cas, la variable i. 734 00:29:35,280 --> 00:29:37,980 I de fet, l'ús d'identificador no declarat i. 735 00:29:37,980 --> 00:29:40,960 I això està en contrast amb llenguatges com PHP i 736 00:29:40,960 --> 00:29:43,120 Python i Ruby, amb la qual alguns de vostès podrien estar familiaritzats, 737 00:29:43,120 --> 00:29:44,820 on es pot sol tipus d'inici amb les variables 738 00:29:44,820 --> 00:29:47,420 vulguem o no, no s'ha de preocupar de declarar 739 00:29:47,420 --> 00:29:48,560 sempre explícitament. 740 00:29:48,560 --> 00:29:51,770 En C i en llenguatges com Java i C + +, ha de ser 741 00:29:51,770 --> 00:29:53,020 súper explícit. 742 00:29:53,020 --> 00:29:55,760 I si vols una variable anomenada i, el que has de dir-me 743 00:29:55,760 --> 00:29:57,360 Quin tipus de variable que és. 744 00:29:57,360 --> 00:29:59,360 Així que haurem d'arreglar això de la següent manera. 745 00:29:59,360 --> 00:30:05,510 Vaig a haver d'anar per aquí i escriviu int i, per tant, 746 00:30:05,510 --> 00:30:07,860 He declarat una variable anomenada i. 747 00:30:07,860 --> 00:30:09,180 Ara, m'he saltat un pas. 748 00:30:09,180 --> 00:30:11,340 He òbviament no s'inicia, però anem a veure si en aquest 749 00:30:11,340 --> 00:30:13,650 al límit Clang marques queixar. 750 00:30:13,650 --> 00:30:15,770 Així que permetin-me refer aquest programa. 751 00:30:15,770 --> 00:30:16,770 >> Molt bé, ara és només queixar 752 00:30:16,770 --> 00:30:17,870 per una raó diferent. 753 00:30:17,870 --> 00:30:21,130 "La variable 'i' no està inicialitzada quan s'usa aquí". Molt bé, així 754 00:30:21,130 --> 00:30:22,340 això és bastant explícit. 755 00:30:22,340 --> 00:30:25,510 Inicialitzat només significa igualant a un valor. 756 00:30:25,510 --> 00:30:30,820 I no ho he fet, així que tractaré d'igual a 0. 757 00:30:30,820 --> 00:30:35,030 Ara ho intentarem de nou i tornar a executar Clang. 758 00:30:35,030 --> 00:30:36,140 Compilat aquest moment. 759 00:30:36,140 --> 00:30:37,210 I estic a punt d'executar-. 760 00:30:37,210 --> 00:30:43,120 Però gran bucle infinit d'edat, perquè he fet el 761 00:30:43,120 --> 00:30:45,530 inicialització, he fet la condició, però mai he fet 762 00:30:45,530 --> 00:30:47,030 qualsevol tipus d'increment. 763 00:30:47,030 --> 00:30:48,780 Llavors, com puc fer la incrementación? 764 00:30:48,780 --> 00:30:51,170 Bé, en un bucle while, se sent com que tindré 765 00:30:51,170 --> 00:30:54,180 fer dins el bucle, perquè de la mateixa manera que el primer 766 00:30:54,180 --> 00:30:56,570 setmana exemples de fer les construccions de bucles, com amb 767 00:30:56,570 --> 00:30:59,040 els mitjons i amb l'auto-escrutini, que havíem de fer 768 00:30:59,040 --> 00:31:01,550 cosa que al final, com anar a la línia següent. 769 00:31:01,550 --> 00:31:05,040 Què passa si segueixo endavant i fer això i + + aquí? 770 00:31:05,040 --> 00:31:06,030 Anem a compilar ni tan sols això. 771 00:31:06,030 --> 00:31:06,890 Atrápame ja. 772 00:31:06,890 --> 00:31:09,704 Què passa aquí? 773 00:31:09,704 --> 00:31:10,690 AUDIÈNCIA: [inaudible]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. Malan: Així que definitivament no és int. 775 00:31:11,770 --> 00:31:13,080 Sóc jo. 776 00:31:13,080 --> 00:31:15,110 I les claus, com abans, 777 00:31:15,110 --> 00:31:16,800 sagnia no és suficient. 778 00:31:16,800 --> 00:31:18,410 Així que ara tinc aquesta construcció. 779 00:31:18,410 --> 00:31:21,780 Així, mentre que i és menor que 10, imprimiu una estrella, 780 00:31:21,780 --> 00:31:23,220 llavors em incrementar. 781 00:31:23,220 --> 00:31:25,680 I la manera com un bucle mentre que les obres és que tan aviat com es prem el 782 00:31:25,680 --> 00:31:29,630 part inferior del bucle, que en aquest cas es veu com la línia 10, 783 00:31:29,630 --> 00:31:32,880 que tornarà a la línia 6, en el qual el 784 00:31:32,880 --> 00:31:34,400 se li examinarà de nou. 785 00:31:34,400 --> 00:31:37,500 I si i és encara inferior a 10, farem les línies 8 i 786 00:31:37,500 --> 00:31:41,250 després 9, llavors arribarem a 10, i tornar a 6, una i altra 787 00:31:41,250 --> 00:31:45,580 una i altra vegada i una altra, sempre que i és menor que 10. 788 00:31:45,580 --> 00:31:47,860 Així que anem a tornar a fer fer aquí. 789 00:31:47,860 --> 00:31:48,940 >> Bé, hem compilat bé. 790 00:31:48,940 --> 00:31:50,300 Permetin-me tornar a executar el bucle. 791 00:31:50,300 --> 00:31:52,620 I ara el que realment sembla que funciona. 792 00:31:52,620 --> 00:31:55,100 Així que més i menys aquí? 793 00:31:55,100 --> 00:31:58,910 Bé, fins ara no hi ha en realitat un conjunt de plom - 794 00:31:58,910 --> 00:31:59,420 tan bonic. 795 00:31:59,420 --> 00:32:01,870 Bé, això va ser un - ah, això va ser un accident. 796 00:32:01,870 --> 00:32:05,200 Molt bé, així que anem a anar de nou al bucle for. 797 00:32:05,200 --> 00:32:07,530 Així que per als bucles són agradables perquè són súper explícit. 798 00:32:07,530 --> 00:32:09,720 I encara que són una mica maldestre per escriure, és 799 00:32:09,720 --> 00:32:11,500 molt potent i li permet fer 800 00:32:11,500 --> 00:32:12,980 diverses coses alhora. 801 00:32:12,980 --> 00:32:16,240 Mentre que els bucles no semblen tenir una gran quantitat de valor just 802 00:32:16,240 --> 00:32:18,500 però, pel fet que se sent sol hem de fer més feina. 803 00:32:18,500 --> 00:32:20,670 Hem de posar la inicialització fins aquí, la 804 00:32:20,670 --> 00:32:23,480 Actualitza aquí, i hem de recordar de fer tot això. 805 00:32:23,480 --> 00:32:26,260 Així que anem a veure en el temps que en realitat presten cicles while 806 00:32:26,260 --> 00:32:29,380 només a si mateixos diferents contextos, diferents dades 807 00:32:29,380 --> 00:32:33,900 estructures com llistes i taules hash, ho anem a arribar a 808 00:32:33,900 --> 00:32:34,970 meitat del semestre. 809 00:32:34,970 --> 00:32:37,900 Però per ara, sabem que hi ha aquest tercer tipus conegut com un document 810 00:32:37,900 --> 00:32:38,480 while. 811 00:32:38,480 --> 00:32:39,540 I hem vist breument. 812 00:32:39,540 --> 00:32:41,830 I això podria ser útil amb súper conjunt de processadors 1. 813 00:32:41,830 --> 00:32:45,570 Cada vegada que vols fer alguna cosa i després comprovar si 814 00:32:45,570 --> 00:32:48,940 l'usuari cooperar, i si no ho feien, ho tornaria a fer, un fer- 815 00:32:48,940 --> 00:32:51,460 mentre que el llaç es presta a aquest tipus de lògica. 816 00:32:51,460 --> 00:32:55,640 Com que l'ordre de dalt a baix aquí suggereix, 817 00:32:55,640 --> 00:32:57,750 Què significa literalment fer això. 818 00:32:57,750 --> 00:32:59,830 I fer això una i altra vegada, què podria ser? 819 00:32:59,830 --> 00:33:03,000 Potser signifiqui getInt trucant o GetString i després 820 00:33:03,000 --> 00:33:05,830 comprovant el valor de getInt o GetString i després cridar 821 00:33:05,830 --> 00:33:08,260 l'usuari si no han cooperat al demanar-los que 822 00:33:08,260 --> 00:33:10,100 una i altra vegada i una altra. 823 00:33:10,100 --> 00:33:11,730 Si vostè vol fer alguna cosa una vegada, 824 00:33:11,730 --> 00:33:13,210 a continuació, comproveu alguna condició. 825 00:33:13,210 --> 00:33:14,110 >> Així que anem a provar això. 826 00:33:14,110 --> 00:33:17,130 Permetin-me canviar aquesta realitat ara a un bucle do-while. 827 00:33:17,130 --> 00:33:18,830 I seguiré endavant i fer el següent. 828 00:33:18,830 --> 00:33:21,830 Així que faci el següent. 829 00:33:21,830 --> 00:33:26,870 Farem int i = getInt (), però primer anem a dir-li a l'usuari 830 00:33:26,870 --> 00:33:27,410 què fer. 831 00:33:27,410 --> 00:33:29,050 Així que una mica diferent aquesta vegada. 832 00:33:29,050 --> 00:33:31,270 "Dóna'm un int". 833 00:33:31,270 --> 00:33:32,910 Així que vaig a utilitzar printf per això. 834 00:33:32,910 --> 00:33:35,740 I ara em vaig a anar per aquí, i vaig a fer això 835 00:33:35,740 --> 00:33:41,520 mentre que i és, diguem, més gran que - 836 00:33:41,520 --> 00:33:47,540 veurem, i és, diguem, menys de 0, o és i 837 00:33:47,540 --> 00:33:48,730 més gran que 10. 838 00:33:48,730 --> 00:33:51,810 En altres paraules, vull els números 1 al 9, només 839 00:33:51,810 --> 00:33:52,720 arbitràriament. 840 00:33:52,720 --> 00:33:55,290 Així que estic utilitzant una expressió booleana combinada per 841 00:33:55,290 --> 00:33:59,930 assegurar-se que i és menor que 0 o més gran que 10, en la qual 842 00:33:59,930 --> 00:34:02,530 cas faré aquest bucle aquí de nou. 843 00:34:02,530 --> 00:34:04,400 Així que de nou, fer això - 844 00:34:04,400 --> 00:34:08,480 mentre que i és menor que 0 o i és més gran que 10. 845 00:34:08,480 --> 00:34:11,440 >> Així que ara seguirem endavant i fer això-les després fet això. 846 00:34:11,440 --> 00:34:13,270 Anem a fer una simple comprovació ràpida. 847 00:34:13,270 --> 00:34:18,929 printf ("Gràcies, i és% d", i). 848 00:34:18,929 --> 00:34:21,350 Així que aquest senzill programa demana a l'usuari un int, 849 00:34:21,350 --> 00:34:24,000 s'assegura que està dins d'un rang de l'1 al 9 inclosos, 850 00:34:24,000 --> 00:34:26,280 i agraeix a l'usuari, recordant el que acaben de 851 00:34:26,280 --> 00:34:27,940 escriure, així com una prova de seny poc. 852 00:34:27,940 --> 00:34:30,659 Però anem a veure si això funciona segons el previst. 853 00:34:30,659 --> 00:34:34,533 Deixa anar al capdavant aquí i tornar a executar make bucle. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "L'ús d'identificador no declarat 'i'". Això és estrany. 856 00:34:38,600 --> 00:34:41,509 Vaig pensar que resoldre això. 857 00:34:45,489 --> 00:34:47,560 Símptoma Mateix codi diferent. 858 00:34:47,560 --> 00:34:47,899 Sí? 859 00:34:47,899 --> 00:34:50,191 AUDIÈNCIA: [inaudible] a l'interior dels dos, hem de 860 00:34:50,191 --> 00:34:52,639 [Inaudible]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. Malan: Exactament. 862 00:34:53,260 --> 00:34:55,989 Així que aquest fet ens porta a un tema conegut com a àmbit d'aplicació. 863 00:34:55,989 --> 00:34:59,350 Resulta que C, un cop més, el que realment et porta literalment. 864 00:34:59,350 --> 00:35:02,970 I si fas alguna cosa com això on es declara un int 865 00:35:02,970 --> 00:35:06,120 i després assignar algun valor, però ho fa dins d'un 866 00:35:06,120 --> 00:35:09,840 parell de claus, el que C fa és que se suposa que 867 00:35:09,840 --> 00:35:14,800 només volen que aquests 32 bits conegut com i d'existir dins de la 868 00:35:14,800 --> 00:35:18,200 context d'aquestes claus, en el context de línies 869 00:35:18,200 --> 00:35:22,420 6 a 9. Així que es declara, i s'assigna un 870 00:35:22,420 --> 00:35:26,530 valor en la línia 8, però quan et donen fora de 871 00:35:26,530 --> 00:35:30,270 línia 9 per sota de la clau de tancament, i ja no està en 872 00:35:30,270 --> 00:35:31,910 àmbit d'aplicació, per dir-ho. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-I. Ja no és en el context adequat. 874 00:35:35,030 --> 00:35:37,940 Així que ara no hi ha una i, així que és com si no tinguéssim fins i tot 875 00:35:37,940 --> 00:35:38,770 declarar en absolut. 876 00:35:38,770 --> 00:35:41,520 >> Llavors, què és llavors una solució per a alguna cosa com això, si el 877 00:35:41,520 --> 00:35:44,300 raó és que es declara dins de les claus, que 878 00:35:44,300 --> 00:35:45,120 aparentment és dolent? 879 00:35:45,120 --> 00:35:45,410 Heus aquí? 880 00:35:45,410 --> 00:35:46,820 AUDIÈNCIA: [inaudible]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. Malan: Si. 882 00:35:47,150 --> 00:35:48,710 Així que podem inicialitzar exterior. 883 00:35:48,710 --> 00:35:53,530 Així que permetin-me seguir endavant i eliminar les parts de declaració mitjançant el qual 884 00:35:53,530 --> 00:35:55,820 Puc especificar el tipus, i dóna'm fer-ho aquí. 885 00:35:55,820 --> 00:36:00,220 Així, en la línia 5, que ara diu "Dóna'm un int." Llámelo i. 886 00:36:00,220 --> 00:36:03,400 Observeu que a la línia 9, que no vull fer això, perquè jo 887 00:36:03,400 --> 00:36:04,830 ja té els 32 bits. 888 00:36:04,830 --> 00:36:06,140 No vull demanar a l'ordinador per un 889 00:36:06,140 --> 00:36:07,630 diferents bits de 32. 890 00:36:07,630 --> 00:36:09,850 Vull utilitzar aquests mateixos 32 bits. 891 00:36:09,850 --> 00:36:13,190 I ara perquè m'està declarada a la línia 5, segueix sent legítim 892 00:36:13,190 --> 00:36:16,550 per usar-lo en la línia 11 i la línia 12. 893 00:36:16,550 --> 00:36:19,310 >> Així que tractaré de tornar a compilar això i veure 894 00:36:19,310 --> 00:36:20,490 Clang si deixa de cridar. 895 00:36:20,490 --> 00:36:22,380 fer llaç. 896 00:36:22,380 --> 00:36:25,470 Així que ara és "la declaració implícita de la funció 897 00:36:25,470 --> 00:36:29,880 'GetInt' no és vàlid en C99. "Què és això? 898 00:36:29,880 --> 00:36:30,400 Sí? 899 00:36:30,400 --> 00:36:32,330 AUDIÈNCIA: [inaudible]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. Malan: Si. 901 00:36:32,690 --> 00:36:35,520 Així que ara que estic realment utilitzant getInt, això no és una cosa 902 00:36:35,520 --> 00:36:38,190 que només ve amb C. Això ve de CS50. 903 00:36:38,190 --> 00:36:39,890 Així que tenim això aquí. 904 00:36:39,890 --> 00:36:41,450 I permetin-me tornar al prompt baix 905 00:36:41,450 --> 00:36:43,500 aquí i tornar a executar make. 906 00:36:43,500 --> 00:36:44,160 Bé, per fi. 907 00:36:44,160 --> 00:36:46,270 Ara que hem resolt això i l'altre error. 908 00:36:46,270 --> 00:36:48,930 Permetin-me ara s'executen bucle i veure què passa. 909 00:36:48,930 --> 00:36:51,740 "Dóna'm un int." Vaig a donar-li 11. 910 00:36:51,740 --> 00:36:53,100 Vaig a donar-li -1. 911 00:36:53,100 --> 00:36:54,470 Vaig a donar-li foo. 912 00:36:54,470 --> 00:36:56,080 Vaig a donar-li 5. 913 00:36:56,080 --> 00:36:57,450 I ara és en realitat funciona. 914 00:36:57,450 --> 00:36:59,410 No obstant això, l'indicador canvia per una raó aquí. 915 00:36:59,410 --> 00:37:02,800 Per què ho dius reintentar d'aquestes vegades, però em dóna un 916 00:37:02,800 --> 00:37:03,920 int les altres tres vegades? 917 00:37:03,920 --> 00:37:05,500 Per què és que el comportament diferent? 918 00:37:05,500 --> 00:37:06,980 AUDIÈNCIA: va donar una cadena. 919 00:37:06,980 --> 00:37:07,830 DAVID J. Malan: Com? 920 00:37:07,830 --> 00:37:08,570 AUDIÈNCIA: Vostè li va donar una cadena. 921 00:37:08,570 --> 00:37:08,990 DAVID J. Malan: Si. 922 00:37:08,990 --> 00:37:11,450 Així que li va donar una cadena en aquest tercer intent, 923 00:37:11,450 --> 00:37:12,490 quan vaig escriure foo. 924 00:37:12,490 --> 00:37:13,200 Foo és una cadena. 925 00:37:13,200 --> 00:37:14,340 Òbviament no és un int. 926 00:37:14,340 --> 00:37:17,500 I la manera com CS50 ha implementat getint és que ens 927 00:37:17,500 --> 00:37:20,330 no comprovar si alguna cosa és menor que 0 o major que 10 928 00:37:20,330 --> 00:37:22,260 per a tu, perquè com podem saber per endavant quin tipus de 929 00:37:22,260 --> 00:37:23,130 int vols? 930 00:37:23,130 --> 00:37:25,880 Però mínimament pugui comprovar per vostè, ¿l'usuari com a mínim 931 00:37:25,880 --> 00:37:26,730 escriviu un nombre enter? 932 00:37:26,730 --> 00:37:30,500 I si no ho feien, els cridem a l'usuari escrivint "reintentar" a la 933 00:37:30,500 --> 00:37:31,440 la pantalla. 934 00:37:31,440 --> 00:37:34,210 >> Així que ara tenim un programa que està bucle. Bé. 935 00:37:34,210 --> 00:37:37,070 Ara, quin d'ells és el tipus de la construcció millor? 936 00:37:37,070 --> 00:37:39,060 Així que aquí és on les coses es posen una mica desordenat, la 937 00:37:39,060 --> 00:37:42,360 fet que vostè ha de recordar per declarar una variable aquí 938 00:37:42,360 --> 00:37:44,630 si vols usar-lo dins d'alguns 939 00:37:44,630 --> 00:37:46,460 claus i exteriors. 940 00:37:46,460 --> 00:37:48,490 Però fins i tot si això li sembla una mica críptic al principi 941 00:37:48,490 --> 00:37:50,750 mirada, només una vegada més, recordar la lògica simple. 942 00:37:50,750 --> 00:37:54,630 Per tal d'utilitzar res en C, si es tracta d'una funció o 943 00:37:54,630 --> 00:37:57,680 que és una variable, cal incloure si es tracta d'una funció 944 00:37:57,680 --> 00:37:59,770 en alguna biblioteca, o vostè ha de declarar. 945 00:37:59,770 --> 00:38:02,405 Però ara cal tenir en compte el fet addicional que 946 00:38:02,405 --> 00:38:04,940 vostè ho està declarant en l'abast adequat. 947 00:38:04,940 --> 00:38:08,150 No ho estàs posant massa força a l'interior dels parèntesis. 948 00:38:08,150 --> 00:38:09,410 >> Així que permetin-me en realitat revertir. 949 00:38:09,410 --> 00:38:12,660 Si tornem al nostre per exemple d'abans, i em vaig 950 00:38:12,660 --> 00:38:19,245 per tornar a int, int i = 0; i <10, i + +, i jo 951 00:38:19,245 --> 00:38:26,370 printf fer estrelles, com aquest, i després parin prop i ara 952 00:38:26,370 --> 00:38:30,410 printf i és ara - 953 00:38:30,410 --> 00:38:33,500 d'acord amb la mateixa lògica, què passarà quan tracte de 954 00:38:33,500 --> 00:38:35,500 compilar aquest programa? 955 00:38:35,500 --> 00:38:36,790 AUDIÈNCIA: identificador no vàlid. 956 00:38:36,790 --> 00:38:38,560 DAVID J. Malan: Així que és un altre identificador no vàlid, 957 00:38:38,560 --> 00:38:39,470 identificador no declarat. 958 00:38:39,470 --> 00:38:41,810 Ara, la raó és una mica diferent. 959 00:38:41,810 --> 00:38:44,370 Òbviament hi ha ni claus aquí, però el mateix 960 00:38:44,370 --> 00:38:46,790 idea, la mateixa història d'abast s'aplica. 961 00:38:46,790 --> 00:38:50,340 Si vostè s'ha declarat una variable com jo dins d'un 962 00:38:50,340 --> 00:38:53,960 bucle for, encara que no s'ha escrit explícitament l'arrissat 963 00:38:53,960 --> 00:38:56,980 tirants, pensa en ells com mentalment encara ser-hi, en el qual 964 00:38:56,980 --> 00:39:00,310 cas i és vàlid només dins del bucle for. 965 00:39:00,310 --> 00:39:03,080 No s'admet la vegada que arribi a la línia següent, que al seu 966 00:39:03,080 --> 00:39:05,090 aquest cas és ara 10. 967 00:39:05,090 --> 00:39:09,060 Així que només unes poques qüestions d'abast i similars. 968 00:39:09,060 --> 00:39:12,620 Molt bé, alguna pregunta? 969 00:39:12,620 --> 00:39:15,310 >> Molt bé, així que això és una espècie d'un petit programa trivial, 970 00:39:15,310 --> 00:39:17,450 imprimir només les estrelles petites. 971 00:39:17,450 --> 00:39:20,400 Però anem a veure si et recordes d'aquesta cançó aquí. 972 00:39:20,400 --> 00:39:22,530 Aquesta és una cançó increïblement molest als nens a cantar en 973 00:39:22,530 --> 00:39:23,550 l'autobús escolar i similars. 974 00:39:23,550 --> 00:39:25,990 Però el bo d'això és que té aquesta ciclicitat, 975 00:39:25,990 --> 00:39:27,910 pel que és "99 ampolles de cervesa a la paret, 976 00:39:27,910 --> 00:39:28,520 99 ampolles de cervesa. 977 00:39:28,520 --> 00:39:31,030 Prengui un a baix, passi al seu voltant, 98 ampolles de cervesa a la 978 00:39:31,030 --> 00:39:34,330 paret. "I llavors la cançó es repeteix el 97, després 96, després 979 00:39:34,330 --> 00:39:38,040 95, 94, fins arribar a 0 si vostè realment ha de 980 00:39:38,040 --> 00:39:38,920 lluny a l'autobús. 981 00:39:38,920 --> 00:39:41,960 Així que aquest és un bon programa per ordenar de implement, perquè el meu 982 00:39:41,960 --> 00:39:43,650 Déu, si pogués implementar això amb uns pocs 983 00:39:43,650 --> 00:39:46,660 línies de codi, es pot escopir les lletres senceres a aquest 984 00:39:46,660 --> 00:39:48,240 cançó amb bastant rapidesa. 985 00:39:48,240 --> 00:39:50,420 Però en el camí, podem començar a molestar ara, a part alguns 986 00:39:50,420 --> 00:39:52,460 d'aquestes construccions bàsiques de bucle i també ara 987 00:39:52,460 --> 00:39:55,830 introduir funcions que ens escriuen, tornar valors 988 00:39:55,830 --> 00:39:57,020 que passa al seu voltant. 989 00:39:57,020 --> 00:39:58,910 Però primer, per què no seguir endavant i prendre el nostre cinc minuts 990 00:39:58,910 --> 00:39:59,320 trencar aquí? 991 00:39:59,320 --> 00:40:01,480 I quan tornem, anem a cantar aquesta cançó. 992 00:40:05,680 --> 00:40:08,760 >> D'acord, estem de tornada. 993 00:40:08,760 --> 00:40:11,850 I quan dic que ara cantarem aquesta cançó, em refereixo a 994 00:40:11,850 --> 00:40:13,250 programació, no verbalment. 995 00:40:13,250 --> 00:40:19,370 Així que aquí tenim beer1.c, que és una aplicació d'aquesta 996 00:40:19,370 --> 00:40:20,580 cançó en particular. 997 00:40:20,580 --> 00:40:23,110 I només perquè quedi clar, per als que no estan familiaritzats amb el que 998 00:40:23,110 --> 00:40:24,460 això s'assembla, deixa anar per davant 999 00:40:24,460 --> 00:40:27,070 i fer beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Ara vaig a córrer beer1, i el que anem a veure - Quantes ampolles 1001 00:40:30,400 --> 00:40:31,140 de cervesa haurà? 1002 00:40:31,140 --> 00:40:33,240 Vaig a escriure en el 99, com diu la cançó. 1003 00:40:33,240 --> 00:40:34,040 Retorn. 1004 00:40:34,040 --> 00:40:35,650 I ara, si ens desplacem a través de - 1005 00:40:35,650 --> 00:40:38,280 oops - si desplaçar a través de tot això, veurem que 1006 00:40:38,280 --> 00:40:41,350 això efectivament cantar tota la cançó. 1007 00:40:44,050 --> 00:40:44,540 Espera un minut. 1008 00:40:44,540 --> 00:40:46,240 La meva barra de desplaçament és una mica desordenat. 1009 00:40:46,240 --> 00:40:47,940 Anem a fer servir la finestra més gran. 1010 00:40:47,940 --> 00:40:53,500 Així beer1, 99, aquí anem. 1011 00:40:53,500 --> 00:40:56,420 Així que aquí tenim tota la cançó, cantada molt més ràpid mitjançant la 1012 00:40:56,420 --> 00:40:58,450 ordinador del que podria haver estat per nosaltres. 1013 00:40:58,450 --> 00:41:00,340 Així notar, però, la naturalesa cíclica aquí. 1014 00:41:00,340 --> 00:41:03,380 Diu 99, després 99, després "prendre un a baix, passar 1015 00:41:03,380 --> 00:41:04,740 voltant ", llavors 98. 1016 00:41:04,740 --> 00:41:06,640 I ara ho repeteix una i altra vegada. 1017 00:41:06,640 --> 00:41:08,840 >> Així que això és realment una oportunitat perfecta per algun tipus de 1018 00:41:08,840 --> 00:41:10,400 construir un bucle. 1019 00:41:10,400 --> 00:41:12,950 Recordeu que jo sóc una mena de tall d'una cantonada aquí. 1020 00:41:12,950 --> 00:41:15,960 Tingueu en compte que el que estic dient "98 ampolles de cervesa a la paret, 1021 00:41:15,960 --> 00:41:19,010 97 ampolles de cervesa a la paret ", i que era tan 1022 00:41:19,010 --> 00:41:21,640 que quan arribem a una ampolla de cervesa, no tinc 1023 00:41:21,640 --> 00:41:23,300 de preocupar de la gramàtica Anglès. 1024 00:41:23,300 --> 00:41:25,790 Però també podem arreglar això amb una mica més d'un si 1025 00:41:25,790 --> 00:41:26,910 condició, potser. 1026 00:41:26,910 --> 00:41:30,110 Si aquest nombre és singular, seguir endavant i dir "ampolla", 1027 00:41:30,110 --> 00:41:31,840 en cas contrari si és plural, per exemple "ampolles". 1028 00:41:31,840 --> 00:41:34,150 Però, per ara, estic completament de tall de la cantonada. 1029 00:41:34,150 --> 00:41:35,520 Així que anem a veure el que tenim aquí. 1030 00:41:35,520 --> 00:41:37,150 Així que tenim alguns comentaris a la part superior. 1031 00:41:37,150 --> 00:41:39,450 Estic incloent aquestes dues biblioteques, 1032 00:41:39,450 --> 00:41:41,140 hem estat comunament. 1033 00:41:41,140 --> 00:41:43,610 I ara em baixi fins a la primera 1034 00:41:43,610 --> 00:41:44,990 pròpies línies de codi. 1035 00:41:44,990 --> 00:41:47,020 La línia 17 comença principal. 1036 00:41:47,020 --> 00:41:50,610 Línia 21 i 20 té quantes ampolles de cervesa haurà? 1037 00:41:50,610 --> 00:41:52,060 I llavors jo dic getInt. 1038 00:41:52,060 --> 00:41:53,800 I ara tinc una mica d'una comprovació de validesa. 1039 00:41:53,800 --> 00:41:57,030 >> Així que aquesta és una convenció que ara començarem a adoptar 1040 00:41:57,030 --> 00:41:59,620 més rigorosament comprovar la entrada de l'usuari. 1041 00:41:59,620 --> 00:42:01,710 De vegades simplement no volen que els preguntarà de nou 1042 00:42:01,710 --> 00:42:02,630 i una i altra vegada. 1043 00:42:02,630 --> 00:42:05,620 Si l'usuari fica la pota i no coopera, està bé. 1044 00:42:05,620 --> 00:42:07,430 Deixi de fumar i no s'ocupen d'ells. 1045 00:42:07,430 --> 00:42:08,990 I això és el que estic fent aquí. 1046 00:42:08,990 --> 00:42:12,520 Si n és menor que 1, només vaig a cridar als usuaris, 1047 00:42:12,520 --> 00:42:14,330 "Em sap greu, això no té sentit." I després em vaig a 1048 00:42:14,330 --> 00:42:16,650 arbitràriament tornarà 1. 1049 00:42:16,650 --> 00:42:18,550 Així que de nou, això és només una convenció per acostumar. 1050 00:42:18,550 --> 00:42:19,850 De moment, assumir la fe. 1051 00:42:19,850 --> 00:42:22,700 Però fins ara, sempre hem estat tornant 0, perquè 1052 00:42:22,700 --> 00:42:25,204 hem dit retornant 0 denota què? 1053 00:42:25,204 --> 00:42:26,000 AUDIÈNCIA: Èxit. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. Malan: Èxit, això és tot. 1055 00:42:27,320 --> 00:42:29,740 Així que ara que finalment estem començant a pensar en 1056 00:42:29,740 --> 00:42:31,330 que no són èxits - 1057 00:42:31,330 --> 00:42:33,760 en altres paraules, casos de cantonada, condicions d'error - 1058 00:42:33,760 --> 00:42:37,520 ara tinc un subministrament infinit, o almenys 4000000000 1059 00:42:37,520 --> 00:42:39,790 possibles coses que poden sortir malament en els meus programes. 1060 00:42:39,790 --> 00:42:42,300 I puc començar a assignar els números individuals. 1061 00:42:42,300 --> 00:42:44,340 Ara, en general és suficient per tornar només 1062 00:42:44,340 --> 00:42:45,730 una mica diferent de 0. 1063 00:42:45,730 --> 00:42:48,040 Així que anem a tornar simplement 1 per ara. 1064 00:42:48,040 --> 00:42:51,440 Però el motiu de la devolució 1 és que tan aviat com torni 1065 00:42:51,440 --> 00:42:55,110 1, saps què passa amb la resta del programa? 1066 00:42:55,110 --> 00:42:55,720 Que s'aturi. 1067 00:42:55,720 --> 00:42:56,560 Això és tot. 1068 00:42:56,560 --> 00:42:59,150 Així que el fet que m'estic tornant 1 és eficaç 1069 00:42:59,150 --> 00:43:02,950 un curtcircuit en l'execució d'aquest programa, de manera que 1070 00:43:02,950 --> 00:43:06,780 res per sota de la línia 27 es segueixi executant. 1071 00:43:06,780 --> 00:43:09,210 Així que es torna principals, que és. 1072 00:43:09,210 --> 00:43:13,160 >> Molt bé, així que si l'usuari fa cooperar i arribar a la línia 30 1073 00:43:13,160 --> 00:43:15,680 Diu l'Escriptura en un nombre legítim, he aquí el meu 1074 00:43:15,680 --> 00:43:16,990 aplicació d'aquesta cançó. 1075 00:43:16,990 --> 00:43:19,050 Així que primer imprimeixi un caràcter de nova línia, només per 1076 00:43:19,050 --> 00:43:19,880 estètica. 1077 00:43:19,880 --> 00:43:21,500 Ara tinc un bucle for. 1078 00:43:21,500 --> 00:43:22,930 I notin que estic fent les coses una mica 1079 00:43:22,930 --> 00:43:23,880 d'una direcció diferent. 1080 00:43:23,880 --> 00:43:26,210 Jo no he de fer menys, no he de fer + +. 1081 00:43:26,210 --> 00:43:30,660 Jo en canvi puc dir inicialitzar una variable i i igualar-la a 1082 00:43:30,660 --> 00:43:35,080 n, el nombre que l'usuari va escriure en, i després fer el següent, de manera que 1083 00:43:35,080 --> 00:43:39,590 sempre i quan i és més gran que 0, i - 1084 00:43:39,590 --> 00:43:42,070 una vegada que hagi acabat d'una iteració d'aquest bucle. 1085 00:43:42,070 --> 00:43:44,310 Per tant, pot comptar amb un bucle for també. 1086 00:43:44,310 --> 00:43:47,520 Ara, aquesta és la setmana més o menys una cosa ara, amb printf. 1087 00:43:47,520 --> 00:43:51,770 Així impressió "% d ampolles de cervesa a la paret." Imprimir "% d 1088 00:43:51,770 --> 00:43:54,990 ampolles de cervesa. "" Prengui un a baix, passi al seu voltant. "Imprimir 1089 00:43:54,990 --> 00:43:58,880 "% D ampolles de cervesa a la paret." Pel que és encara% d, però 1090 00:43:58,880 --> 00:44:02,770 adonar que l'argument de printf està canviant. 1091 00:44:02,770 --> 00:44:05,840 Després de la coma, jo tinc, perquè vull dir 99. 1092 00:44:05,840 --> 00:44:08,590 Després d'aquest coma, jo tinc, perquè vull dir 99. 1093 00:44:08,590 --> 00:44:14,030 Després d'aquest coma, i have - 1, perquè vull dir 98 a 1094 00:44:14,030 --> 00:44:16,260 aquesta primera iteració, i així successivament. 1095 00:44:16,260 --> 00:44:18,520 I ara aquí, només tinc una mica d'observació poc estúpid. 1096 00:44:18,520 --> 00:44:22,270 I després la línia 42, de tornar 0 per convenció, el que significa que 1097 00:44:22,270 --> 00:44:23,650 tot està bé. 1098 00:44:23,650 --> 00:44:24,490 >> I què si em va ficar la pota? 1099 00:44:24,490 --> 00:44:26,350 Què pot un error molt comú aquí és? 1100 00:44:26,350 --> 00:44:29,200 Bé, i si accidentalment dit bé, jo vull comptar 1101 00:44:29,200 --> 00:44:31,640 a 0, vull 0 ampolles de cervesa a la paret? 1102 00:44:31,640 --> 00:44:34,620 Per això dic, i és major o igual a 0. 1103 00:44:34,620 --> 00:44:38,920 Què serà el símptoma que ara veig si em recompilar 1104 00:44:38,920 --> 00:44:41,173 beer1 i executar? 1105 00:44:41,173 --> 00:44:42,120 AUDIÈNCIA: Negatiu. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. Malan: Sí, serà negatiu. 1107 00:44:43,590 --> 00:44:45,950 Aquest és un error de tancament d'una banda, un increïblement 1108 00:44:45,950 --> 00:44:47,270 error comú de fer. 1109 00:44:47,270 --> 00:44:48,960 Que en realitat es remunten a la finestra de terminal i fer-ho 1110 00:44:48,960 --> 00:44:50,620 aquí, perquè puguem veure alhora. 1111 00:44:50,620 --> 00:44:53,280 Intro, 99 ampolles de cervesa. 1112 00:44:53,280 --> 00:44:56,580 A prop, però vam ser molt lleugerament massa lluny. 1113 00:44:56,580 --> 00:45:00,500 Cantem la cançó massa baix, de manera que ara colpejar el 1114 00:45:00,500 --> 00:45:01,510 nombre negatiu. 1115 00:45:01,510 --> 00:45:03,680 Així que no acaba de funcionar. 1116 00:45:03,680 --> 00:45:06,450 >> Molt bé, així que fàcilment es pot arreglar tornant a la 1117 00:45:06,450 --> 00:45:07,650 manera que una vegada va ser. 1118 00:45:07,650 --> 00:45:10,360 Però, quins són algunes oportunitats ara per 1119 00:45:10,360 --> 00:45:11,190 millora? 1120 00:45:11,190 --> 00:45:17,200 Bé, deixa obrir beer2.c i baixi aquí i fer una 1121 00:45:17,200 --> 00:45:19,310 mira aquesta versió. 1122 00:45:19,310 --> 00:45:21,370 Què és el primer que salta a la vista tan diferents 1123 00:45:21,370 --> 00:45:23,715 en aquesta versió aquí? 1124 00:45:23,715 --> 00:45:24,190 AUDIÈNCIA: [inaudible]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. Malan: Sí, així que no sóc jo, perquè se li va acudir a 1126 00:45:26,510 --> 00:45:29,350 em saps què, jo estic preguntant a l'usuari per an, i llavors estic 1127 00:45:29,350 --> 00:45:33,580 establint i igual a n, i després em i canviant, però mai estic 1128 00:45:33,580 --> 00:45:34,590 n tocar de nou. 1129 00:45:34,590 --> 00:45:37,390 Llavors, què diables era el punt que l'assignació d'altres 32 1130 00:45:37,390 --> 00:45:45,210 trossets vaig trucar només perquè jo pugui tenir una variable diferent? 1131 00:45:45,210 --> 00:45:47,960 Així que en aquest cas, en certa manera em va reconèixer que innecessari 1132 00:45:47,960 --> 00:45:49,190 disseny característica. 1133 00:45:49,190 --> 00:45:52,730 I ara diré mentre que n és més gran que 0, vagi 1134 00:45:52,730 --> 00:45:56,180 endavant i imprimir la mateixa cançó, passant per una n al printf com la 1135 00:45:56,180 --> 00:46:00,210 El segon argument, i n - 1 com el segon argument aquí. 1136 00:46:00,210 --> 00:46:02,930 I després en cada iteració d'aquest bucle, seguir endavant i només 1137 00:46:02,930 --> 00:46:05,080 decrementar n si mateix. 1138 00:46:05,080 --> 00:46:06,960 Ara, funcionalment, aquest programa 1139 00:46:06,960 --> 00:46:08,010 serà idèntics. 1140 00:46:08,010 --> 00:46:10,730 Si escric en el 99, n comença a les 99. 1141 00:46:10,730 --> 00:46:12,890 Jo decrement, reducció, disminució, decrement. 1142 00:46:12,890 --> 00:46:15,875 Vaig a arribar fins al final amb "Una ampolla de cervesa a 1143 00:46:15,875 --> 00:46:16,740 la paret, una ampolla de cervesa. 1144 00:46:16,740 --> 00:46:18,020 Prengui un a baix, passi al seu voltant. 1145 00:46:18,020 --> 00:46:21,480 0 ampolles de cervesa a la paret. "Al final, ho vaig fer perquè 1146 00:46:21,480 --> 00:46:23,200 obtenir la condició correcta. 1147 00:46:23,200 --> 00:46:24,280 És més gran que 0. 1148 00:46:24,280 --> 00:46:26,220 Jo no cometre aquest error. 1149 00:46:26,220 --> 00:46:28,470 >> Llavors, què és millor, una versió o la versió dos? 1150 00:46:31,380 --> 00:46:33,480 Això he sentit un munt de murmuracions per a dos. 1151 00:46:33,480 --> 00:46:34,730 Per què dos? 1152 00:46:37,210 --> 00:46:38,225 Què és això? 1153 00:46:38,225 --> 00:46:39,215 AUDIÈNCIA: [inaudible]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. Malan: Oh, està bé. 1155 00:46:40,070 --> 00:46:42,870 Així que no estigui per sota de 0, però recorda, en una versió, la 1156 00:46:42,870 --> 00:46:45,870 versió correcta original no anar per sota de 0 tampoc. 1157 00:46:45,870 --> 00:46:48,340 Així que recordi que aquesta és la versió correcta. 1158 00:46:48,340 --> 00:46:51,630 Així que anem a almenys comparar les dues versions correctes. 1159 00:46:51,630 --> 00:46:53,300 Què és un argument a favor de la versió 1160 00:46:53,300 --> 00:46:55,146 dos que, mmm, millor? 1161 00:46:55,146 --> 00:46:55,642 Sí? 1162 00:46:55,642 --> 00:46:57,630 AUDIÈNCIA: S'utilitza menys espai. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. Malan: Bé, de manera que ocupa menys espai, no? 1164 00:46:59,530 --> 00:47:02,900 Considerant que una versió de 32 bits utilitzat per an, i després una altra 1165 00:47:02,900 --> 00:47:07,680 32 bits per i. 1166 00:47:07,680 --> 00:47:10,060 Versió dos només utilitza 32 bits per an, de manera que 1167 00:47:10,060 --> 00:47:11,700 sembla ser un avantatge. 1168 00:47:11,700 --> 00:47:12,950 Altres pensaments? 1169 00:47:18,070 --> 00:47:21,520 Algú vol argumentar en favor d'un? 1170 00:47:21,520 --> 00:47:22,070 Sí? 1171 00:47:22,070 --> 00:47:25,240 AUDIÈNCIA: Vostè ha de fer servir la línia addicional de codi de n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. Malan: Bé, clar. 1173 00:47:26,090 --> 00:47:26,960 Així que això és just. 1174 00:47:26,960 --> 00:47:29,040 Així que aquest just, si més no per a mi - 1175 00:47:29,040 --> 00:47:31,940 Vull dir, això realment se sent una mica més desordenat, el fet que 1176 00:47:31,940 --> 00:47:35,120 No puc ordenar d'encapsular tota la meva lògica en un 1177 00:47:35,120 --> 00:47:38,030 bella línia, el bucle for, ja que el bucle for pot. 1178 00:47:38,030 --> 00:47:40,240 Aquí, com que he de virar en aquest núm - 1179 00:47:40,240 --> 00:47:41,120 al final del bucle, perquè 1180 00:47:41,120 --> 00:47:42,550 és lògicament necessari. 1181 00:47:42,550 --> 00:47:45,190 Però és com que em frega el camí equivocat, simplement perquè 1182 00:47:45,190 --> 00:47:48,260 sembla independent de la lògica d'aquí, tot i que, 1183 00:47:48,260 --> 00:47:49,430 de nou, és necessari. 1184 00:47:49,430 --> 00:47:50,990 Altres pensaments? 1185 00:47:50,990 --> 00:47:51,490 Sí? 1186 00:47:51,490 --> 00:47:52,740 AUDIÈNCIA: [inaudible]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. Malan: Si. 1188 00:47:58,350 --> 00:48:00,730 Llavors, què passa si en lloc, al final de la cançó, volia 1189 00:48:00,730 --> 00:48:02,950 imprimir de nou el nom de la cançó? 1190 00:48:02,950 --> 00:48:05,660 Igual que "Gràcies per jugar 99 ampolles de cervesa", o alguna cosa 1191 00:48:05,660 --> 00:48:06,690 ximple com això? 1192 00:48:06,690 --> 00:48:09,750 Però el punt és, que volia tenir accés al valor original. 1193 00:48:09,750 --> 00:48:13,180 El fet que hagi mutat o canviat en tots els n 1194 00:48:13,180 --> 00:48:16,330 iteració, pel que han destruït el seu valor original 1195 00:48:16,330 --> 00:48:18,650 significa que no es pot fer això al final. 1196 00:48:18,650 --> 00:48:20,660 Ara, sens dubte, és evident que no volen fer 1197 00:48:20,660 --> 00:48:21,450 que en aquest programa. 1198 00:48:21,450 --> 00:48:22,350 Llavors, qui li importa? 1199 00:48:22,350 --> 00:48:23,630 Però això és un punt molt vàlid. 1200 00:48:23,630 --> 00:48:25,520 I per ser honest, realment no hi ha una 1201 00:48:25,520 --> 00:48:26,630 dret de contestar aquí. 1202 00:48:26,630 --> 00:48:28,740 Els dos són igualment correctes. 1203 00:48:28,740 --> 00:48:30,210 Podria estar convençut de qualsevol manera. 1204 00:48:30,210 --> 00:48:33,310 M'agradaria dir que, en general, és un bon principi si 1205 00:48:33,310 --> 00:48:36,030 demana a l'usuari un valor i emmagatzema en una variable 1206 00:48:36,030 --> 00:48:38,730 com n, només una mena de qüestió de principis, és probablement bo 1207 00:48:38,730 --> 00:48:40,160 per mantenir aquesta situació. 1208 00:48:40,160 --> 00:48:43,400 I totes les dades que voleu mutar una i altra vegada, només 1209 00:48:43,400 --> 00:48:46,030 doneu una còpia d'aquesta variable, només perquè 1210 00:48:46,030 --> 00:48:47,830 tenen accés a l'original. 1211 00:48:47,830 --> 00:48:51,040 Vostè està gastant més de 32 bits, però la realitat és aquesta 1212 00:48:51,040 --> 00:48:53,490 ordinador té, com, dos gigabytes de RAM en aquests dies, 1213 00:48:53,490 --> 00:48:55,310 i estem subtileses més de 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Realment no és una gran cosa. 1215 00:48:56,320 --> 00:48:58,550 I fins i tot en aquest dispositiu aquí, amb una mitjana d'un concert o d'una 1216 00:48:58,550 --> 00:49:01,700 gigabyte de RAM, 32 bits davant 64 bits, 1217 00:49:01,700 --> 00:49:02,920 no és una gran cosa. 1218 00:49:02,920 --> 00:49:05,890 Certament, avui dia, serà molt aclaparats per la grandària 1219 00:49:05,890 --> 00:49:08,400 del programa en si, que serà de diversos centenars 1220 00:49:08,400 --> 00:49:10,890 kilobytes, sinó en uns pocs megabytes, en aquests dies. 1221 00:49:10,890 --> 00:49:13,550 >> Preocupacions tan raonable, no una resposta correcta. 1222 00:49:13,550 --> 00:49:15,490 Però almenys aquests són els pensaments que han de començar a 1223 00:49:15,490 --> 00:49:16,790 passen per la teva ment? 1224 00:49:16,790 --> 00:49:19,600 Com que en conjunt de processadors 0, tot i que en realitat només s'espera 1225 00:49:19,600 --> 00:49:22,340 correcció, o almenys que renunciï a diversos bugs 1226 00:49:22,340 --> 00:49:25,440 és possible que hagi trobat, a mesura que avancem, el disseny és 1227 00:49:25,440 --> 00:49:27,910 serà un altre aspecte clau, tant de l'escriptura de codi 1228 00:49:27,910 --> 00:49:29,770 i també avaluar el nostre codi. 1229 00:49:29,770 --> 00:49:32,310 I així, si més no, donar creu que aquest tipus de coses. 1230 00:49:32,310 --> 00:49:35,590 I només perquè alguna cosa funciona no vol dir que sigui bo, 1231 00:49:35,590 --> 00:49:37,130 no vol dir que estigui ben dissenyat. 1232 00:49:37,130 --> 00:49:38,820 I aquesta és una de les coses que els becaris de docència i 1233 00:49:38,820 --> 00:49:41,990 conjunts de problemes ens ajudarà a molestar part amb el temps. 1234 00:49:41,990 --> 00:49:45,020 >> Bé, què passa, anem a dir que aquesta versió aquí? 1235 00:49:45,020 --> 00:49:49,090 Deixa fer alguna cosa una mica més sexy aquí en un moment. 1236 00:49:49,090 --> 00:49:50,740 En primer lloc vull desfer-me d'això. 1237 00:49:50,740 --> 00:49:54,120 I ara anem a resoldre aquest problema gramatical. 1238 00:49:54,120 --> 00:49:58,780 Així doncs, en aquesta versió, vull fixar la gramàtica de manera que, 1239 00:49:58,780 --> 00:50:02,460 en comptes de dir s entre parèntesis, com "ampolla" 1240 00:50:02,460 --> 00:50:03,360 o "ampolles" - 1241 00:50:03,360 --> 00:50:04,900 No vull tallar aquesta cantonada - 1242 00:50:04,900 --> 00:50:08,350 També vull imprimir dinàmicament la paraula "ampolles" 1243 00:50:08,350 --> 00:50:12,820 o "ampolla", utilitzant aquests marcadors de posició% s avui. 1244 00:50:12,820 --> 00:50:16,550 Així que he de comprovar condicional quin és el valor de i. 1245 00:50:16,550 --> 00:50:19,590 I si és 1, el que vull dir "ampolla", i si és una cosa 1246 00:50:19,590 --> 00:50:23,115 una altra cosa, vull dir "ampolles". Així que anem a tractar de fer això. 1247 00:50:23,115 --> 00:50:31,340 Així que si i == 1, llavors m'ho dius a mi seguir endavant i declarar - 1248 00:50:31,340 --> 00:50:34,080 Necessito una cadena, així que vaig a fer la cadena s1, perquè és la 1249 00:50:34,080 --> 00:50:36,070 primera cadena que m'importa en aquest moment. 1250 00:50:36,070 --> 00:50:40,980 Vaig a dir "ampolla". I llavors, anem a veure, la cadena de 1251 00:50:40,980 --> 00:50:43,110 s2 - i vaig a explicar a on vaig en un moment - 1252 00:50:43,110 --> 00:50:47,650 "Ampolles". Així recordar que, en aquesta cançó, hem de ser capaços de 1253 00:50:47,650 --> 00:50:50,580 per imprimir les coses, dues paraules diferents en potència. 1254 00:50:50,580 --> 00:50:53,590 Així que si mirem cap enrere aquí, noti que quan arribem a 1255 00:50:53,590 --> 00:50:56,440 aquest exemple aquí ", dues ampolles de cervesa a la paret, 1256 00:50:56,440 --> 00:50:59,490 dues ampolles de cervesa, prengui un a baix, passi-al voltant ", vull 1257 00:50:59,490 --> 00:51:02,380 aquesta quarta línia de dir ara "una ampolla de cervesa a la 1258 00:51:02,380 --> 00:51:04,900 paret ". Així que he de decidir, és el que vull dir" ampolles "o 1259 00:51:04,900 --> 00:51:07,780 "Ampolla"? Així que vaig a dir arbitràriament, d'acord, 1260 00:51:07,780 --> 00:51:10,530 Vaig a declarar ara una variable anomenada s1, cadena 1261 00:51:10,530 --> 00:51:13,830 un, que es posarà endollat ​​aquí i aquí també, 1262 00:51:13,830 --> 00:51:16,070 perquè aquestes paraules són sempre idèntics, només pel 1263 00:51:16,070 --> 00:51:17,290 naturalesa de la cançó. 1264 00:51:17,290 --> 00:51:20,100 I jo vaig a trucar s2 qualsevol paraula que vull 1265 00:51:20,100 --> 00:51:21,560 finalment apareix aquí baix. 1266 00:51:21,560 --> 00:51:25,530 Ara, literalment, 99 vegades de cada 100, que serà el 1267 00:51:25,530 --> 00:51:28,820 mateix en ambdós casos, perquè 3 és plural, és 2 1268 00:51:28,820 --> 00:51:30,200 plural, 4 és plural. 1269 00:51:30,200 --> 00:51:34,640 Però en aquest cas de la cantonada, on vam arribar a 2 i després 1, o 1270 00:51:34,640 --> 00:51:37,250 ni tan sols l'1 i després 0, necessito aquesta lògica. 1271 00:51:37,250 --> 00:51:41,020 Així que he de passar algun temps en el meu codi d'aconseguir aquest dret. 1272 00:51:41,020 --> 00:51:47,530 Així que si faig això, si i == 1, llavors s1 igual a "ampolla" 1273 00:51:47,530 --> 00:51:52,010 i s2 igual a "ampolles", perquè això serà per a un 1274 00:51:52,010 --> 00:51:56,340 ampolla, i això serà per ampolles 0. 1275 00:51:56,340 --> 00:51:58,250 I aquí, què representa això? 1276 00:51:58,250 --> 00:51:59,780 Perquè quedi clar. 1277 00:51:59,780 --> 00:52:00,620 Això és només un comentari. 1278 00:52:00,620 --> 00:52:03,730 Així que el fet que vostè pot tenir una sola línia comentaris que significa 1279 00:52:03,730 --> 00:52:06,110 pot comentar el seu codi com aquest, però comú a un altre 1280 00:52:06,110 --> 00:52:09,050 paradigma, també, és que si vostè té una frase curta que super- 1281 00:52:09,050 --> 00:52:11,410 desitja posar-se i és simplement més fàcil de llegir per posar 1282 00:52:11,410 --> 00:52:13,270 el just al final de la línia de codi, pot 1283 00:52:13,270 --> 00:52:15,230 absolutament fer alguna cosa com això. 1284 00:52:15,230 --> 00:52:20,150 >> I ara què si ho faig? Perquè si no és igual a 1. 1285 00:52:20,150 --> 00:52:21,620 Així explosió igual a - 1286 00:52:21,620 --> 00:52:23,150 signe d'exclamació es coneix com "bang". 1287 00:52:23,150 --> 00:52:25,080 Així explosió = 1. 1288 00:52:25,080 --> 00:52:28,530 Així que si no és igual a 1, quin lloc vols fer? 1289 00:52:28,530 --> 00:52:31,700 Bé, la primera paraula que vull ser què? 1290 00:52:34,620 --> 00:52:40,030 Així que ha de ser una cadena de "ampolles" per ampolles plurals, 1291 00:52:40,030 --> 00:52:42,440 i llavors això serà plurals "ampolles", així, per ara. 1292 00:52:42,440 --> 00:52:43,800 I veurem si en realitat això ens porta a 1293 00:52:43,800 --> 00:52:44,870 cap a on volem anar. 1294 00:52:44,870 --> 00:52:47,680 Així que ara si em desplaço fins aquí, fixeu-vos que estic connectant 1295 00:52:47,680 --> 00:52:50,170 no només jo, sinó s1. 1296 00:52:50,170 --> 00:52:51,860 Estic connectant ii s1. 1297 00:52:51,860 --> 00:52:54,440 I a continuació, aquí baix, estic menys 1, que és el mateix que 1298 00:52:54,440 --> 00:52:55,920 abans, però s2. 1299 00:52:55,920 --> 00:52:58,730 En altres paraules, vull que la paraula Anglès a canvis d'acord 1300 00:52:58,730 --> 00:52:59,930 en aquesta lògica. 1301 00:52:59,930 --> 00:53:03,310 Ara, ja hi ha alguns problemes en aquest codi. 1302 00:53:03,310 --> 00:53:08,460 Què s'ha trencat ja fora de la porta aquí? 1303 00:53:08,460 --> 00:53:10,796 Sí? 1304 00:53:10,796 --> 00:53:13,210 AUDIÈNCIA: [inaudible]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. Malan: Exactament. 1306 00:53:13,800 --> 00:53:16,030 Així que ja has violat la lliçó d'abast. 1307 00:53:16,030 --> 00:53:19,610 Així que he declarat s1 i s2, però ho he fet dins 1308 00:53:19,610 --> 00:53:22,980 claus, el que significa, sí, aquest codi funcionarà fins 1309 00:53:22,980 --> 00:53:27,430 fins que la línia 42, però tan aviat com vaig arribar a la línia 43, endevinin què no 1310 00:53:27,430 --> 00:53:28,900 ja no existeix? 1311 00:53:28,900 --> 00:53:32,600 Bé, endevinin què ja no està en l'abast - ni s1 o s2. 1312 00:53:32,600 --> 00:53:33,780 Així que hem d'arreglar això. 1313 00:53:33,780 --> 00:53:36,180 Així que permetin-me eliminar les declaracions. 1314 00:53:36,180 --> 00:53:39,320 I vaig a deixar els noms de les variables i eliminar aquest aquí 1315 00:53:39,320 --> 00:53:40,120 i eliminar aquest aquí. 1316 00:53:40,120 --> 00:53:43,557 I en quines línies han de declarar que realment aquestes coses? 1317 00:53:43,557 --> 00:53:44,960 AUDIÈNCIA: [inaudible]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. Malan: Sí, per la qual cosa probablement 1319 00:53:45,410 --> 00:53:46,850 fins aquí, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Així cadena s1 i s2 cadena. 1321 00:53:50,670 --> 00:53:51,950 I resulta que, no puc fer això. 1322 00:53:51,950 --> 00:53:54,260 Si vostè està declarant dues variables del mateix tipus, 1323 00:53:54,260 --> 00:53:57,420 vostè pot simplement utilitzar una coma i fer que en C. Tots 1324 00:53:57,420 --> 00:53:58,970 bé, així que ara tinc dues variables - 1325 00:53:58,970 --> 00:53:59,860 s1 i s2. 1326 00:53:59,860 --> 00:54:02,000 Els estic assignant valors en aquests 1327 00:54:02,000 --> 00:54:04,210 condicions aquí, o aquí. 1328 00:54:04,210 --> 00:54:06,690 I llavors jo estic usant baix. 1329 00:54:06,690 --> 00:54:10,960 Què tan bé està això ara va a funcionar? 1330 00:54:10,960 --> 00:54:12,740 >> Bé, tot i així és una mica buggy, però veurem si més no 1331 00:54:12,740 --> 00:54:13,730 fins on hem arribat. 1332 00:54:13,730 --> 00:54:16,500 Així que permetin-me anar endavant i fer beer3. 1333 00:54:16,500 --> 00:54:17,695 És aquesta beer3? 1334 00:54:17,695 --> 00:54:19,410 Sí, aquest és beer3. 1335 00:54:19,410 --> 00:54:21,510 I ara m'ho dius a mi seguir endavant i executar beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Probablement puguem passar la major part d'ells. 1338 00:54:25,840 --> 00:54:29,100 I aquí baix, mira això. 1339 00:54:29,100 --> 00:54:31,110 "Una ampolla de cervesa a la paret, una ampolla de cervesa, prendre 1340 00:54:31,110 --> 00:54:34,306 un a baix, passi-al voltant, 0 ampolles de cervesa a la paret. " 1341 00:54:34,306 --> 00:54:37,570 Però estic cridant la seva atenció només a la meitat de la solució. 1342 00:54:37,570 --> 00:54:39,620 Una mica fastiguejat aquí. 1343 00:54:39,620 --> 00:54:43,030 Així que sembla que els casos de cantonada sorgeixen quan i és igual al que 1344 00:54:43,030 --> 00:54:44,030 dos valors? 1345 00:54:44,030 --> 00:54:45,020 AUDIÈNCIA: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. Malan: 2 i 1. 1347 00:54:46,190 --> 00:54:48,180 No 1 i no és 1. 1348 00:54:48,180 --> 00:54:51,890 És realment només aquestes dues últimes estrofes d'aquesta cançó. 1349 00:54:51,890 --> 00:54:53,890 Llavors, què he de Volies fer? 1350 00:54:53,890 --> 00:54:58,890 Així que sembla haver capturat el cas que si i és == a 1, 1351 00:54:58,890 --> 00:55:02,240 a continuació, la primera paraula és "ampolla", però la segona paraula 1352 00:55:02,240 --> 00:55:07,230 és "ampolles". Però aquí, vull canviar això sigui == 2. 1353 00:55:07,230 --> 00:55:08,570 I si aquest és el cas, què vull la 1354 00:55:08,570 --> 00:55:09,620 primera paraula que es? 1355 00:55:09,620 --> 00:55:10,430 AUDIÈNCIA: "Ampolles". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. Malan: "Ampolles", així que per dues ampolles. 1357 00:55:12,890 --> 00:55:14,690 I llavors aquí aquesta paraula ha de ser - 1358 00:55:14,690 --> 00:55:15,340 AUDIÈNCIA: "Ampolla". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. Malan: "Botella", en singular. 1360 00:55:20,430 --> 00:55:25,160 >> Molt bé, anem a reduir, tornar per aquí, tornar a executar make, 1361 00:55:25,160 --> 00:55:28,590 torni a executar beer3, escriviu 99 de nou. 1362 00:55:28,590 --> 00:55:30,710 Està bé, "Segmentació fallada (core dumped)". 1363 00:55:30,710 --> 00:55:32,780 Què he fet malament? 1364 00:55:36,050 --> 00:55:38,722 AUDIÈNCIA: No té un valor de [inaudible]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. Malan: Ah, excel · lent punt. 1366 00:55:40,480 --> 00:55:43,310 Molt bé, i què està malament aquí? 1367 00:55:43,310 --> 00:55:45,450 Així fallada de segmentació, i estem realment veurà 1368 00:55:45,450 --> 00:55:49,020 això unes quantes vegades en el futur, deliberadament. 1369 00:55:49,020 --> 00:55:51,030 Però per ara, què significa això realment? 1370 00:55:51,030 --> 00:55:53,620 Un error de segmentació gairebé sempre vol dir que vostè té 1371 00:55:53,620 --> 00:55:56,760 d'alguna manera van intentar accedir a la memòria, la memòria RAM en el seu ordinador, 1372 00:55:56,760 --> 00:56:00,600 que no és de la seva propietat, que no s'han demanat al 1373 00:56:00,600 --> 00:56:02,050 sistema operatiu per. 1374 00:56:02,050 --> 00:56:04,440 Així que en aquest cas, adonar-se del que he fet, que és 1375 00:56:04,440 --> 00:56:05,870 defectuós en la meva lògica. 1376 00:56:05,870 --> 00:56:09,500 He assignat s1 i s2 un valor si i és igual a 1. 1377 00:56:09,500 --> 00:56:11,590 També he fet que si i és igual a 2. 1378 00:56:11,590 --> 00:56:13,710 Però no ho he fet en l'infinit nombre d'altres 1379 00:56:13,710 --> 00:56:14,690 possibilitats - 1380 00:56:14,690 --> 00:56:17,940 en particular, 3 o 4 o punt, punt, punt, 99. 1381 00:56:17,940 --> 00:56:20,100 Així que una solució per això podria ser només anem a 1382 00:56:20,100 --> 00:56:22,190 té una condició més. 1383 00:56:22,190 --> 00:56:26,780 I m'ho dius a mi entrar aquí i dir s1 és igual a - 1384 00:56:26,780 --> 00:56:28,180 Què hauria d'estar aquí? 1385 00:56:28,180 --> 00:56:28,750 AUDIÈNCIA: [inaudible]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. Malan: "Ampolles", perquè en el cas comú, 1387 00:56:30,460 --> 00:56:32,020 és simplement el mateix. 1388 00:56:32,020 --> 00:56:35,580 Així que equival Ho van dir ells, "ampolles". Així que per plural 1389 00:56:35,580 --> 00:56:41,010 ampolles, i després fins aquí, per ampolles plurals. 1390 00:56:41,010 --> 00:56:44,580 Bé, ara vull tornar a la meva finestra de terminal, 1391 00:56:44,580 --> 00:56:47,200 recompileu, torna a córrer. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Sort. 1394 00:56:49,150 --> 00:56:50,610 I farem una simple comprovació ràpida. 1395 00:56:50,610 --> 00:56:52,400 Tècnicament, ens agradaria llegir tot això per assegurar-se que 1396 00:56:52,400 --> 00:56:53,370 si és correcta, però anem a veure 1397 00:56:53,370 --> 00:56:54,640 els menys culpables coneguts. 1398 00:56:54,640 --> 00:56:57,370 3 ampolles, 2 ampolles, 2 ampolles, 1 1399 00:56:57,370 --> 00:57:00,380 ampolla, l'ampolla 1, 0 ampolles. 1400 00:57:00,380 --> 00:57:03,080 Sembla que ens hem fixat, almenys, per ara. 1401 00:57:03,080 --> 00:57:06,010 Però el problema aquí és que el que és un embolic terrible déu és 1402 00:57:06,010 --> 00:57:07,470 només per resoldre un estúpid 1403 00:57:07,470 --> 00:57:09,540 d'un caràcter detall gramatical. 1404 00:57:09,540 --> 00:57:11,150 Així que hi ha una mena de raó de tallar aquesta cantonada 1405 00:57:11,150 --> 00:57:14,090 anteriorment, pel fet que és completament molest haver de 1406 00:57:14,090 --> 00:57:15,020 escriure aquest codi molt. 1407 00:57:15,020 --> 00:57:17,530 Però resulta que no hi ha manera una mica més elegants de 1408 00:57:17,530 --> 00:57:20,110 expressant exactament el mateix. 1409 00:57:20,110 --> 00:57:22,040 I podem fer-ho de la següent. 1410 00:57:22,040 --> 00:57:23,890 >> Permetin-me deixar això a la pantalla per un moment i 1411 00:57:23,890 --> 00:57:27,320 introduir alguna cosa conegut com un operador ternari. 1412 00:57:27,320 --> 00:57:29,600 Això és una mica d'una sola línia que acaba de dir per fer que la nostra 1413 00:57:29,600 --> 00:57:31,880 viu una mica més sexy, segons el promès. 1414 00:57:31,880 --> 00:57:33,130 I jo faré això de la següent manera. 1415 00:57:33,130 --> 00:57:35,810 Dóna'm una cadena anomenada s1, i em va deixar 1416 00:57:35,810 --> 00:57:37,200 assignar de la següent manera. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Ampolla", en cas contrari "ampolles". String s2 gets (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Ampolla", en cas contrari "ampolles". 1420 00:57:52,670 --> 00:57:57,050 Llavors quina és la diferència? 1421 00:57:57,050 --> 00:57:59,370 Aquestes dues línies de codi, al meu entendre, pot 1422 00:57:59,370 --> 00:58:02,200 reemplaçar tot aquest embolic. 1423 00:58:02,200 --> 00:58:04,280 Així que jo en dic un embolic, perquè és com que em frega la 1424 00:58:04,280 --> 00:58:05,940 manera equivocada que és tantes línies de codi. 1425 00:58:05,940 --> 00:58:06,650 No està malament. 1426 00:58:06,650 --> 00:58:07,700 No és un mal disseny. 1427 00:58:07,700 --> 00:58:10,140 Igual, això és perfectament correcte i perfectament bé. 1428 00:58:10,140 --> 00:58:12,970 No obstant això, la codificació es torna tediós si s'ha d'expressar així 1429 00:58:12,970 --> 00:58:15,530 maleït específicament una i altra vegada i una altra amb una simple 1430 00:58:15,530 --> 00:58:16,620 escenari com aquest. 1431 00:58:16,620 --> 00:58:19,470 Així que C té algunes dreceres, així. 1432 00:58:19,470 --> 00:58:24,270 Així que essencialment està dient declarar una cadena anomenada s1 i 1433 00:58:24,270 --> 00:58:32,610 o bé assignar aquest valor o si aquest valor és i == - 1434 00:58:32,610 --> 00:58:35,290 ho sento, jo hauria de dir això amb més claredat. 1435 00:58:35,290 --> 00:58:41,680 Declarar una variable de s1, assignar aquest valor si això és cert. 1436 00:58:41,680 --> 00:58:44,280 En cas contrari, assignar aquest valor. 1437 00:58:44,280 --> 00:58:47,220 En altres paraules, aquesta és una mena de forma d'una línia de 1438 00:58:47,220 --> 00:58:51,490 dient que si una altra cosa però fent un treball al llarg del camí. 1439 00:58:51,490 --> 00:58:55,540 Així que si i és 1, llavors endavant i cridar a aquesta "ampolla". I 1440 00:58:55,540 --> 00:58:59,830 llavors això altre, en diuen "ampolles". Mentrestant, el s2, 1441 00:58:59,830 --> 00:59:04,060 segona paraula que cal definir, si i és igual a 2, anem a 1442 00:59:04,060 --> 00:59:08,350 establir s2 a "ampolla". En cas contrari, ajústelo a "ampolles". I què 1443 00:59:08,350 --> 00:59:11,460 això vol dir ara és que puc passar per això i eliminar tots els 1444 00:59:11,460 --> 00:59:12,860 aquestes línies de codi. 1445 00:59:12,860 --> 00:59:17,220 I quan dic, una mica ridícul, que és ara 1446 00:59:17,220 --> 00:59:20,060 sexy, és més sexy en el gènere de sentit estilístic. 1447 00:59:20,060 --> 00:59:22,660 El fet que funcionalment, aquest codi és en realitat serà 1448 00:59:22,660 --> 00:59:24,610 fer exactament el mateix. 1449 00:59:24,610 --> 00:59:26,890 I encara que al principi pot semblar una mica críptic al principi 1450 00:59:26,890 --> 00:59:29,250 vista, ja que no he vist abans d'aquesta construcció, que havia 1451 00:59:29,250 --> 00:59:31,850 argumenten que és en última instància, serà molt més 1452 00:59:31,850 --> 00:59:34,820 fàcil de llegir i molt més fàcil per nosaltres els éssers humans a una espècie de 1453 00:59:34,820 --> 00:59:36,830 entendre, perquè ara vostè pot llegir la 1454 00:59:36,830 --> 00:59:38,830 codi en una sola línia. 1455 00:59:38,830 --> 00:59:41,550 Encara és similar a la de la una si, quan sigui 1456 00:59:41,550 --> 00:59:44,920 condició i llavors això és el que hi ha dins seu i l'est 1457 00:59:44,920 --> 00:59:46,480 és el que hi ha dins de la persona. 1458 00:59:46,480 --> 00:59:49,450 Però podem fer això només molt més elegant. 1459 00:59:49,450 --> 00:59:52,650 >> I si ara torno al meu terminal, després d'haver eliminat tots 1460 00:59:52,650 --> 00:59:55,530 de les línies i els va reemplaçar amb només els dos, 1461 00:59:55,530 --> 01:00:00,150 recompilar, re-run ampolles de cervesa amb el 99, l'avís que el meu 1462 01:00:00,150 --> 01:00:03,350 gramàtica és, de fet, segueix sent correcta. 1463 01:00:03,350 --> 01:00:06,160 Així que de nou, alguna cosa per començar. 1464 01:00:06,160 --> 01:00:08,840 2 ampolles de cervesa, una ampolla de cervesa. 1465 01:00:08,840 --> 01:00:09,370 Sembla correcte. 1466 01:00:09,370 --> 01:00:10,100 Si. 1467 01:00:10,100 --> 01:00:13,900 Així que tenim una solució més curta. 1468 01:00:13,900 --> 01:00:16,020 Així que això, també, a mesura que se senti més còmode amb C, no 1469 01:00:16,020 --> 01:00:18,630 necessàriament amb el conjunt de processadors primer o segon fins i tot, però 1470 01:00:18,630 --> 01:00:21,170 adonar-se que aquestes construccions ens permeten fer les coses cada vegada 1471 01:00:21,170 --> 01:00:22,810 més elegant. 1472 01:00:22,810 --> 01:00:25,200 Ara farem una altra cosa aquí. 1473 01:00:25,200 --> 01:00:31,460 Deixin-me seguir endavant i obrir return1.c. 1474 01:00:31,460 --> 01:00:34,340 Ara anem a començar a resoldre un altre problema d'una manera que 1475 01:00:34,340 --> 01:00:37,140 ens permet escriure codi més sofisticat. 1476 01:00:37,140 --> 01:00:39,960 >> Així que aquest és un programa petit i senzill el propòsit en la vida 1477 01:00:39,960 --> 01:00:41,870 és per incrementar els valors. 1478 01:00:41,870 --> 01:00:43,100 I, de fet, anem a fer un pas enrere. 1479 01:00:43,100 --> 01:00:44,400 Deixa fer això manualment. 1480 01:00:44,400 --> 01:00:52,200 Deixa fer incloure i int main (void). 1481 01:00:52,200 --> 01:00:53,450 I m'ho dius a mi anomenar aquest increment.c. 1482 01:00:57,150 --> 01:00:58,570 I què és el que vull fer? 1483 01:00:58,570 --> 01:01:02,240 Vaig a seguir endavant i dir alguna cosa com - 1484 01:01:02,240 --> 01:01:04,280 anem a trucar als números de la mateixa - 1485 01:01:04,280 --> 01:01:04,980 x int. 1486 01:01:04,980 --> 01:01:13,670 Així int x obté 2; printf x és% d, línia nova, x. 1487 01:01:13,670 --> 01:01:16,780 Així que estic escrivint ràpid, però tipus de coses familiars ara. 1488 01:01:16,780 --> 01:01:18,830 Llavors faré x + +. 1489 01:01:18,830 --> 01:01:21,710 Llavors em vaig a imprimir la mateixa frase de nou. 1490 01:01:21,710 --> 01:01:24,550 I després vaig a tornar 0 només per sortir del programa. 1491 01:01:24,550 --> 01:01:25,960 D'acord, aquest és un programa que 1492 01:01:25,960 --> 01:01:26,960 increments d'un nombre. 1493 01:01:26,960 --> 01:01:29,830 Es va a inicialitzar 1 alguna cosa a 2, i llavors és 1494 01:01:29,830 --> 01:01:33,470 s'incrementarà i imprimir de nou. 1495 01:01:33,470 --> 01:01:36,930 >> Així que anem a córrer increment, programa increïblement simple. 1496 01:01:36,930 --> 01:01:40,940 Però suposem ara que vull per al cub de valor, també ho fan 1497 01:01:40,940 --> 01:01:42,490 alguna cosa una mica arbitrària. 1498 01:01:42,490 --> 01:01:45,140 I jo realment vull fer x obté el cub de la mateixa. 1499 01:01:45,140 --> 01:01:47,570 Així que podria utilitzar el que s'anomena la funció pow, però no ho faig 1500 01:01:47,570 --> 01:01:48,650 realment sap on és encara. 1501 01:01:48,650 --> 01:01:50,580 Així que vaig a fer-ho de la manera passada de moda. 1502 01:01:50,580 --> 01:01:54,550 x vegades això és igual a X vegades x per x. 1503 01:01:54,550 --> 01:01:56,880 Així que estic cubicar el valor, multiplicar per si mateix de nou 1504 01:01:56,880 --> 01:02:00,440 i una i altra vegada, perquè puguem aconseguir el poder 1505 01:02:00,440 --> 01:02:02,050 de 3 en aquest cas. 1506 01:02:02,050 --> 01:02:06,000 Així que ara els números que he d'imprimir ha de ser, com veurem 1507 01:02:06,000 --> 01:02:08,450 aquí - fer d'increment, pel que en realitat no és realment incrementar 1508 01:02:08,450 --> 01:02:10,260 ja, però anem a deixar el nom per si mateix - 1509 01:02:10,260 --> 01:02:11,590 2 i després 8. 1510 01:02:11,590 --> 01:02:17,670 Ara, tenim el començament d'una oportunitat per al perfeccionament 1511 01:02:17,670 --> 01:02:21,570 aquí, de manera que aquesta cosa cubicació de multiplicar un nombre 1512 01:02:21,570 --> 01:02:24,680 per si mateix per si mateix per si mateix se sent com això només podria ser 1513 01:02:24,680 --> 01:02:27,920 útil tenir una funció, igual que algú va decidir 1514 01:02:27,920 --> 01:02:30,430 anys enrere - ja saps, una mica útil si un de nosaltres se senti 1515 01:02:30,430 --> 01:02:33,120 i escriu printf perquè la resta del món pot usar, 1516 01:02:33,120 --> 01:02:36,160 Per què no ens asseiem a escriure una funció anomenada cubeta 1517 01:02:36,160 --> 01:02:39,250 que fa això cubicació per a nosaltres, així que no ha de manualment 1518 01:02:39,250 --> 01:02:41,500 posar en pràctica el concepte de cubicar valors aquí? 1519 01:02:41,500 --> 01:02:44,040 >> Així, un exemple senzill, però seguirem endavant i utilitzar això com una 1520 01:02:44,040 --> 01:02:46,280 oportunitat d'escriure la nostra pròpia funció. 1521 01:02:46,280 --> 01:02:49,110 Així que fins ara, només hem utilitzat principal, i hem utilitzat altres 1522 01:02:49,110 --> 01:02:51,780 funcions de les persones, però no hem escrit la nostra. 1523 01:02:51,780 --> 01:02:52,650 Així que aquí anem. 1524 01:02:52,650 --> 01:02:56,330 Vaig a seguir endavant i escriure una funció anomenada cubeta. 1525 01:02:56,330 --> 01:02:58,490 I vaig a haver de prendre una entrada. 1526 01:02:58,490 --> 01:03:02,070 Pel que la seva aportació serà un nombre enter. 1527 01:03:02,070 --> 01:03:03,570 I què farà? 1528 01:03:03,570 --> 01:03:08,500 Va a declarar int sortida = entrada de temps entrada 1529 01:03:08,500 --> 01:03:09,880 temps d'entrada. 1530 01:03:09,880 --> 01:03:12,190 I després es tornarà aquest producte. 1531 01:03:12,190 --> 01:03:14,500 I llavors he de ser específic ara. 1532 01:03:14,500 --> 01:03:16,820 Aquesta funció va a tornar un int. 1533 01:03:16,820 --> 01:03:19,130 Així que aquí és, llavors, com li agradaria escriure les seves pròpies funcions. 1534 01:03:19,130 --> 01:03:20,850 En primer lloc, decidir quin és el nom del seu 1535 01:03:20,850 --> 01:03:21,720 funció serà. 1536 01:03:21,720 --> 01:03:23,964 I, en general, alguna cosa explicatiu és bo, així que vaig jo 1537 01:03:23,964 --> 01:03:25,060 diuen cub. 1538 01:03:25,060 --> 01:03:27,180 Llavors vostè ha d'especificar el que es va a tornar, el que és 1539 01:03:27,180 --> 01:03:28,240 seva sortida serà. 1540 01:03:28,240 --> 01:03:29,595 I no tenim moltes opcions encara. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Per ara, em quedaré amb un int, perquè ho vull 1543 01:03:34,260 --> 01:03:35,880 per tornar un sencer. 1544 01:03:35,880 --> 01:03:38,770 Llavors vostè ha d'especificar quines són les seves entrades, si n'hi ha, són. 1545 01:03:38,770 --> 01:03:41,570 I si cube pren un argument, pren una mica entre 1546 01:03:41,570 --> 01:03:44,970 parèntesi, vostè ha de donar aquest argument un nom perquè 1547 01:03:44,970 --> 01:03:47,860 es pot dir alguna cosa com ho estem implementant o escriure 1548 01:03:47,860 --> 01:03:50,550 aquesta funció, i cal donar-li un tipus, que en aquest 1549 01:03:50,550 --> 01:03:51,810 cas serà int. 1550 01:03:51,810 --> 01:03:54,690 Així que en resum, la galleda és una funció que pren un sencer 1551 01:03:54,690 --> 01:03:57,560 com a entrada i retorna un enter com a sortida. 1552 01:03:57,560 --> 01:03:59,240 >> Llavors, què fer amb aquesta entrada? 1553 01:03:59,240 --> 01:04:03,710 Doncs bé, en la línia 14, declaro una variable de sortida es diu, i jo 1554 01:04:03,710 --> 01:04:07,410 assignar-li el valor, Entrada de vegades vegades d'entrada. 1555 01:04:07,410 --> 01:04:11,490 I llavors torno sortida. 1556 01:04:11,490 --> 01:04:14,890 Llavors, com puc utilitzar això llavors? 1557 01:04:14,890 --> 01:04:19,210 Què puc canviar aquests caràcters ressaltats en línia 1558 01:04:19,210 --> 01:04:21,006 7 sigui, et sembla? 1559 01:04:21,006 --> 01:04:21,800 AUDIÈNCIA: [inaudible]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. Malan: Sí, així cub de x. 1561 01:04:25,570 --> 01:04:28,290 Llavors x és una variable, el que significa que té algun valor. 1562 01:04:28,290 --> 01:04:30,190 Afortunadament, és de tipus enter. 1563 01:04:30,190 --> 01:04:34,280 I pel fet que x és un int, això vol dir que puc passar a cub. 1564 01:04:34,280 --> 01:04:39,500 I tot i que estic reemplaçant el valor de x pel valor 1565 01:04:39,500 --> 01:04:42,780 x de cub, com ha estat el cas fins ara, cada vegada que 1566 01:04:42,780 --> 01:04:46,150 tenir signe igual i una línia de codi, les coses en el dret 1567 01:04:46,150 --> 01:04:49,090 s'executa i després s'assigna a la 1568 01:04:49,090 --> 01:04:50,150 valor de l'esquerra. 1569 01:04:50,150 --> 01:04:52,950 Així que l'ordre de les operacions és com esperaríem. 1570 01:04:52,950 --> 01:04:56,620 Així funciona això? 1571 01:04:56,620 --> 01:04:58,410 Bé, deixa baixar aquí. 1572 01:04:58,410 --> 01:04:59,970 Permetin-me obrir la meva finestra de terminal. 1573 01:04:59,970 --> 01:05:03,610 Permetin-me fan increment, Intro. 1574 01:05:03,610 --> 01:05:07,140 "Declaració implícita de 'cub' no és vàlid en funció 1575 01:05:07,140 --> 01:05:13,700 C99. "Com un part, C99 es refereix al llenguatge C, ja que era 1576 01:05:13,700 --> 01:05:16,790 definit el 1999, que era una actualització sobre la versió de 1577 01:05:16,790 --> 01:05:19,360 1989, que és una actualització sobre l'original. 1578 01:05:19,360 --> 01:05:21,740 Així que això és tot el que això significa. 1579 01:05:21,740 --> 01:05:24,250 >> Llavors, què significa que "la declaració implícita de 1580 01:05:24,250 --> 01:05:26,790 "Cub" funció no és vàlid? "És just aquí. 1581 01:05:26,790 --> 01:05:28,430 És allà, en la línia 12. 1582 01:05:28,430 --> 01:05:30,460 AUDIÈNCIA: [inaudible]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. Malan: Què és això? 1584 01:05:30,730 --> 01:05:32,470 AUDIÈNCIA: No és abans. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. Malan: No és abans. 1586 01:05:33,540 --> 01:05:34,740 Així que aquesta és la cosa. 1587 01:05:34,740 --> 01:05:38,190 C és una mica estúpid, o els compiladors de C són una mica estúpid. 1588 01:05:38,190 --> 01:05:41,060 Realment només fer el que els diuen que facin. 1589 01:05:41,060 --> 01:05:44,770 I, en particular, només llegir el seu codi de dalt a baix, 1590 01:05:44,770 --> 01:05:45,620 d'esquerra a dreta. 1591 01:05:45,620 --> 01:05:49,140 Així que si el compilador, Clang, llegeix el codi, línia 1, 1592 01:05:49,140 --> 01:05:50,120 s'adona de com fer això. 1593 01:05:50,120 --> 01:05:50,940 Oh, aquí arriba principal. 1594 01:05:50,940 --> 01:05:53,000 Bé, deixa seguir endavant i declarar una variable x. 1595 01:05:53,000 --> 01:05:54,160 Permetin-me imprimir alguna cosa. 1596 01:05:54,160 --> 01:05:55,890 Línia 7, què diables és el cub? 1597 01:05:55,890 --> 01:05:58,230 No és declarada en stdio.h. 1598 01:05:58,230 --> 01:06:00,950 No ve amb C. No tinc ni idea de què fer. 1599 01:06:00,950 --> 01:06:03,960 I així Clang només rescata i es tanca amb el missatge d'error. 1600 01:06:03,960 --> 01:06:05,850 Així que podem arreglar això en un parell de maneres. 1601 01:06:05,850 --> 01:06:10,530 Podem ensenyar el Clang cub és on amb només moure el 1602 01:06:10,530 --> 01:06:11,820 declaració és. 1603 01:06:11,820 --> 01:06:14,640 Així que vaig tallar i vaig sobre de principal. 1604 01:06:14,640 --> 01:06:17,770 Ara s'adonen que només perquè principal ja no és primer, és 1605 01:06:17,770 --> 01:06:19,150 sent executat per defecte. 1606 01:06:19,150 --> 01:06:20,060 Principal és principal. 1607 01:06:20,060 --> 01:06:21,022 És el nom de la funció per defecte. 1608 01:06:21,022 --> 01:06:22,930 No importa on es troba en un arxiu. 1609 01:06:22,930 --> 01:06:26,910 Però almenys ara Clang ha vist cub abans d'usar-lo. 1610 01:06:26,910 --> 01:06:28,500 Així que anem a veure si Clang és més feliç ara. 1611 01:06:28,500 --> 01:06:31,410 Feu increment, si compilar aquest moment. 1612 01:06:31,410 --> 01:06:33,060 >> Deixa córrer increment. 1613 01:06:33,060 --> 01:06:34,810 I, de fet, sembla estar funcionant. 1614 01:06:34,810 --> 01:06:36,810 Ara, vostè pot arribar a escenaris on eventualment 1615 01:06:36,810 --> 01:06:38,650 no és factible posar totes les funcions 1616 01:06:38,650 --> 01:06:39,740 per sobre de qualsevol altra funció. 1617 01:06:39,740 --> 01:06:42,140 Et quedes encallat en aquest bucle infinit en la realitat, 1618 01:06:42,140 --> 01:06:43,480 on aquest tipus vol ser aquí, però aquest 1619 01:06:43,480 --> 01:06:44,390 individu ha de ser-hi. 1620 01:06:44,390 --> 01:06:45,830 Així que això no sempre funciona. 1621 01:06:45,830 --> 01:06:49,020 Així que gràcies a Déu, C té una solució més elegant. 1622 01:06:49,020 --> 01:06:50,790 Vaig a posar això on era, només perquè 1623 01:06:50,790 --> 01:06:53,390 prefereix, com una qüestió de principi, que sempre el principal 1624 01:06:53,390 --> 01:06:55,550 a la part superior, perquè és només agradable veure el que aquest programa 1625 01:06:55,550 --> 01:06:56,920 fa per defecte. 1626 01:06:56,920 --> 01:06:58,950 I el que vaig a fer aquí és declarar el que s'anomena 1627 01:06:58,950 --> 01:07:00,250 un prototip. 1628 01:07:00,250 --> 01:07:05,730 Vaig a tornar a declarar la meva funció cúbica, literalment, 1629 01:07:05,730 --> 01:07:07,180 copiar i enganxar. 1630 01:07:07,180 --> 01:07:08,290 En realitat, això no és literal. 1631 01:07:08,290 --> 01:07:13,060 Així que, literalment, copiar i enganxar la línia 15 1632 01:07:13,060 --> 01:07:15,160 per sobre de la línia 6. 1633 01:07:15,160 --> 01:07:17,010 No importa el que la línia aquesta s'hagi apuntat. 1634 01:07:17,010 --> 01:07:18,380 Li passa a ser a la línia 4. 1635 01:07:18,380 --> 01:07:19,950 Però ha de ser abans de principal. 1636 01:07:19,950 --> 01:07:21,150 Però noti la diferència. 1637 01:07:21,150 --> 01:07:24,100 Línia 4 acaba amb un punt i coma, el que significa bo, 1638 01:07:24,100 --> 01:07:27,510 Clang, pren la meva paraula que hi ha una funció 1639 01:07:27,510 --> 01:07:31,350 anomenat cub que pren un int i retorna un int. 1640 01:07:31,350 --> 01:07:33,020 Però no vaig a dir-te el que és. 1641 01:07:33,020 --> 01:07:35,180 Només sé que em compromet a dir-li el temps. 1642 01:07:35,180 --> 01:07:38,490 I de fet, ara que està bé que es tracta a continuació. 1643 01:07:38,490 --> 01:07:41,275 >> Així que aquest és generalment millor, perquè llavors a la part superior de 1644 01:07:41,275 --> 01:07:44,240 seu arxiu, vostè pot recitar d'una tirada, de tir ràpid, una línia 1645 01:07:44,240 --> 01:07:46,470 cada un, el que els noms de les seves funcions són, quin és el seu 1646 01:07:46,470 --> 01:07:49,120 les entrades són, quines són les seves sortides són. 1647 01:07:49,120 --> 01:07:52,210 I per ser més clar, l'entrada general significa discussió o 1648 01:07:52,210 --> 01:07:54,110 paràmetre, sinònims. 1649 01:07:54,110 --> 01:07:56,890 Sortida significa valor de retorn, el que fa 1650 01:07:56,890 --> 01:07:58,700 mà cap a mi. 1651 01:07:58,700 --> 01:08:03,420 Així que en aquest cas que ens ocupa, la galleda s'ha declarat a la part superior, però 1652 01:08:03,420 --> 01:08:06,940 defineix, també conegut com aplicar, a la part inferior. 1653 01:08:06,940 --> 01:08:09,620 Així que ara anem a tornar aquí i torneu-la a. 1654 01:08:09,620 --> 01:08:13,430 Així que ara seguirem endavant i tornar a executar make, torneu a executar increment. 1655 01:08:13,430 --> 01:08:16,500 I ara sembla estar funcionant molt bé. 1656 01:08:16,500 --> 01:08:19,450 Així que ara podem seguir endavant i factoritzar una mena de 1657 01:08:19,450 --> 01:08:23,720 cervesa exemple en aquesta quarta versió. 1658 01:08:23,720 --> 01:08:25,590 Així que em baixi aquí. 1659 01:08:25,590 --> 01:08:28,149 I noti quin tipus de prendre seriosament aquesta lliçó ara. 1660 01:08:28,149 --> 01:08:31,140 El fet que jo estava cantant la mateixa estrofa una i altra 1661 01:08:31,140 --> 01:08:34,130 una i altra vegada, la línia de cor en la cançó mateixa, es va sentir 1662 01:08:34,130 --> 01:08:36,439 Com per què no ho faig factor que en una funció? 1663 01:08:36,439 --> 01:08:38,470 I de fet, aquesta ha de ser una de les motivacions. 1664 01:08:38,470 --> 01:08:40,960 A més del fet que una altra persona al món que desitgi 1665 01:08:40,960 --> 01:08:42,390 utilitzar una funció de cub - 1666 01:08:42,390 --> 01:08:44,560 aquesta és una bona raó per factoritzar una mica i escriure el seu 1667 01:08:44,560 --> 01:08:45,720 funció personalitzada - 1668 01:08:45,720 --> 01:08:48,720 si hi ha un tros de codi en el seu programa que només fa 1669 01:08:48,720 --> 01:08:51,370 sentit conceptual, quin tipus de necessitat de donar un 1670 01:08:51,370 --> 01:08:53,740 nom - com en aquest cas, chorus - 1671 01:08:53,740 --> 01:08:57,380 llavors vostè pot escriure de manera similar que com una funció separada. 1672 01:08:57,380 --> 01:08:59,560 No ha d'escriure tot en principal si només 1673 01:08:59,560 --> 01:09:02,609 se sent més net per separar i donar-li un nom. 1674 01:09:02,609 --> 01:09:05,529 >> Així que en aquest cas aquí, fixa't que tinc un comentari sobre 1675 01:09:05,529 --> 01:09:06,859 aquesta funció que només canta sobre el 1676 01:09:06,859 --> 01:09:08,630 números especificats d'ampolles. 1677 01:09:08,630 --> 01:09:10,609 Noteu aquí que no cal trucar a aquests 1678 01:09:10,609 --> 01:09:12,520 coses d'entrada i sortida. 1679 01:09:12,520 --> 01:09:16,090 De fet, aquesta vegada m'acaba de trucar la meva entrada B per ampolla. 1680 01:09:16,090 --> 01:09:19,960 I fixin-aquí, nul · suggereix què? 1681 01:09:19,960 --> 01:09:21,309 Aquest cor - 1682 01:09:21,309 --> 01:09:22,660 AUDIÈNCIA: No l'hi torni. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. Malan: No es troba cap valor. 1684 01:09:23,870 --> 01:09:26,800 I, en efecte, les funcions no han de tornar valors. 1685 01:09:26,800 --> 01:09:28,060 Ells només poden fer alguna cosa. 1686 01:09:28,060 --> 01:09:30,270 Ells poden tenir el que es denominen efectes secundaris, que en aquest 1687 01:09:30,270 --> 01:09:33,109 cas és només un munt d'impressió a la pantalla. 1688 01:09:33,109 --> 01:09:36,580 Així notar que aquest codi aquí, literalment va robar a 1689 01:09:36,580 --> 01:09:37,680 l'exemple anterior. 1690 01:09:37,680 --> 01:09:39,930 L'única diferència és que en lloc d'utilitzar com el meu 1691 01:09:39,930 --> 01:09:42,890 variable, ara ho estic fent servir b com el meu variable. 1692 01:09:42,890 --> 01:09:45,880 Així que tinc aquí baix b, b tinc aquí, tinc b 1693 01:09:45,880 --> 01:09:47,109 menys 1 aquí baix. 1694 01:09:47,109 --> 01:09:49,279 Però el codi és exactament el mateix. 1695 01:09:49,279 --> 01:09:52,529 Però a mostrar ara com podem utilitzar això, deixa anar 1696 01:09:52,529 --> 01:09:56,780 endavant i canviar realment es tracta d'un bucle for. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Així que he robat que a partir del nostre exemple anterior. 1699 01:10:06,230 --> 01:10:08,970 Anteriorment, està en la línia 37, que hauria començat 1700 01:10:08,970 --> 01:10:10,640 cantant aquesta cançó molest. 1701 01:10:10,640 --> 01:10:15,810 Però en canvi, jo només vaig a trucar ara cor de i. 1702 01:10:15,810 --> 01:10:16,870 Fet. 1703 01:10:16,870 --> 01:10:20,260 Així que ara a cada iteració d'aquest bucle, dic a aquest altre 1704 01:10:20,260 --> 01:10:22,220 funció, cor, que es va ocórrer escriure. 1705 01:10:22,220 --> 01:10:24,110 No va ser escrit per algú més anys. 1706 01:10:24,110 --> 01:10:27,930 Però cor, per la seva banda, utilitza printf per imprimir 1707 01:10:27,930 --> 01:10:29,840 a terme aquestes quatre línies. 1708 01:10:29,840 --> 01:10:32,720 Però el fet, sóc a cor una i altra vegada en una 1709 01:10:32,720 --> 01:10:35,900 bucle significa que vaig a aconseguir, al final, el 1710 01:10:35,900 --> 01:10:39,310 cançó exactament igual que tinc fins ara. 1711 01:10:39,310 --> 01:10:42,130 Així que en resum, ara si miro cap enrere en el meu codi, tot i que 1712 01:10:42,130 --> 01:10:44,240 funcionalment és equivalent adonar que és 1713 01:10:44,240 --> 01:10:46,020 començant a arribar encara més llegible. 1714 01:10:46,020 --> 01:10:48,410 Jo no sé exactament com getInt 1715 01:10:48,410 --> 01:10:49,250 s'implementa. 1716 01:10:49,250 --> 01:10:52,050 Francament, no sé com s'implementa cor. 1717 01:10:52,050 --> 01:10:52,970 Però no m'importa. 1718 01:10:52,970 --> 01:10:55,620 No m'importa, perquè ara puc ordenar de, com a ésser humà, llegir 1719 01:10:55,620 --> 01:10:57,050 aquest fons de dalt. 1720 01:10:57,050 --> 01:10:59,950 I pel fet que les funcions es denominen d'acord amb el que 1721 01:10:59,950 --> 01:11:02,910 fer, el meu codi és cada vegada més fàcil de llegir. 1722 01:11:02,910 --> 01:11:05,190 I com els nostres programes d'aconseguir molt més complex - 1723 01:11:05,190 --> 01:11:07,220 a finals del semestre, se li escrivint centenars de línies 1724 01:11:07,220 --> 01:11:10,970 de codi en llenguatges com PHP i JavaScript i similars - 1725 01:11:10,970 --> 01:11:13,550 trobareu que és molt més fàcil de fer un seguiment de 1726 01:11:13,550 --> 01:11:14,080 el que has fet. 1727 01:11:14,080 --> 01:11:15,810 I quan comenci a col · laborar amb amics o 1728 01:11:15,810 --> 01:11:19,010 socis o companys de treball, vostè serà capaç d'escriure molt més 1729 01:11:19,010 --> 01:11:22,910 programes massius de començar a fer exercici aquests bàsics 1730 01:11:22,910 --> 01:11:23,990 blocs de construcció. 1731 01:11:23,990 --> 01:11:25,550 >> Així que amb això dit, per què no en diuen un dia? 1732 01:11:25,550 --> 01:11:27,190 I ens veiem el dimecres. 1733 01:11:27,190 --> 01:11:33,611 [Aplaudiments]