1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] David J. MALAN: Bine, acest lucru este CS50, iar acest lucru este 2 00:00:11,630 --> 00:00:14,790 începe de doua saptamani. 3 00:00:14,790 --> 00:00:16,300 Thank tine. 4 00:00:16,300 --> 00:00:19,000 Să ne începem aici cu un telefon. 5 00:00:19,000 --> 00:00:30,005 Sunt pe cale să formați 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Acesta este CS50. 7 00:00:31,230 --> 00:00:33,930 Pentru Boy Transfer, apăsați 1. 8 00:00:33,930 --> 00:00:36,660 Pentru a porni din nou, apăsați 9. 9 00:00:36,660 --> 00:00:38,180 David J. MALAN: Deci, a spus el pentru Boy Transfer, apăsați 1. 10 00:00:38,180 --> 00:00:41,560 Deci, vom apăsați 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Care este originea ta? 12 00:00:43,230 --> 00:00:45,340 Pentru quad, apăsați 1. 13 00:00:45,340 --> 00:00:47,080 Mather, apăsați 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, apăsați 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, apăsați 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, apăsați 5. 17 00:00:53,210 --> 00:00:55,660 Pentru a porni din nou, apăsați 0. 18 00:00:55,660 --> 00:00:59,590 David J. MALAN: Vom apăsați 1 pentru quad. 19 00:00:59,590 --> 00:01:03,610 CS50: de transfer următoare lasa in acest moment la ora 1:10, și 20 00:01:03,610 --> 00:01:09,820 apoi la 1:20, 1:30 pm, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Acest lucru este CS50. 22 00:01:12,030 --> 00:01:15,570 >> David J. MALAN: Deci asta e vocea lui CS50. 23 00:01:15,570 --> 00:01:18,030 Și e un exemplu de felul de proiecte finale, pentru 24 00:01:18,030 --> 00:01:19,500 exemplu, puteți mușca spre 25 00:01:19,500 --> 00:01:20,600 sfârșitul semestrului. 26 00:01:20,600 --> 00:01:23,840 De exemplu, faptul că există shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 de fapt, un proiect pe care am scris prima după luarea CS51 28 00:01:28,200 --> 00:01:29,740 înapoi, atunci când am fost un student. 29 00:01:29,740 --> 00:01:32,250 Și aici a fost sursă de inspirație atunci, tot ce aveam era 30 00:01:32,250 --> 00:01:34,320 listele tiparite de autobuz de transfer, și nu a existat nici 31 00:01:34,320 --> 00:01:35,970 Noțiunea de a privi lucrurile on-line. 32 00:01:35,970 --> 00:01:38,730 Și așa am un fel de porumbel într-un singur week-end, turnat prin 33 00:01:38,730 --> 00:01:41,460 tipărite program, și portat la un program de calculator. 34 00:01:41,460 --> 00:01:43,790 În timp, program de calculator sa întâmplat să fie scrise 35 00:01:43,790 --> 00:01:47,110 în C. Și tu, de fapt ea a fugit de transfer Boy tastarea la o 36 00:01:47,110 --> 00:01:48,600 clipește solicita ca ne-am făcut până acum. 37 00:01:48,600 --> 00:01:50,450 Dar, peste ani, a evoluat într-o clipă 38 00:01:50,450 --> 00:01:51,390 mesaje bot. 39 00:01:51,390 --> 00:01:53,970 Este evoluat, mai recent, în acest site, într-o 40 00:01:53,970 --> 00:01:57,720 SMS-pe bază de instrument, precum și în acest instrument de voce bazate pe. 41 00:01:57,720 --> 00:02:00,170 Și acest lucru este de a face aluzie la felul de lucruri pe care le puteți 42 00:02:00,170 --> 00:02:02,380 face pentru tine până la sfârșitul semestrului lui. 43 00:02:02,380 --> 00:02:05,490 >> De exemplu, acolo, versiunea de SMS-uri de transfer se intampla Boy 44 00:02:05,490 --> 00:02:06,510 să funcționeze, după cum urmează. 45 00:02:06,510 --> 00:02:10,880 În cazul în care, pe telefonul mobil, trimite un mesaj text la 41411 și 46 00:02:10,880 --> 00:02:14,300 trimite apoi sboy simbolul special, pentru Boy de transfer, 47 00:02:14,300 --> 00:02:18,350 urmat de A și B, unde A este o origine și B este o 48 00:02:18,350 --> 00:02:19,070 destinație - 49 00:02:19,070 --> 00:02:21,030 de exemplu, Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 ceea ce ar trebui să mă întorc în câteva secunde este un text 51 00:02:23,330 --> 00:02:25,820 mesaj de la Boy Transfer vă spun exact când 52 00:02:25,820 --> 00:02:28,990 navete pentru următoarele câteva sunt, din acest punct A merge la faptul că 53 00:02:28,990 --> 00:02:29,640 punctul B. 54 00:02:29,640 --> 00:02:32,510 Și acesta este un exemplu mai general a ceea ce este cunoscut drept 55 00:02:32,510 --> 00:02:33,920 folosind un API. 56 00:02:33,920 --> 00:02:36,930 >> Deci, de exemplu, acest lucru aici este doar shuttleboy.cs50.net, 57 00:02:36,930 --> 00:02:39,300 real web-based încarnare de acest lucru. 58 00:02:39,300 --> 00:02:42,480 Dar datele care subliniază acest lucru și aplicații de altă natură care CS50 59 00:02:42,480 --> 00:02:45,560 a dezvoltat sunt toate expuse pentru toată lumea aici, în forma 60 00:02:45,560 --> 00:02:49,340 de API-uri, interfețe de programare a aplicațiilor. 61 00:02:49,340 --> 00:02:52,220 Si asta e doar un mod fantezist de a spune că oamenii ne place pe 62 00:02:52,220 --> 00:02:56,010 Internet și altele au petrecut ceva timp pentru a crea 63 00:02:56,010 --> 00:02:59,970 software-ul pe care le puteți folosi pentru a apuca de date de la noi și 64 00:02:59,970 --> 00:03:02,510 apoi construi aplicații proprii pe partea de sus 65 00:03:02,510 --> 00:03:03,840 de acel set de date. 66 00:03:03,840 --> 00:03:06,610 Deci, de exemplu, acest băiat de transfer API pagina aici, care 67 00:03:06,610 --> 00:03:09,390 se întâmplă să fie în manualul de CS50, în esență, documente 68 00:03:09,390 --> 00:03:13,080 cum poti sa te duci despre a cere CS50 serverele de date. 69 00:03:13,080 --> 00:03:16,240 De exemplu, dacă sunteți familiarizat cu CSV fișiere, virgula 70 00:03:16,240 --> 00:03:18,940 de valori separate, acestea sunt doar un fel de rapid și murdar 71 00:03:18,940 --> 00:03:20,310 Excel-cum ar fi fișiere. 72 00:03:20,310 --> 00:03:23,110 Astfel, puteți solicita Boy transfer pentru toate datele de pe toate 73 00:03:23,110 --> 00:03:25,090 case si coordonatele GPS ale acestora, și veți obține 74 00:03:25,090 --> 00:03:27,300 înapoi, în esență, o foaie de calcul ca și că această 75 00:03:27,300 --> 00:03:30,820 puteți citi apoi într-un program de propria dvs. și apoi 76 00:03:30,820 --> 00:03:33,250 genera rezultate, la fel ca Boy transfer în sine 77 00:03:33,250 --> 00:03:34,160 se întâmplă să facem. 78 00:03:34,160 --> 00:03:37,030 Pentru cei mai familiare, reprezentări mai moderne de date 79 00:03:37,030 --> 00:03:39,420 includ JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Ceva se va întoarce la tine spre 81 00:03:40,620 --> 00:03:41,720 sfârșitul semestrului. 82 00:03:41,720 --> 00:03:45,440 >> Dar, din nou, aceasta este doar una din mai multe de API-uri proprii CS50 lui. 83 00:03:45,440 --> 00:03:48,320 Și lucrul interesant este acum, în aceste zile, Facebook și 84 00:03:48,320 --> 00:03:51,110 Twitter si Google și destul de mult fiecare site-ul web populare din 85 00:03:51,110 --> 00:03:54,130 acolo are un fel de API, ceea ce înseamnă că dacă ai citit 86 00:03:54,130 --> 00:03:56,620 documentația pe site-ul lor, vă înscrieți pentru un 87 00:03:56,620 --> 00:03:59,980 cont, puteți începe apoi scrierea software-ul pe partea de sus a 88 00:03:59,980 --> 00:04:03,680 indiferent de instrumente sau de date care compania nu oferă. 89 00:04:03,680 --> 00:04:06,210 Și astfel unul dintre semenii noștri de predare proprii câțiva ani înapoi 90 00:04:06,210 --> 00:04:07,620 a scris o versiune pentru Mac a acestui. 91 00:04:07,620 --> 00:04:10,990 Deci, la link-ul cu denumirea Mac aici, la stânga sus, puteți de fapt, 92 00:04:10,990 --> 00:04:13,940 descărca un Mac OS widget care ruleaza pe Mac ta de a face 93 00:04:13,940 --> 00:04:15,040 aceleași tipuri de lucruri. 94 00:04:15,040 --> 00:04:17,970 Deci e vorba de bazându-se pe partea de sus a seturilor de date cum ar fi acestea. 95 00:04:17,970 --> 00:04:21,839 Dar mai mult pe faptul că spre sfârșitul semestrului. 96 00:04:21,839 --> 00:04:25,780 >> Deci, haideți să se arunca cu capul în foarte repede la un bug, doar pentru a obține un fel de 97 00:04:25,780 --> 00:04:27,990 lucrurile încălzit astăzi, și cred că din nou pe unele dintre 98 00:04:27,990 --> 00:04:29,660 lucruri ne-am uitat în săptămâna trecută. 99 00:04:29,660 --> 00:04:32,840 În special, lasă-mă să mergeți mai departe și trageți în sus, să zicem, 100 00:04:32,840 --> 00:04:34,080 acest exemplu aici. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, aceasta este disponibilă pe site-ul cursului, dacă doriți 102 00:04:37,500 --> 00:04:40,250 Vrei să-l descărcați și scormoni în jurul valorii de tine. 103 00:04:40,250 --> 00:04:43,520 Dar haideți să zoom in, aici, la acest program destul de scurt, și doar 104 00:04:43,520 --> 00:04:46,550 o recapitulare super-rapid al unora dintre pietrele de temelie de bază care 105 00:04:46,550 --> 00:04:48,880 suntem cu adevărat de gând să înceapă doar luați de la sine. 106 00:04:48,880 --> 00:04:51,860 >> Deci, chestii albastru, în linii la 1 la 9, sunt doar 107 00:04:51,860 --> 00:04:53,670 softball întrebări. 108 00:04:53,670 --> 00:04:54,590 Deci, acestea sunt doar comentarii. 109 00:04:54,590 --> 00:04:56,230 Ei nu au nici o semnificație funcțională. 110 00:04:56,230 --> 00:04:58,460 Dar sunt comentarii în sensul că acestea sunt observă că 111 00:04:58,460 --> 00:05:02,010 Eu, om, a făcut să mă astfel încât în ​​curs și, după 112 00:05:02,010 --> 00:05:04,340 prelegere, îmi amintesc de fapt, ceea ce acest program 113 00:05:04,340 --> 00:05:07,120 face fără a fi nevoie de a citi prin ea linie cu linie și 114 00:05:07,120 --> 00:05:08,990 recrearea istorie în mintea mea. 115 00:05:08,990 --> 00:05:11,000 Mai mult decât atât, în cazul în care am înmâna acest program la altcineva ca 116 00:05:11,000 --> 00:05:14,420 te, e mult mai clar pentru tine, din cauza comentariilor de acest gen, 117 00:05:14,420 --> 00:05:16,680 ceea ce de fapt face programul, sau cel puțin ceea ce 118 00:05:16,680 --> 00:05:18,210 Programul presupune să faci. 119 00:05:18,210 --> 00:05:20,760 Indiferent dacă este sau nu este corectă este o altă problemă cu totul. 120 00:05:20,760 --> 00:05:25,040 Acum, în C, cu multi-linie comentarii, amintim că pe linia 121 00:05:25,040 --> 00:05:27,880 de aici nu e simbolul magie, / *. 122 00:05:27,880 --> 00:05:30,380 Aceasta înseamnă aici vine începutul unui comentariu. 123 00:05:30,380 --> 00:05:34,560 Și nimic altceva contează până când ajungeți la sfârșitul terminator, 124 00:05:34,560 --> 00:05:36,700 care este * /, opusul. 125 00:05:36,700 --> 00:05:39,120 Deci, faptul că am 80-unele stele ciudate aici la 126 00:05:39,120 --> 00:05:41,550 la stânga la dreapta este de fapt doar un detaliu estetic. 127 00:05:41,550 --> 00:05:43,370 Ea nu are nici un sens funcțional. 128 00:05:43,370 --> 00:05:44,490 >> Acum, ce zici line 11? 129 00:05:44,490 --> 00:05:46,940 Ce înseamnă acest face în termeni de nespecialist? 130 00:05:51,560 --> 00:05:52,540 Ce-i asta? 131 00:05:52,540 --> 00:05:54,280 PUBLICUL: Include standard. 132 00:05:54,280 --> 00:05:54,740 David J. MALAN: Bine, bine. 133 00:05:54,740 --> 00:05:57,500 Deci, aceasta include biblioteca stdio.h. 134 00:05:57,500 --> 00:05:58,230 Deci, ce înseamnă asta? 135 00:05:58,230 --> 00:06:01,570 Ei bine, în interiorul acelui dosar, stdio.h, sunt o grămadă de 136 00:06:01,570 --> 00:06:03,320 funcției declarații - 137 00:06:03,320 --> 00:06:05,290 că este, cod care altcineva a scris. 138 00:06:05,290 --> 00:06:08,160 Și un exemplu perfect de o funcție care este declarată în 139 00:06:08,160 --> 00:06:10,250 stdio.h este - 140 00:06:10,250 --> 00:06:11,980 care favorit pana acum? 141 00:06:11,980 --> 00:06:14,300 Deci printf, una dintre cele mai comune de a utiliza, cu siguranță, 142 00:06:14,300 --> 00:06:15,840 de timpuriu, de la faptul că biblioteca este acolo. 143 00:06:15,840 --> 00:06:19,290 Dacă aș exclude această linie de cod, zăngănit este de gând să țipi 144 00:06:19,290 --> 00:06:22,550 la mine ceva despre utilizarea unui simbol nedeclarată. 145 00:06:22,550 --> 00:06:24,930 Ceva nedeclarată este, probabil, cuvinte cheie, deoarece 146 00:06:24,930 --> 00:06:27,770 nu am informat compilatorul ce arată printf 147 00:06:27,770 --> 00:06:29,230 Vrei excepția cazului în care vom include acea linie. 148 00:06:29,230 --> 00:06:31,830 Și mai mult în jos pe Pământ, într-adevăr, ce linia se spune este 149 00:06:31,830 --> 00:06:34,890 deschide acel fișier, stdio.h, ori de câte ori este pe serverul de 150 00:06:34,890 --> 00:06:38,200 hard disk sau pe o unitate hard aparatului, și copy-paste-l 151 00:06:38,200 --> 00:06:40,240 chiar acolo în dosarul meu, fără să-mi 152 00:06:40,240 --> 00:06:41,730 având în a face acest lucru manual. 153 00:06:41,730 --> 00:06:44,420 >> Acum, odată ce vom ajunge aici la principal, nu după mult timp vom începe 154 00:06:44,420 --> 00:06:46,900 pune deoparte ceea ce int și ceea ce este nul. 155 00:06:46,900 --> 00:06:48,430 Dar pentru moment, să ne uităm la cele trei linii 156 00:06:48,430 --> 00:06:50,350 în termen de 15 până la 17. 157 00:06:50,350 --> 00:06:52,250 Aceasta aici am pretinde ca buggy. 158 00:06:52,250 --> 00:06:54,900 Linia 7 in comentariile mele spune: "Ar trebui să imprimați 10 159 00:06:54,900 --> 00:06:59,410 asteriscuri, dar nu "de ce. acest lucru nu se imprimă, de fapt, 160 00:06:59,410 --> 00:07:01,097 10 stele de acest fel? 161 00:07:01,097 --> 00:07:02,347 PUBLICUL: [neauzit]. 162 00:07:05,210 --> 00:07:05,800 David J. MALAN: Exact. 163 00:07:05,800 --> 00:07:08,720 Deci, observăm că suntem începe să numere de la 0. 164 00:07:08,720 --> 00:07:10,780 Și aceasta este de fapt o convenție în programare și 165 00:07:10,780 --> 00:07:13,230 informatică, în general, mai mult, începe să numeri 166 00:07:13,230 --> 00:07:14,610 de la 0 în loc de 1. 167 00:07:14,610 --> 00:07:16,690 Și acest fapt doar derivă din faptul că, pentru 168 00:07:16,690 --> 00:07:18,940 exemplu, atunci când am avut opt ​​oameni pe scenă, atunci când 169 00:07:18,940 --> 00:07:20,680 nimeni nu a fost ridicarea mâinii lor, au fost 170 00:07:20,680 --> 00:07:22,340 toate în mod eficient zerouri. 171 00:07:22,340 --> 00:07:24,260 Și așa e doar un fel de convenție computer, astfel, 172 00:07:24,260 --> 00:07:26,030 Prin urmare, pentru a începe numărarea de la 0. 173 00:07:26,030 --> 00:07:29,130 În cazul în care este cel mai mic număr vă poate reprezenta în binar. 174 00:07:29,130 --> 00:07:32,270 >> Deci, aici am început initializarea i la 0. 175 00:07:32,270 --> 00:07:34,230 Ne-am stabilit eu egal cu 0. 176 00:07:34,230 --> 00:07:37,780 Dar apoi m-am făcut această greșeală aici, spunând i este mai mică sau 177 00:07:37,780 --> 00:07:38,820 egal cu 10. 178 00:07:38,820 --> 00:07:41,700 Dar, dacă credeți că prin, dacă am începe de la 0 și apoi plec 179 00:07:41,700 --> 00:07:46,410 până la 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, eu de fapt de gând să 180 00:07:46,410 --> 00:07:49,980 imprima 11 stele pentru ecran, pentru că m-am dus sus 181 00:07:49,980 --> 00:07:52,410 la și egal cu 10. 182 00:07:52,410 --> 00:07:55,090 Deci Easy Fix aici, atunci este ceea ce? 183 00:07:55,090 --> 00:07:56,070 PUBLICUL: [neauzit]. 184 00:07:56,070 --> 00:07:57,350 David J. MALAN: Doar schimba-l la mai puțin de. 185 00:07:57,350 --> 00:07:59,700 Dacă chiar vrei, ai putea face acest lucru. 186 00:07:59,700 --> 00:08:01,370 Dar, în general, care a dezaprobat. 187 00:08:01,370 --> 00:08:04,020 Și astfel începe să numere de la 0 este doar ceva ce ar trebui să 188 00:08:04,020 --> 00:08:05,510 de obicei, te obișnuiești. 189 00:08:05,510 --> 00:08:07,810 Acum, ce zici de această construcție întreagă în sine? 190 00:08:07,810 --> 00:08:10,640 Această linie de 15 demarks o buclă pentru. 191 00:08:10,640 --> 00:08:12,510 Deci, pentru a nu este o funcție. 192 00:08:12,510 --> 00:08:13,640 E doar o declarație. 193 00:08:13,640 --> 00:08:16,180 E o construcție looping, cum am văzut în Scratch. 194 00:08:16,180 --> 00:08:17,600 Și are trei părți. 195 00:08:17,600 --> 00:08:19,740 Observați că există o prima parte a 196 00:08:19,740 --> 00:08:21,350 stânga punct și virgulă. 197 00:08:21,350 --> 00:08:24,200 E partea de mijloc între cele două semne punct și virgulă. 198 00:08:24,200 --> 00:08:26,250 Și apoi e partea dreapta spre dreapta 199 00:08:26,250 --> 00:08:27,640 din punct și virgulă două. 200 00:08:27,640 --> 00:08:31,822 Acum, prima dintre acestea nu ce? 201 00:08:31,822 --> 00:08:33,679 PUBLICUL: [neauzit]. 202 00:08:33,679 --> 00:08:34,270 David J. MALAN: Inapoi acolo? 203 00:08:34,270 --> 00:08:34,816 Da? 204 00:08:34,816 --> 00:08:35,980 PUBLICUL: inițializare. 205 00:08:35,980 --> 00:08:36,850 >> David J. MALAN: inițializare. 206 00:08:36,850 --> 00:08:37,840 Deci, ce înseamnă? 207 00:08:37,840 --> 00:08:40,690 Noi am declarat-o variabilă numită i. 208 00:08:40,690 --> 00:08:43,840 Acesta este de tip int, pentru că am specificat int i. 209 00:08:43,840 --> 00:08:46,470 Iar eu am initializarea la valoarea de 0. 210 00:08:46,470 --> 00:08:47,730 Deci, ce e asta spune de fapt? 211 00:08:47,730 --> 00:08:50,680 Este eficient pentru a spune calculatorului hei, da-mi destul de 212 00:08:50,680 --> 00:08:53,660 de memorie, RAM suficientă, pentru a se potrivi un număr, iar apoi a pus 213 00:08:53,660 --> 00:08:56,130 Numărul 0 în acea bucată de RAM. 214 00:08:56,130 --> 00:08:59,100 Și, ca o paranteză, cât de mare este un int de obicei, cel puțin în interiorul 215 00:08:59,100 --> 00:09:00,280 a aparatului? 216 00:09:00,280 --> 00:09:01,000 PUBLICUL: 32 de biți. 217 00:09:01,000 --> 00:09:01,670 David J. MALAN: 32 biti. 218 00:09:01,670 --> 00:09:04,890 Deci asta înseamnă să-mi dai 32 de biți, altfel cunoscut sub numele de 4 octeți, 219 00:09:04,890 --> 00:09:07,250 și a pus în ea valoarea 0, ceea ce este destul de ușor, deoarece 220 00:09:07,250 --> 00:09:09,110 Aceasta înseamnă doar selecteaza toate biții la 0. 221 00:09:09,110 --> 00:09:11,690 >> Deci, acum, a doua parte aici este condiție. 222 00:09:11,690 --> 00:09:14,590 Și condiție, așa cum sugerează și numele, este ceea ce se verifică 223 00:09:14,590 --> 00:09:18,100 din nou și din nou și din nou pentru a stabili dacă e adevărat sau fals. 224 00:09:18,100 --> 00:09:21,410 Deci, aceasta este doar că fac următoarele linii de cod - 225 00:09:21,410 --> 00:09:23,950 și anume linia 16, pentru că e singurul indentate 226 00:09:23,950 --> 00:09:24,820 dedesubt - 227 00:09:24,820 --> 00:09:26,980 atât timp cât i este mai mic de 10. 228 00:09:26,980 --> 00:09:30,520 Și după fiecare iterație prin aceasta bucla, nu 229 00:09:30,520 --> 00:09:33,840 incrementare, care în acest caz este i + +. 230 00:09:33,840 --> 00:09:35,580 Acum, nu trebuie să fie i + +. 231 00:09:35,580 --> 00:09:37,610 Ar putea fi i -. 232 00:09:37,610 --> 00:09:39,860 Dar dacă am făcut acest lucru, ceea ce se întâmplă comportamentul 233 00:09:39,860 --> 00:09:41,370 a fi de acest program? 234 00:09:41,370 --> 00:09:42,290 PUBLICUL: Va fi o buclă infinită. 235 00:09:42,290 --> 00:09:44,060 David J. MALAN: O să fie un fel de buclă infinită, 236 00:09:44,060 --> 00:09:47,720 dacă nu vom avea noroc după negativ 2 miliarde sau cam asa ceva. 237 00:09:47,720 --> 00:09:51,320 Poate lucrurile se vor încadra în jurul valorii de, doar prin natura finit 238 00:09:51,320 --> 00:09:53,930 numărul de biți pe care le-am alocat pentru un int. 239 00:09:53,930 --> 00:09:56,270 Dar e cu siguranță o să itera mult mai puțin de 10 și 240 00:09:56,270 --> 00:09:58,630 cu siguranță mai mult de 11 de ori aici. 241 00:09:58,630 --> 00:10:02,240 >> Și acum, la fel ca o parte, realizăm că i + + și i - 242 00:10:02,240 --> 00:10:04,420 sunt de fapt doar zahar sintactic. 243 00:10:04,420 --> 00:10:07,210 E doar notația prescurtată pentru ceea ce e un pic mai mult 244 00:10:07,210 --> 00:10:08,720 în mod explicit în scris, după cum urmează: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Care este identic cu i + +. 247 00:10:13,460 --> 00:10:15,860 Este doar un fel de a spune pare mai frumoasa i + +. 248 00:10:15,860 --> 00:10:17,490 E mai succint, mai ușor de citit. 249 00:10:17,490 --> 00:10:19,030 Și astfel, cei mai mulți oameni fac asta în loc. 250 00:10:19,030 --> 00:10:21,840 Dar acest lucru este identic funcțional la 251 00:10:21,840 --> 00:10:22,900 ceea ce am văzut. 252 00:10:22,900 --> 00:10:27,770 Deci, pe scurt, fix rapid aici este doar să spun itera i 253 00:10:27,770 --> 00:10:30,690 de la 0 tot drumul până la mai puțin de 10. 254 00:10:30,690 --> 00:10:32,700 Și apoi vom avea într-adevăr, 10 stele. 255 00:10:32,700 --> 00:10:33,430 >> Deci, haideți să încercăm asta. 256 00:10:33,430 --> 00:10:35,310 Lasă-mă să deschid terminalul de la partea de jos. 257 00:10:35,310 --> 00:10:37,420 Lasă-mă să merg în directorul care aceasta este inch 258 00:10:37,420 --> 00:10:40,030 Și am de gând să-l compilați manual cu zăngănit de acum. 259 00:10:40,030 --> 00:10:44,880 Și am de gând să compilați ca buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 Și acum buggy1, de ce nu există un astfel de fișier sau director 261 00:10:50,280 --> 00:10:52,026 buggy1 sunat? 262 00:10:52,026 --> 00:10:53,850 PUBLICUL: [neauzit]. 263 00:10:53,850 --> 00:10:54,240 David J. MALAN: Da. 264 00:10:54,240 --> 00:10:55,420 Deci, de fapt numit a.out. 265 00:10:55,420 --> 00:10:57,480 Deci, dacă aveți o amintesc doar zăngănit, în cazul în care este zăngănit 266 00:10:57,480 --> 00:11:00,420 compilator, si nu specificați numele pe care doriți să 267 00:11:00,420 --> 00:11:03,550 da programul, se va implicit a.out. 268 00:11:03,550 --> 00:11:05,030 Deci, într-adevăr, dacă fac ls - 269 00:11:05,030 --> 00:11:05,510 Hopa. 270 00:11:05,510 --> 00:11:07,680 Și am didn't - problema negru-și-alb unele dintre 271 00:11:07,680 --> 00:11:08,840 te-ai confruntat a fost stabilit. 272 00:11:08,840 --> 00:11:10,670 Dar lasă-mă să fac asta. 273 00:11:10,670 --> 00:11:14,570 Momentan nu avem a.out pe partea stângă acolo. 274 00:11:14,570 --> 00:11:17,360 Deci avem de a rula a.out loc de buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Așa că lasă-mă să mergeți mai departe și de a face acest lucru. 276 00:11:19,140 --> 00:11:22,840 / A.out., Enter. 277 00:11:22,840 --> 00:11:26,160 Și eu se pare că nu am făcut ce? 278 00:11:26,160 --> 00:11:26,620 PUBLICUL: Salvare. 279 00:11:26,620 --> 00:11:27,390 David J. MALAN: Salvați fișierul meu. 280 00:11:27,390 --> 00:11:31,520 Astfel încât este ușor de rezolvat prin lovirea S de control, sau de gând să 281 00:11:31,520 --> 00:11:33,450 File, Save, la fel ca în cele mai multe programe. 282 00:11:33,450 --> 00:11:36,360 Lasă-mă să merg în jos aici, a goli ecranul, rulați-l din nou. 283 00:11:36,360 --> 00:11:37,960 Si inca exista un bug. 284 00:11:37,960 --> 00:11:41,618 Deci, ceea ce se întâmplă - 285 00:11:41,618 --> 00:11:42,980 PUBLICUL: Nu ai compila. 286 00:11:42,980 --> 00:11:44,040 David J. MALAN: Ah, bine. 287 00:11:44,040 --> 00:11:45,010 Nu l-am compila. 288 00:11:45,010 --> 00:11:47,250 Ca un idiot, mă uit la codul pentru a vedea ce sa întâmplat. 289 00:11:47,250 --> 00:11:51,275 Deci buggy1.c zăngănit, acum a.out. 290 00:11:51,275 --> 00:11:52,640 Și Pfiu, salvat. 291 00:11:52,640 --> 00:11:55,090 >> Deci, se pare un pic urât, deoarece nu exista nici o linie nouă 292 00:11:55,090 --> 00:11:55,970 oriunde în program. 293 00:11:55,970 --> 00:11:57,390 Dar, din nou, asta e doar un detaliu estetic. 294 00:11:57,390 --> 00:11:59,430 Și, cel puțin dacă socotim pe cei afară, ar trebui să ne 295 00:11:59,430 --> 00:12:01,160 vedea acum 10 stele respective. 296 00:12:01,160 --> 00:12:03,260 Ei bine, ce zici de această a doua de warm-up de exemplu? 297 00:12:03,260 --> 00:12:07,750 Deci, în buggy2, eu pretind că această versiune, de asemenea, se va imprima 298 00:12:07,750 --> 00:12:10,110 10 stele, una pe fiecare rând. 299 00:12:10,110 --> 00:12:12,340 Deci de data asta, am un caracter linie noua, doar pentru a face 300 00:12:12,340 --> 00:12:13,520 lucrurile un pic mai frumoasa. 301 00:12:13,520 --> 00:12:15,410 Dar, în loc ceea ce am obține este acest lucru. 302 00:12:15,410 --> 00:12:19,590 Așa că lasă-mă să fac buggy2.c zăngănit, Enter. 303 00:12:19,590 --> 00:12:21,790 Acum este din nou numit a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Eu văd doar o singură linie nouă, doar ultima linie foarte nou, care 306 00:12:26,900 --> 00:12:29,370 se mută promptă mea la linia următoare. 307 00:12:29,370 --> 00:12:32,660 Și totuși, în mod clar am fost imprimare *, apoi o linie nouă, 308 00:12:32,660 --> 00:12:33,990 *, Apoi o linie nouă. 309 00:12:33,990 --> 00:12:35,490 Dar ceea ce este bug aici? 310 00:12:35,490 --> 00:12:35,974 Da? 311 00:12:35,974 --> 00:12:37,224 PUBLICUL: [neauzit]. 312 00:12:39,850 --> 00:12:40,470 >> David J. MALAN: Exact. 313 00:12:40,470 --> 00:12:44,110 Deci, spre deosebire de unele limbi, cum ar fi Python, în cazul în care indentare 314 00:12:44,110 --> 00:12:46,030 de fapt, are sens funcțional, într-o 315 00:12:46,030 --> 00:12:47,150 Limba precum C - 316 00:12:47,150 --> 00:12:49,140 cum vom vedea, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 indentare este într-adevăr doar pentru beneficiul oamenilor ". 318 00:12:51,940 --> 00:12:55,690 Deci, faptul că am alin 16 și 17 arată foarte bine, 319 00:12:55,690 --> 00:12:57,530 dar nu are nici un sens funcțional aici. 320 00:12:57,530 --> 00:13:00,700 Dacă vreau să execute ambele linii, ca parte a de 321 00:13:00,700 --> 00:13:05,140 buclă, atunci eu trebuie să le includeți în acolade de a face acest lucru. 322 00:13:05,140 --> 00:13:08,540 Puteți tăia doar că colț și să omită acolade, dacă 323 00:13:08,540 --> 00:13:10,036 ceea ce e cazul? 324 00:13:10,036 --> 00:13:10,410 PUBLICUL: Doar o linie. 325 00:13:10,410 --> 00:13:11,130 David J. MALAN: Doar o linie. 326 00:13:11,130 --> 00:13:15,280 Deci, asta e doar un fel de fel de frumos detalii sintaxă, astfel încât 327 00:13:15,280 --> 00:13:17,900 să nu pierdeți timp cu scrierea trei linii, dintre care două sunt 328 00:13:17,900 --> 00:13:20,040 acolade, doar pentru a scrie o singură linie de cod. 329 00:13:20,040 --> 00:13:21,650 Dar, dacă aveți două sau mai multe linii, am 330 00:13:21,650 --> 00:13:22,860 într-adevăr, nevoie de a face acest lucru. 331 00:13:22,860 --> 00:13:24,210 >> Asa ca lasa-ma acum salveze asta. 332 00:13:24,210 --> 00:13:27,140 Lasă-mă să merg mai departe și re-rula zăngănit. 333 00:13:27,140 --> 00:13:31,375 Atunci lasă-mă să rulați din nou a.out, iar acum primesc câte unul pe linie. 334 00:13:31,375 --> 00:13:33,670 Acum, din nou, a.out este un fel de nume de prost pentru un program. 335 00:13:33,670 --> 00:13:37,500 Cum îmi pot da seama zăngănit de a da de fapt mi ​​un nume de fișier 336 00:13:37,500 --> 00:13:39,820 asta e mult mai user-friendly, cum ar fi buggy2 sine? 337 00:13:43,200 --> 00:13:44,466 Un pic mai clar? 338 00:13:44,466 --> 00:13:45,220 PUBLICUL: [neauzit]. 339 00:13:45,220 --> 00:13:47,810 David J. MALAN: Bine, așa că am putea lua de fapt, foarte 340 00:13:47,810 --> 00:13:51,000 user-friendly de comenzi rapide și doar scrie fac buggy2. 341 00:13:51,000 --> 00:13:53,840 Eu nu precizează c în acest caz., Și apăsați Enter. 342 00:13:53,840 --> 00:13:58,530 Și ceea ce fac nu este compilează buggy2.c pentru mine de către 343 00:13:58,530 --> 00:14:00,260 cere zăngănit de a face acest lucru. 344 00:14:00,260 --> 00:14:05,100 Mai precis, se solicită zăngănit, zăngănit ruleaza folosind mod mai 345 00:14:05,100 --> 00:14:08,540 linia de comandă argumente sau comutatoare de fapt am nevoie. 346 00:14:08,540 --> 00:14:11,270 În timp, ne vom întoarce la ceea ce toate aceste diferite 347 00:14:11,270 --> 00:14:13,810 expresii criptice despărțite în silabe înseamnă. 348 00:14:13,810 --> 00:14:16,910 Dar pentru acum, că e tocmai m-ai salvat de probleme 349 00:14:16,910 --> 00:14:19,600 să vă amintiți și de a trebui să introduceți din toate cele 350 00:14:19,600 --> 00:14:21,150 diverse expresii despărțite în silabe. 351 00:14:21,150 --> 00:14:23,240 Și capul de ea în cele din urmă este 352 00:14:23,240 --> 00:14:25,900 ca acum am buggy2. 353 00:14:25,900 --> 00:14:27,480 Dacă vreau să fac asta manual, deși, am 354 00:14:27,480 --> 00:14:28,775 poate face acest lucru în schimb - 355 00:14:28,775 --> 00:14:34,110 zăngănit-o buggy2 și apoi buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Și că va da în mod similar mi un fișier numit buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Deci, pe scurt, zăngănit e compilator. 358 00:14:39,710 --> 00:14:43,080 Asigurați-este doar un instrument user-friendly care vom folosi mai mult 359 00:14:43,080 --> 00:14:44,420 și mai mult, pentru că pur și simplu începe să 360 00:14:44,420 --> 00:14:47,330 simplifica lucrurile pentru noi. 361 00:14:47,330 --> 00:14:49,430 Și ne vom întoarce 0, în cele din urmă. 362 00:14:49,430 --> 00:14:51,890 Pentru moment, doar pentru că, dar vom începe tachinare că o parte 363 00:14:51,890 --> 00:14:52,930 azi si miercuri. 364 00:14:52,930 --> 00:14:55,560 Orice întrebări cu privire la oricare din astea? 365 00:14:55,560 --> 00:14:56,450 Da? 366 00:14:56,450 --> 00:14:58,234 PUBLICUL: [inaudibil] 367 00:14:58,234 --> 00:15:00,020 E în citate acolo? 368 00:15:00,020 --> 00:15:01,710 David J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Când am scris în ls citate, care mi-a fost faci unele magie 370 00:15:05,880 --> 00:15:07,160 în spatele scenei pentru a repara o eroare. 371 00:15:07,160 --> 00:15:09,370 Mi-am uitat, ca ne-am spus multora dintre voi pe 372 00:15:09,370 --> 00:15:11,600 forumuri de discuții, de a face - 373 00:15:11,600 --> 00:15:17,220 vom face acest lucru acum - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Hopa, că e scris corect. 375 00:15:19,790 --> 00:15:23,240 Deci, aparatul este ca un sistem de operare. 376 00:15:23,240 --> 00:15:25,650 Se rulează acest sistem de operare numit Fedora. 377 00:15:25,650 --> 00:15:27,450 Și acum, din cauza conexiunii mele la internet lent, Am 378 00:15:27,450 --> 00:15:28,260 într-adevăr hosed. 379 00:15:28,260 --> 00:15:31,620 Rulează atât de actualizare yum sudo, așa cum am să vă spun să faceți în 380 00:15:31,620 --> 00:15:34,080 set de probleme, este ca essentially rulează actualizări automate 381 00:15:34,080 --> 00:15:35,420 în Mac OS sau Windows. 382 00:15:35,420 --> 00:15:37,280 Și motivul pentru care rulează acest lucru la început de 383 00:15:37,280 --> 00:15:39,640 Setul Problema este că atunci când am creat aparatul, am 384 00:15:39,640 --> 00:15:42,480 încurcat, și am făcut accidental toate programele arata 385 00:15:42,480 --> 00:15:45,210 negru pe un ecran negru, care este motivul pentru care nu te-i vadă 386 00:15:45,210 --> 00:15:45,860 în mod implicit. 387 00:15:45,860 --> 00:15:48,020 Dar cea mai recentă versiune a aparatului stabilește acest lucru. 388 00:15:48,020 --> 00:15:50,500 Și eu voi repara asta în timpul pauzei de o dată am internet 389 00:15:50,500 --> 00:15:51,280 conectivitate. 390 00:15:51,280 --> 00:15:54,630 >> Deci, citate ascunde doar greșeala mea, foarte discret, 391 00:15:54,630 --> 00:15:55,730 aparent. 392 00:15:55,730 --> 00:15:56,980 Alte întrebări? 393 00:15:59,750 --> 00:16:00,668 Da? 394 00:16:00,668 --> 00:16:02,012 PUBLICUL: În cazul în care se face venit? 395 00:16:02,012 --> 00:16:03,810 [Neauzit] 396 00:16:03,810 --> 00:16:04,280 David J. MALAN: Bună întrebare. 397 00:16:04,280 --> 00:16:05,460 În cazul în care se face venit? 398 00:16:05,460 --> 00:16:09,390 Acesta este un program de Linux care a existat timp de mulți ani, timp 399 00:16:09,390 --> 00:16:10,570 înainte de CS50. 400 00:16:10,570 --> 00:16:12,930 Și el vine cu un sistem de operare cum ar fi Fedora. 401 00:16:12,930 --> 00:16:14,830 Ea nu vine de la biblioteca CS50. 402 00:16:14,830 --> 00:16:17,560 De fapt, singurele lucruri care vin de la biblioteca CS50 403 00:16:17,560 --> 00:16:20,470 până acum, pe care le-am văzut, sunt getString, GetInt, toate 404 00:16:20,470 --> 00:16:25,550 Ia cei funcții, precum și șirul de cuvânt, iar pentru unii 405 00:16:25,550 --> 00:16:26,575 măsură, cuvântul bool. 406 00:16:26,575 --> 00:16:29,180 Dar vom tachineze că, în afară atunci când ne scufunda in CS50 407 00:16:29,180 --> 00:16:30,580 aparatul în sine. 408 00:16:30,580 --> 00:16:32,820 >> Deci da, o întrebare mai mult aici. 409 00:16:32,820 --> 00:16:36,636 PUBLICUL: Când ai spus si apoi faceti buggy, cum se 410 00:16:36,636 --> 00:16:39,980 calculator stiu [neauzit]? 411 00:16:39,980 --> 00:16:40,520 David J. MALAN: Bună întrebare. 412 00:16:40,520 --> 00:16:43,830 Deci, atunci când trebuie doar să rulați face buggy1 sau de a face buggy2, cum 413 00:16:43,830 --> 00:16:45,220 nu face știe? 414 00:16:45,220 --> 00:16:49,900 Deci în mod implicit, dacă tastați face buggy1, face look pentru o 415 00:16:49,900 --> 00:16:52,330 fișier numit buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Și apoi execută comenzile corespunzătoare zăngănit, 417 00:16:55,570 --> 00:17:00,380 imperative astfel fișierul de ieșire implicit numit a.out. 418 00:17:00,380 --> 00:17:03,670 De fapt, dacă ne uităm la ceea ce fac, ceea ce - 419 00:17:03,670 --> 00:17:04,839 să renunțe la acest lucru. 420 00:17:04,839 --> 00:17:09,530 Dacă ne uităm la ceea ce face a fost de fapt a face, a face buggy2, 421 00:17:09,530 --> 00:17:10,470 e deja până la data de. 422 00:17:10,470 --> 00:17:13,020 Așa că lasă-mă să scoateți comanda rm, 423 00:17:13,020 --> 00:17:14,319 Programul-am scris înainte. 424 00:17:14,319 --> 00:17:17,319 Tastarea Y-E-S pentru a confirma că vreau să-l eliminați. 425 00:17:17,319 --> 00:17:20,480 Dacă aș face acum fac, observăm că în această linie foarte lungă, 426 00:17:20,480 --> 00:17:22,980 e chestia asta ultimul aici, o-buggy2. 427 00:17:22,980 --> 00:17:26,959 Toate acestea fac este de a face trece acest argument, ca să spunem așa, să 428 00:17:26,959 --> 00:17:29,665 Zăngănit, așa că nu trebuie să tastați-o eu. 429 00:17:29,665 --> 00:17:32,660 >> În regulă, deci un cuplu rapidă administrative 430 00:17:32,660 --> 00:17:33,470 anunțuri. 431 00:17:33,470 --> 00:17:36,940 Deci, pentru secțiuni, care a început în mod oficial această venire 432 00:17:36,940 --> 00:17:38,970 Duminica, veți dori întotdeauna să aducă, în cazul în care 433 00:17:38,970 --> 00:17:40,120 aveți unul, un laptop. 434 00:17:40,120 --> 00:17:42,570 Dacă nu aveți un laptop, nu ajunge la mine prin 435 00:17:42,570 --> 00:17:43,580 cădere-mi un e-mail. 436 00:17:43,580 --> 00:17:44,810 Și ne vom da seama unui flux de lucru. 437 00:17:44,810 --> 00:17:47,100 Ce, în general, veți găsi în secțiunea este că acestea sunt o parte 438 00:17:47,100 --> 00:17:48,770 partea conceptuală, hands-on. 439 00:17:48,770 --> 00:17:52,190 Vom folosi în mod special secțiunea de întrebări, o parte din 440 00:17:52,190 --> 00:17:54,110 set de săptămână problema, sa se plimbe prin intermediul unora dintre 441 00:17:54,110 --> 00:17:55,820 Materialul conceptuală de la curs. 442 00:17:55,820 --> 00:17:57,480 Și asta e tot în set de probleme actuale. 443 00:17:57,480 --> 00:18:00,010 Și vom arunca cu capul, de asemenea, în unele activități hands-on, uneori 444 00:18:00,010 --> 00:18:02,190 din care vor fi necesare pentru a fi prezentate, uneori de 445 00:18:02,190 --> 00:18:02,830 care nu o va face. 446 00:18:02,830 --> 00:18:04,630 De exemplu, aceasta prima saptamana, acestea sunt menite doar ca un 447 00:18:04,630 --> 00:18:05,780 warm-up exercitii. 448 00:18:05,780 --> 00:18:07,800 Și veți găsi că aceste probleme sunt de fapt doar asta. 449 00:18:07,800 --> 00:18:10,220 Ei trebuia să fie destul de mici, dar nu neapărat 450 00:18:10,220 --> 00:18:13,100 programe banale pentru a scrie, care nu sunt în mod neapărat 451 00:18:13,100 --> 00:18:16,230 incitante în sine și oportunități, dar sunt bune la 452 00:18:16,230 --> 00:18:19,620 practica cu sintaxa, cu noi funcții, în confortul unui 453 00:18:19,620 --> 00:18:21,900 secțiune în cazul în care aveți câteva dintre colegii dvs. prezinte, cât mai 454 00:18:21,900 --> 00:18:22,870 precum și TF ta. 455 00:18:22,870 --> 00:18:26,210 >> Și ce vom face în timp este utilizat un instrument numit CS50 Spatii, 456 00:18:26,210 --> 00:18:28,940 prin care în loc de a folosi doar Aparatura CS50, veți 457 00:18:28,940 --> 00:18:32,450 in loc sa mearga la o pagină Web într-un browser, în cazul în care veți putea 458 00:18:32,450 --> 00:18:35,610 pentru a scrie cod într-o fereastră de browser în timpul secțiune. 459 00:18:35,610 --> 00:18:38,240 Și apoi, dacă vă înscrieți, colegul tău de predare poate afișa apoi 460 00:18:38,240 --> 00:18:40,980 orice ar fi te tastarea pe ecran în browser-ul tău 461 00:18:40,980 --> 00:18:43,930 fereastră în sus la fața clasei, dacă anonim sau 462 00:18:43,930 --> 00:18:47,250 public, astfel încât el sau ea poate merge apoi prin intermediul cu 463 00:18:47,250 --> 00:18:50,080 colegii tai ce ai facut bine, ceea ce nu a făcut bine. 464 00:18:50,080 --> 00:18:52,750 Și din nou, fiți siguri toate acestea pot fi anonimizate frumos. 465 00:18:52,750 --> 00:18:54,410 Dar va fi o ocazie frumos pentru mult mai mult 466 00:18:54,410 --> 00:18:56,810 interactivitate decat ceva de genul prelegere permite. 467 00:18:56,810 --> 00:18:58,910 >> Între timp, vom avea aceste lucruri numite super- 468 00:18:58,910 --> 00:19:01,610 secțiuni, care sunt opționale, dar sunt deschise pentru toată lumea, în 469 00:19:01,610 --> 00:19:04,030 clasă, astfel încât să puteți face acest lucru mai mult colectiv pentru 470 00:19:04,030 --> 00:19:05,190 Problema setezi una. 471 00:19:05,190 --> 00:19:06,010 Iată programul. 472 00:19:06,010 --> 00:19:08,870 Acest lucru este, de asemenea, postat pe pagina de pornire de la cs50.net. 473 00:19:08,870 --> 00:19:10,850 Observați că acolo va fi un hacker specifică 474 00:19:10,850 --> 00:19:12,430 un mâine după-amiază. 475 00:19:12,430 --> 00:19:15,460 Și vom filma una azi și una mâine și posta acele 476 00:19:15,460 --> 00:19:16,720 on-line în termen de 24 de ore. 477 00:19:16,720 --> 00:19:19,370 Deci, nu, dacă nu puteți face oricare din aceste vremuri, să vă faceți griji. 478 00:19:19,370 --> 00:19:22,720 Și din nou, programul este online acum la cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> În ceea ce privește secționare în sine, ar trebui să fi ajuns o 480 00:19:25,350 --> 00:19:28,520 trimite instrucție să te duci la pagina cursului pentru a găsi 481 00:19:28,520 --> 00:19:29,610 sectiunea ta. 482 00:19:29,610 --> 00:19:32,890 Dacă viața sa schimbat și aveți nevoie pentru a schimba punctul dumneavoastră, 483 00:19:32,890 --> 00:19:33,560 nu este o problemă. 484 00:19:33,560 --> 00:19:37,900 Du-te înapoi la același URL, cs50.net/section, singular, 485 00:19:37,900 --> 00:19:40,090 și vei completați formularul de asemănătoare, astfel încât să puteți 486 00:19:40,090 --> 00:19:41,260 apoi da-ne preferintele tale. 487 00:19:41,260 --> 00:19:43,360 Și vom urmări până la sfârșitul săptămânii ca la ceea ce putem 488 00:19:43,360 --> 00:19:44,240 găzdui. 489 00:19:44,240 --> 00:19:49,530 Săptămâna trecută, amintesc că ne-am propus utilizarea CS50 Discuss, 490 00:19:49,530 --> 00:19:51,370 instrument cursului discuției, în curs. 491 00:19:51,370 --> 00:19:53,680 Deci, am avut 40 de întrebări care au fost puse și 492 00:19:53,680 --> 00:19:54,720 un răspuns în cursul curs. 493 00:19:54,720 --> 00:19:56,280 Deci, părea să funcționeze bine, așa că vom continua 494 00:19:56,280 --> 00:19:57,180 încercarea de a face acest lucru. 495 00:19:57,180 --> 00:19:59,600 În cazul în care, în timpul prelegerii, nu te simți confortabil doar educație 496 00:19:59,600 --> 00:20:00,780 mâna, nu este o problemă. 497 00:20:00,780 --> 00:20:04,640 Du-te la cs50.net/discuss, posta acolo, și unul dintre predare noastre 498 00:20:04,640 --> 00:20:07,270 semenii va răspunde, fie ea electronică sau le ridica 499 00:20:07,270 --> 00:20:10,620 mână, pe numele dvs. anonim să întreb, în ​​funcție de 500 00:20:10,620 --> 00:20:12,470 privind natura întrebare. 501 00:20:12,470 --> 00:20:15,000 Și în ceea ce privește feedback-ul, în general, va fi psets 502 00:20:15,000 --> 00:20:16,760 returnat în termen de o săptămână. 503 00:20:16,760 --> 00:20:19,080 Deoarece este nevoie de ceva timp pentru a realiza secțiuni 504 00:20:19,080 --> 00:20:22,430 echilibru, PSET în primul rând, 0 și 1, va fi un pic 505 00:20:22,430 --> 00:20:24,130 întârziată ca lucrurile se stabilească. 506 00:20:24,130 --> 00:20:27,130 Dar stați tuned pentru că în următoarele săptămâni să vină. 507 00:20:27,130 --> 00:20:29,750 >> În regulă, asa ca lasa-ma pus pe serios meu 508 00:20:29,750 --> 00:20:31,040 voce doar pentru un moment. 509 00:20:31,040 --> 00:20:32,690 Deci, aceasta este de fapt un climat interesant pentru a fi 510 00:20:32,690 --> 00:20:35,210 având în această discuție, ceea ce cu toate celelalte lucruri 511 00:20:35,210 --> 00:20:37,310 întâmplă pe acesta campus conexe. 512 00:20:37,310 --> 00:20:40,220 Dar cu siguranță a avut CS50 istoria sa de această special 513 00:20:40,220 --> 00:20:43,360 subiect, în la fel de mult ca în fiecare an, acest curs, pentru mulți 514 00:20:43,360 --> 00:20:46,910 ani, Ad-Boards aproximativ 3% din clasa. 515 00:20:46,910 --> 00:20:51,620 În acest an cea mai recentă, 2011, CS50 Ad-au urcat 35 de studenți. 516 00:20:51,620 --> 00:20:54,120 Acest lucru nu este, cred eu, din cauza lipsei de claritate. 517 00:20:54,120 --> 00:20:56,760 Realizati ca în programa cursului, există o pagină de 518 00:20:56,760 --> 00:20:59,020 declarație care să explice în cazul în care liniile sunt. 519 00:20:59,020 --> 00:21:01,350 Această declarație se repetă aceeași pe fiecare dintre 520 00:21:01,350 --> 00:21:03,070 Problema stabilește pe o singură pagină. 521 00:21:03,070 --> 00:21:05,760 >> Așa că am menționez acest lucru astăzi într-adevăr doar pentru a face 522 00:21:05,760 --> 00:21:07,030 oameni buni Conștientă de acest. 523 00:21:07,030 --> 00:21:08,080 Și am încercat lucruri diferite. 524 00:21:08,080 --> 00:21:10,630 Și ceea ce am crezut că ne-ar face astăzi este să ia doar un moment pentru a 525 00:21:10,630 --> 00:21:13,830 de fapt, uita-te la unele dintre cazuri anterioare care au venit. 526 00:21:13,830 --> 00:21:16,160 , Mai degrabă decât să mențină aceste secrete murdare ca, de fapt, 527 00:21:16,160 --> 00:21:19,170 subliniez ceea ce elevii au făcut și cum ne-am detectat 528 00:21:19,170 --> 00:21:21,630 l și într-adevăr ceea ce este motivația general pentru 529 00:21:21,630 --> 00:21:23,950 având în chiar această conversație. 530 00:21:23,950 --> 00:21:27,060 Deci, cu care a spus, în esență, linia este aceasta - 531 00:21:27,060 --> 00:21:29,200 pe programa, esti binevenit, vă sunt încurajate, pentru a 532 00:21:29,200 --> 00:21:30,210 vorbesc cu colegii de clasă. 533 00:21:30,210 --> 00:21:31,910 Asta e tot scopul de a avea aceste colaborare 534 00:21:31,910 --> 00:21:34,470 orelor de serviciu în Annenberg și încurajarea oamenilor pentru 535 00:21:34,470 --> 00:21:35,755 proiect final de a lucra împreună. 536 00:21:35,755 --> 00:21:38,590 Dar linia este întocmit atunci când vine vorba de timp pentru a scrie, de fapt 537 00:21:38,590 --> 00:21:39,790 Soluția finală. 538 00:21:39,790 --> 00:21:42,590 Vorbind în limba engleză, total bine, vorbind în cod pseudo, 539 00:21:42,590 --> 00:21:43,400 total bine. 540 00:21:43,400 --> 00:21:46,340 Emailing un coleg PSET dvs., permițându-le uite peste 541 00:21:46,340 --> 00:21:48,610 ecran ca mâinile continua tastarea, 542 00:21:48,610 --> 00:21:50,110 peste linia de asemenea. 543 00:21:50,110 --> 00:21:52,250 Nu te uiți la programa școlară pentru liniile particulare. 544 00:21:52,250 --> 00:21:55,850 >> Dar doar pentru a picta o imagine a modului în care acest lucru este, din păcate, un 545 00:21:55,850 --> 00:21:58,370 realitate, dau seama că există site-uri web acolo, care 546 00:21:58,370 --> 00:22:01,490 au soluții din această clasă și multe alte clase. 547 00:22:01,490 --> 00:22:04,940 Faptul că tu sau aproximativ 3% dintre voi știu că există acest 548 00:22:04,940 --> 00:22:07,240 înseamnă că știm că aceasta există. 549 00:22:07,240 --> 00:22:09,340 Faptul că există site-uri web ca asta în cazul în care 550 00:22:09,340 --> 00:22:11,540 pot plăti pe cineva să facă de fapt, seturi de problema ta - acest lucru a fost 551 00:22:11,540 --> 00:22:13,450 un caz real care a venit anul trecut. 552 00:22:13,450 --> 00:22:15,790 Acesta este un site web numit odesk.com. 553 00:22:15,790 --> 00:22:20,090 Si Tim a fost numele persoanei care a fost aici, postarea pe 554 00:22:20,090 --> 00:22:24,580 acest site și a rugat pe cineva să facă PSET lui 7 în 555 00:22:24,580 --> 00:22:25,570 acest caz particular. 556 00:22:25,570 --> 00:22:28,350 Ei bine, este foarte odesk.com Google măsură, și noi suntem 557 00:22:28,350 --> 00:22:30,310 foarte bun la cu Google. 558 00:22:30,310 --> 00:22:32,360 Aici, de asemenea, există site-uri - si asta e destul de 559 00:22:32,360 --> 00:22:34,234 atroce, sincer. 560 00:22:34,234 --> 00:22:38,050 [Râsete] 561 00:22:38,050 --> 00:22:39,610 David J. MALAN: amuzant lucru despre acest site este în cazul în care 562 00:22:39,610 --> 00:22:41,970 ai citit pagina Despre, ei vorbesc despre corporativă lor 563 00:22:41,970 --> 00:22:44,390 Serviciul cultura și modul lor de client este numarul unu 564 00:22:44,390 --> 00:22:46,190 prioritate, pentru a vă asigura că sarcinile dvs. să obțineți 565 00:22:46,190 --> 00:22:47,890 pornit la timp. 566 00:22:47,890 --> 00:22:50,580 >> Dar în toată seriozitatea, din nou, faptul că aceste site-uri 567 00:22:50,580 --> 00:22:52,910 există, ne dăm seama, de asemenea, sunt conștienți de 568 00:22:52,910 --> 00:22:53,730 aceste tipuri de site-uri. 569 00:22:53,730 --> 00:22:55,890 Și pentru a vă oferi un sentiment de ceea ce face, în general, această 570 00:22:55,890 --> 00:22:58,570 ia, în general, noi nu avem mari scandaluri în care oamenii 571 00:22:58,570 --> 00:23:01,080 colaborează pe orice tip de scară largă, ci mai degrabă 572 00:23:01,080 --> 00:23:04,540 E aceste momente de noapte de slabiciune, în cazul în care aveți atât de 573 00:23:04,540 --> 00:23:07,550 multe de făcut, e 4:00 AM, ești epuizat, și tu 574 00:23:07,550 --> 00:23:09,770 cred că la tine, ei bine, lasa-ma sa ia doar o privire la meu 575 00:23:09,770 --> 00:23:11,770 coleg de cameră sau codul prietenul meu sau similar. 576 00:23:11,770 --> 00:23:14,800 Și manifestările de acest implică, din păcate, Student 577 00:23:14,800 --> 00:23:17,640 Un ceva de genul depunerea și transmiterea Student B 578 00:23:17,640 --> 00:23:20,370 ceva de genul asta, care cu siguranță, într-un calculator 579 00:23:20,370 --> 00:23:23,830 Clasa de știință, este extrem de ușor pentru oamenii de stiinta de calculator 580 00:23:23,830 --> 00:23:25,690 pentru a detecta cu software-ul. 581 00:23:25,690 --> 00:23:28,410 Aceasta este o altă paradigmă comună, în cazul în care ați un fel de 582 00:23:28,410 --> 00:23:31,010 a fost de lucru alaturi de cineva, poate vorbi în 583 00:23:31,010 --> 00:23:32,360 Engleză, bine, pseudocod. 584 00:23:32,360 --> 00:23:35,080 Dar apoi vine vorba de timp pentru a prezenta efectiv, precum și psets 585 00:23:35,080 --> 00:23:37,910 Tocmai te schimbate prin e-mail sau Dropbox sau similar. 586 00:23:37,910 --> 00:23:41,120 Dar, într-o încercare de a face mai puțin evident că acest lucru este 587 00:23:41,120 --> 00:23:44,830 ceea ce sa întâmplat, atunci acest lucru este ceea ce se prezentate. 588 00:23:44,830 --> 00:23:47,880 Acest lucru, de asemenea, nu excursie la bine-scrise bucăți de 589 00:23:47,880 --> 00:23:50,360 software-ul ca și cum am avea de a detecta efectiv 590 00:23:50,360 --> 00:23:51,280 aceste tipuri de lucruri. 591 00:23:51,280 --> 00:23:53,760 Și într-adevăr, ceea ce facem noi este programul administrat de care compară toate 592 00:23:53,760 --> 00:23:55,540 din acest an declarațiile împotriva tuturor a lui anul trecut 593 00:23:55,540 --> 00:23:57,380 observațiile, împotriva a tot ce-am găsit pe 594 00:23:57,380 --> 00:24:00,060 Internet, față de fiecare site-ul de locuri de muncă acolo. 595 00:24:00,060 --> 00:24:01,710 E foarte automatizat. 596 00:24:01,710 --> 00:24:05,665 Și așa facem acest lucru într-adevăr, în corectitudinea mare de 97%, care 597 00:24:05,665 --> 00:24:07,760 sunt într-adevăr de lucru de pe fundurile lor în acest sens și în alte 598 00:24:07,760 --> 00:24:11,530 clase și punerea în tot acest efort de muncă, astfel încât 599 00:24:11,530 --> 00:24:13,030 acestea prezintă în cele din urmă este a lor. 600 00:24:13,030 --> 00:24:14,220 Și eu pot merge pe pentru vârstele. 601 00:24:14,220 --> 00:24:16,030 >> Acestea sunt doar câteva cazuri de anul trecut. 602 00:24:16,030 --> 00:24:19,350 Cativa studenti transmise aceste fișiere în mod identic pentru PSET 2, 603 00:24:19,350 --> 00:24:22,460 PSET 3, 4 PSET, PSET 5, 6 PSET, PSET 9. 604 00:24:22,460 --> 00:24:26,360 În acest caz, aceasta a fost Quiz 0 și în anul trecut, în care două 605 00:24:26,360 --> 00:24:29,570 elevii transmise identic acestei propoziții printre multe altele 606 00:24:29,570 --> 00:24:32,210 alții, "cererea de tip -" dot, dot, dot. 607 00:24:32,210 --> 00:24:34,530 Deci, chiar intr-o clasa de 600 am detecta acest 608 00:24:34,530 --> 00:24:36,310 pe a prezentat teste. 609 00:24:36,310 --> 00:24:39,080 Deci, pe scurt, acest lucru - sincer, urăsc cu acest tip de 610 00:24:39,080 --> 00:24:41,300 conversație - dar acest lucru este într-adevăr un efort deliberat 611 00:24:41,300 --> 00:24:43,540 în acest an pentru a încerca de a conduce în jos acel număr. 612 00:24:43,540 --> 00:24:45,650 Pentru că, chiar dacă am spune aceste tipuri de lucruri la fiecare 613 00:24:45,650 --> 00:24:48,100 ani, cred că realitatea de a fi locuit pe ea pentru câteva 614 00:24:48,100 --> 00:24:50,800 mai multe secunde decât de obicei și de fapt doar subliniind 615 00:24:50,800 --> 00:24:53,600 că ceea ce s-ar putea părea, nu-i așa, nu o astfel de afacere de mare, cel puțin 616 00:24:53,600 --> 00:24:56,390 gândesc la acest moment, atât în ​​echitate a 617 00:24:56,390 --> 00:25:00,100 tine și colegii dumneavoastră pentru a aici. 618 00:25:00,100 --> 00:25:02,480 Deci, dacă aveți vreodată orice întrebări cu privire la cazul în care linia de 619 00:25:02,480 --> 00:25:04,290 este, te rog ajunge la mine personal. 620 00:25:04,290 --> 00:25:07,190 Dar răspunsul este mereu, complet subliniat la 621 00:25:07,190 --> 00:25:09,090 last minute, bani într-o zi de întârziere. 622 00:25:09,090 --> 00:25:11,080 Sau dacă este o chestiune de a nu avea nici o zi întârziere, 623 00:25:11,080 --> 00:25:12,900 sincer, mi e-mail personal. 624 00:25:12,900 --> 00:25:14,110 Ne vom da seama ceva. 625 00:25:14,110 --> 00:25:17,480 Vă rugăm să nu puneți timp aici la Harvard, la risc. 626 00:25:17,480 --> 00:25:18,570 >> Acum, m-am gândit că ar trebui să lumineze starea de spirit, așa că am 627 00:25:18,570 --> 00:25:20,264 inclus aceasta ca slide-ul urmator. 628 00:25:20,264 --> 00:25:22,770 [Râsete] 629 00:25:22,770 --> 00:25:23,630 David J. MALAN: Acest site a fost grozav. 630 00:25:23,630 --> 00:25:24,820 Am de fapt, un pic distras. 631 00:25:24,820 --> 00:25:26,330 Nu e asta. 632 00:25:26,330 --> 00:25:29,590 Și apoi asta a fost uimitor. 633 00:25:29,590 --> 00:25:35,190 Bine, cred că de pisoi noaptea târziu atunci când se face 634 00:25:35,190 --> 00:25:36,040 aceste decizii. 635 00:25:36,040 --> 00:25:40,110 Toate lucrurile dreapta, astfel încât înapoi la mai multă distracție și mai puțin grave, cum ar fi 636 00:25:40,110 --> 00:25:40,780 condiții. 637 00:25:40,780 --> 00:25:43,900 >> În regulă, așa că am vorbit pe scurt despre acestea. 638 00:25:43,900 --> 00:25:46,080 Acest lucru este ceva care este, probabil, destul de familiarizat de la 639 00:25:46,080 --> 00:25:47,260 lumea Scratch. 640 00:25:47,260 --> 00:25:49,860 Iar în lumea Scratch, avem această nevoie, uneori, de a 641 00:25:49,860 --> 00:25:51,110 du-te face furcile în drum. 642 00:25:51,110 --> 00:25:54,840 Face fie prezenta sau că acest lucru sau alte aici. 643 00:25:54,840 --> 00:25:58,990 Și atunci când vrem să facem acest lucru, putem folosi, în C acum, în cazul în care acest 644 00:25:58,990 --> 00:26:00,860 altceva construi. 645 00:26:00,860 --> 00:26:06,420 Și apoi aici, avem expresii booleene. 646 00:26:06,420 --> 00:26:09,260 De exemplu, expresii booleene aici, putem SAU 647 00:26:09,260 --> 00:26:12,260 le împreună, în sensul că avem această condiție SAU 648 00:26:12,260 --> 00:26:13,200 această condiție. 649 00:26:13,200 --> 00:26:15,100 Putem și le împreună, în sensul că dorim să 650 00:26:15,100 --> 00:26:17,710 verifica această condiție și că această condiție. 651 00:26:17,710 --> 00:26:22,440 Și aici avem o declarație comutator acum, ceea ce nu este atât de 652 00:26:22,440 --> 00:26:26,040 similară sintactică a acestor tipuri de condiții, dar 653 00:26:26,040 --> 00:26:30,160 ne permite să facem în cazul în care echivalentul a, în cazul în care altcineva, altceva în cazul în care, altfel 654 00:26:30,160 --> 00:26:34,990 în cazul în care, la fel ca și prin simpla enumerarea acestora de la caz la caz, 655 00:26:34,990 --> 00:26:36,670 de la caz la caz. 656 00:26:36,670 --> 00:26:38,370 Deci, am văzut pe cei ultima dată. 657 00:26:38,370 --> 00:26:40,430 Și apoi am început atingând la lucruri cum ar fi buclele. 658 00:26:40,430 --> 00:26:42,070 Am văzut unul dintre acestea doar o clipă în urmă. 659 00:26:42,070 --> 00:26:44,180 Dar există aceste constructe alte buclă. 660 00:26:44,180 --> 00:26:46,370 >> De exemplu, cel de aici. 661 00:26:46,370 --> 00:26:50,140 Deci, în timp ce (conditie), face acest lucru din nou și din nou. 662 00:26:50,140 --> 00:26:53,070 Deci fundamental, ceea ce pare a fi diferit între acest 663 00:26:53,070 --> 00:26:55,760 pentru bucla și această buclă în timp ce aici? 664 00:27:00,810 --> 00:27:05,045 Această buclă și pentru această buclă în timp ce. 665 00:27:05,045 --> 00:27:07,840 Da? 666 00:27:07,840 --> 00:27:08,800 Ce-i asta? 667 00:27:08,800 --> 00:27:10,050 PUBLICUL: [neauzit]. 668 00:27:14,632 --> 00:27:15,120 David J. MALAN: Bine. 669 00:27:15,120 --> 00:27:17,130 Deci, în timp ce în stare de buclă pentru, există în mod clar 670 00:27:17,130 --> 00:27:17,940 mai mult sintaxa. 671 00:27:17,940 --> 00:27:20,560 Nu e asta initializare, e această actualizare. 672 00:27:20,560 --> 00:27:23,820 Într-o buclă în timp ce, e doar această condiție. 673 00:27:23,820 --> 00:27:26,630 Deci se pare că e un pic în jos față de comparație pentru 674 00:27:26,630 --> 00:27:28,770 buclă, ceea ce înseamnă, dacă vrem să avem variabile și vrem 675 00:27:28,770 --> 00:27:30,800 pentru a avea incrementare, avem de fapt să 676 00:27:30,800 --> 00:27:32,500 face acest lucru noi înșine. 677 00:27:32,500 --> 00:27:34,420 >> Așa că lasă-mă să mergeți mai departe și să se deschidă gedit. 678 00:27:34,420 --> 00:27:36,320 Lasă-mă să comuta la aparatul. 679 00:27:36,320 --> 00:27:38,110 Și hai să facem doar un exemplu rapid mic care 680 00:27:38,110 --> 00:27:40,550 distinge una dintre acestea de la celălalt. 681 00:27:40,550 --> 00:27:42,490 Și în partea din spate a mintea mea aici, ar trebui să spun un singur lucru. 682 00:27:42,490 --> 00:27:44,120 Am menționat în mod special numele Tim. 683 00:27:44,120 --> 00:27:47,740 Tim a fost de fapt pe cineva care un student a încercat să găsească pentru a face 684 00:27:47,740 --> 00:27:48,680 temele pentru ei. 685 00:27:48,680 --> 00:27:51,280 Nu am avut Tim în secțiunea special. 686 00:27:51,280 --> 00:27:53,690 Deci dau seama, ca nu cumva am dezvăluit un student, nu a fost un student. 687 00:27:53,690 --> 00:27:55,720 A fost o persoană aleatoare pe Internet face lucruri 688 00:27:55,720 --> 00:27:57,180 de anul trecut proxy. 689 00:27:57,180 --> 00:27:58,670 Așa că am găsit că este, de asemenea. 690 00:27:58,670 --> 00:28:00,630 Deci, în acest caz aici, lasă-mă să merg mai departe și 691 00:28:00,630 --> 00:28:02,810 deschide un fișier nou. 692 00:28:02,810 --> 00:28:04,800 Fișier, Noua. 693 00:28:04,800 --> 00:28:06,050 Acest lucru îmi dă o filă aici. 694 00:28:06,050 --> 00:28:09,940 Lasă-mă să mergeți mai departe și salvați-l ca loop.c. 695 00:28:09,940 --> 00:28:11,810 Lasă-mă să merg și faceți clic pe Salvare. 696 00:28:11,810 --> 00:28:15,340 Și apoi aici, hai să mergem mai departe și începeți să scrieți 697 00:28:15,340 --> 00:28:16,605 # Include . 698 00:28:19,116 --> 00:28:20,520 Lasă-mă să zoom inch 699 00:28:20,520 --> 00:28:23,410 Acum, vom face int main (void). 700 00:28:23,410 --> 00:28:30,020 Acum, lasă-mă să merg mai departe și de a face pentru (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 acum am de gând să merg mai departe și nu imprimați steaua pe care am 703 00:28:36,620 --> 00:28:37,890 făcut-o mai devreme. 704 00:28:37,890 --> 00:28:39,390 Și apoi, la sfârșitul acestui program, suntem doar de gând să 705 00:28:39,390 --> 00:28:41,130 imprima o linie nouă, doar pentru ca mi prompte 706 00:28:41,130 --> 00:28:42,470 nu arata tot murdar. 707 00:28:42,470 --> 00:28:45,170 întoarce 0. 708 00:28:45,170 --> 00:28:47,610 Se pare corect sintactic? 709 00:28:47,610 --> 00:28:48,040 Până în prezent. 710 00:28:48,040 --> 00:28:48,560 Deci, haideți să vedem. 711 00:28:48,560 --> 00:28:51,290 >> Așa că lasă-mă să zoom out, du-te în fereastra terminalul meu. 712 00:28:51,290 --> 00:28:54,570 Și lasă-mă să merg mai departe și a alerga bucla, pentru că am numit acest 713 00:28:54,570 --> 00:28:55,690 lucru loop.c. 714 00:28:55,690 --> 00:28:56,780 Deci, a face bucla. 715 00:28:56,780 --> 00:28:57,840 Pare să compileze OK. 716 00:28:57,840 --> 00:29:00,210 Lasă-mă să fugi buclă, și acum Enter. 717 00:29:00,210 --> 00:29:01,820 Și se pare că au fost tipărite 10 stele. 718 00:29:01,820 --> 00:29:03,780 Așa că hai să converti asta într-o buclă de timp și a vedea ce 719 00:29:03,780 --> 00:29:05,220 tipuri de probleme noi de călătorie de peste. 720 00:29:05,220 --> 00:29:11,290 Deci, în loc de aceasta, permiteți-mi să merg aici și să spun în timp ce i este 721 00:29:11,290 --> 00:29:12,760 mai puțin de 10 - 722 00:29:12,760 --> 00:29:14,910 lasă-mă să scap de bucla for. 723 00:29:14,910 --> 00:29:17,170 OK, deci avem o serie de probleme deja. 724 00:29:17,170 --> 00:29:21,110 Deci, condiția este aceeași, dar eu sunt lipsesc în mod evident 725 00:29:21,110 --> 00:29:21,680 inițializare. 726 00:29:21,680 --> 00:29:23,840 Sunt lipsesc incrementare. 727 00:29:23,840 --> 00:29:28,020 Deci, ce ar trebui să spună probabil compilatorul mine când încerc să 728 00:29:28,020 --> 00:29:29,170 compila acest program? 729 00:29:29,170 --> 00:29:29,666 Da? 730 00:29:29,666 --> 00:29:31,154 PUBLICUL: [neauzit]. 731 00:29:31,154 --> 00:29:31,650 >> David J. MALAN: Bine. 732 00:29:31,650 --> 00:29:34,180 Deci, o să spună ceva de genul nedeclarate - în acest 733 00:29:34,180 --> 00:29:35,280 caz, i variabilă. 734 00:29:35,280 --> 00:29:37,980 Și într-adevăr, utilizarea de identificator nedeclarate i. 735 00:29:37,980 --> 00:29:40,960 Și astfel acest lucru este în contrast cu limbi, cum ar fi PHP si 736 00:29:40,960 --> 00:29:43,120 Python și Ruby, cu care unii dintre voi s-ar putea să fie familiarizați, 737 00:29:43,120 --> 00:29:44,820 în cazul în care puteți doar un fel de a începe să utilizați variabile 738 00:29:44,820 --> 00:29:47,420 vrând-nevrând, și nu trebuie să vă faceți griji cu privire la declararea lor 739 00:29:47,420 --> 00:29:48,560 în mod explicit întotdeauna. 740 00:29:48,560 --> 00:29:51,770 În C și în limbile de, cum ar fi Java și C + +, trebuie să fie 741 00:29:51,770 --> 00:29:53,020 super-explicite. 742 00:29:53,020 --> 00:29:55,760 Și dacă vrei o variabilă numită i, trebuie să-mi spui 743 00:29:55,760 --> 00:29:57,360 ce fel de variabile este. 744 00:29:57,360 --> 00:29:59,360 Deci, vom avea pentru a rezolva această, după cum urmează. 745 00:29:59,360 --> 00:30:05,510 Am de gând să aibă de a merge în sus și tastați aici int i, prin urmare, 746 00:30:05,510 --> 00:30:07,860 Am declarat o variabila numita i. 747 00:30:07,860 --> 00:30:09,180 Acum, am sărit un pas. 748 00:30:09,180 --> 00:30:11,340 Am, evident, nu-l inițializată, dar să vedem dacă la 749 00:30:11,340 --> 00:30:13,650 cel oprire mărci zăngănit plâng. 750 00:30:13,650 --> 00:30:15,770 Așa că lasă-mă să refacă acest program. 751 00:30:15,770 --> 00:30:16,770 >> În regulă, acum e doar plange 752 00:30:16,770 --> 00:30:17,870 pentru un alt motiv. 753 00:30:17,870 --> 00:30:21,130 "Variabila" i "este neinitializata atunci când este utilizat aici." În regulă, așa 754 00:30:21,130 --> 00:30:22,340 e destul de explicit. 755 00:30:22,340 --> 00:30:25,510 Inițializate înseamnă doar setarea este egală cu o valoare. 756 00:30:25,510 --> 00:30:30,820 Și nu ne-am facut asta, asa ca lasa-ma sa incerc este egal cu 0. 757 00:30:30,820 --> 00:30:35,030 Acum, haideți să încercăm din nou și re-rula zăngănit. 758 00:30:35,030 --> 00:30:36,140 Compilate de data asta. 759 00:30:36,140 --> 00:30:37,210 Și eu sunt pe cale să-l rulați. 760 00:30:37,210 --> 00:30:43,120 Dar mare buclă infinită vechi, pentru că am făcut 761 00:30:43,120 --> 00:30:45,530 initializare, am făcut condiție, dar eu n-am făcut 762 00:30:45,530 --> 00:30:47,030 orice fel de incrementare. 763 00:30:47,030 --> 00:30:48,780 Deci, cum pot face incrementarea? 764 00:30:48,780 --> 00:30:51,170 Ei bine, într-o buclă în timp ce, se simte ca și cum am de gând să aibă 765 00:30:51,170 --> 00:30:54,180 pentru a face acest lucru in interiorul buclei, pentru că la fel ca primul 766 00:30:54,180 --> 00:30:56,570 săptămânii exemple de constructe face în buclă, cum ar fi cu 767 00:30:56,570 --> 00:30:59,040 șosete și cu auto-numărare, am avut de a face 768 00:30:59,040 --> 00:31:01,550 ceva de la sfârșitul foarte, ca du-te înapoi la linia următoare. 769 00:31:01,550 --> 00:31:05,040 Ce se întâmplă dacă am merge mai departe și de a face acest lucru am + + aici? 770 00:31:05,040 --> 00:31:06,030 Să nu compila chiar și această. 771 00:31:06,030 --> 00:31:06,890 Prinde-mă deja. 772 00:31:06,890 --> 00:31:09,704 Ce sa întâmplat aici? 773 00:31:09,704 --> 00:31:10,690 PUBLICUL: [neauzit]. 774 00:31:10,690 --> 00:31:11,770 >> David J. MALAN: Deci nu e sigur int. 775 00:31:11,770 --> 00:31:13,080 E i.. 776 00:31:13,080 --> 00:31:15,110 Și acolade, ca înainte, 777 00:31:15,110 --> 00:31:16,800 indentarea nu este de ajuns. 778 00:31:16,800 --> 00:31:18,410 Așa că acum am această construcție. 779 00:31:18,410 --> 00:31:21,780 Deci, în timp ce i este mai mic de 10, imprimați o stea, 780 00:31:21,780 --> 00:31:23,220 apoi i incrementa. 781 00:31:23,220 --> 00:31:25,680 Și modul în care o în timp ce lucrările la bucla este că de îndată ce te-a lovit 782 00:31:25,680 --> 00:31:29,630 partea de jos a buclei, care, în acest caz, arata ca linia 10, 783 00:31:29,630 --> 00:31:32,880 se va întoarce la linia 6, moment în care 784 00:31:32,880 --> 00:31:34,400 condiție va fi verificată din nou. 785 00:31:34,400 --> 00:31:37,500 Și dacă i este în continuare mai mic de 10, vom face liniile 8 și 786 00:31:37,500 --> 00:31:41,250 apoi 9, apoi ne vom lovi 10, și du-te înapoi la 6, din nou și 787 00:31:41,250 --> 00:31:45,580 din nou și din nou și din nou, atât timp cât i este mai mic de 10. 788 00:31:45,580 --> 00:31:47,860 Deci, haideți să re-rula face aici. 789 00:31:47,860 --> 00:31:48,940 >> Bine, am compilat bine. 790 00:31:48,940 --> 00:31:50,300 Lasă-mă să re-rula bucla. 791 00:31:50,300 --> 00:31:52,620 Și acum, de fapt pare să funcționeze. 792 00:31:52,620 --> 00:31:55,100 Deci, plusuri și minusuri aici? 793 00:31:55,100 --> 00:31:58,910 Ei bine, până acum nu există de fapt, nu un ansamblu de PLO - 794 00:31:58,910 --> 00:31:59,420 atât de drăguț. 795 00:31:59,420 --> 00:32:01,870 În regulă, asta a fost o - ah, asta a fost un accident. 796 00:32:01,870 --> 00:32:05,200 În regulă, așa că hai să ne întoarcem la bucla for. 797 00:32:05,200 --> 00:32:07,530 Deci, pentru bucle sunt frumoase, deoarece acestea sunt foarte explicite. 798 00:32:07,530 --> 00:32:09,720 Și chiar dacă ele sunt un pic mai greoaie pentru a scrie, e 799 00:32:09,720 --> 00:32:11,500 foarte puternic si iti permite sa faci 800 00:32:11,500 --> 00:32:12,980 mai multe lucruri deodată. 801 00:32:12,980 --> 00:32:16,240 În timp ce buclele nu par a avea o mare cantitate de valoare doar 802 00:32:16,240 --> 00:32:18,500 totuși, pentru că se simte ca și cum am doar trebuie să facem mai mult de lucru. 803 00:32:18,500 --> 00:32:20,670 Trebuie să punem initializare aici, 804 00:32:20,670 --> 00:32:23,480 actualiza aici, iar noi trebuie să ne amintim să facă toate astea. 805 00:32:23,480 --> 00:32:26,260 Deci, vom vedea în momentul în care buclele în timp ce împrumuta de fapt, 806 00:32:26,260 --> 00:32:29,380 se la doar contexte diferite, date diferite 807 00:32:29,380 --> 00:32:33,900 structuri, cum ar fi liste și tabele de dispersie, lucrurile vom ajunge la 808 00:32:33,900 --> 00:32:34,970 la mijlocul-semestru. 809 00:32:34,970 --> 00:32:37,900 Dar pentru acum, știu că există acest al treilea tip cunoscut ca un do- 810 00:32:37,900 --> 00:32:38,480 în timp ce bucla. 811 00:32:38,480 --> 00:32:39,540 Și am văzut asta pe scurt. 812 00:32:39,540 --> 00:32:41,830 Și acest lucru ar putea fi de ajutor super cu PSET 1. 813 00:32:41,830 --> 00:32:45,570 De fiecare dată când vrei să faci ceva și apoi verificați dacă 814 00:32:45,570 --> 00:32:48,940 utilizatorul a cooperat, iar dacă acestea nu au, o fac din nou, un do- 815 00:32:48,940 --> 00:32:51,460 în timp ce bucla se pretează la acest tip de logică. 816 00:32:51,460 --> 00:32:55,640 Deoarece ca comanda de sus în jos sugerează aici, 817 00:32:55,640 --> 00:32:57,750 nu înseamnă, literal, face acest lucru. 818 00:32:57,750 --> 00:32:59,830 Și de a face acest lucru din nou și din nou, ceea ce ar putea fi? 819 00:32:59,830 --> 00:33:03,000 Poate că înseamnă GetInt de asteptare sau getString și apoi 820 00:33:03,000 --> 00:33:05,830 verificarea valoarea GetInt sau getString și apoi striga 821 00:33:05,830 --> 00:33:08,260 la utilizatorul în cazul în care nu au cooperat, cerându-le 822 00:33:08,260 --> 00:33:10,100 din nou și din nou și din nou. 823 00:33:10,100 --> 00:33:11,730 În cazul în care vrei să faci ceva o dată, 824 00:33:11,730 --> 00:33:13,210 apoi a verifica anumite conditii. 825 00:33:13,210 --> 00:33:14,110 >> Deci, haideți să încercăm asta. 826 00:33:14,110 --> 00:33:17,130 Lasă-mă să schimbați, de fapt asta acum într-o buclă do-timp. 827 00:33:17,130 --> 00:33:18,830 Și am de gând să merg mai departe și procedați în felul următor. 828 00:33:18,830 --> 00:33:21,830 La fel și următorul. 829 00:33:21,830 --> 00:33:26,870 Hai sa facem int i = GetInt (), dar hai sa spun in primul rind de utilizare 830 00:33:26,870 --> 00:33:27,410 ce să fac. 831 00:33:27,410 --> 00:33:29,050 Deci, un pic diferit de data asta. 832 00:33:29,050 --> 00:33:31,270 "Dă-mi un int". 833 00:33:31,270 --> 00:33:32,910 Așa că voi folosi printf pentru asta. 834 00:33:32,910 --> 00:33:35,740 Și acum am de gând să merg aici, și am de gând să fac asta 835 00:33:35,740 --> 00:33:41,520 în timp ce i este, să zicem, mai mare decât - 836 00:33:41,520 --> 00:33:47,540 Să vedem, i este, să zicem, mai puțin decât 0, sau i se 837 00:33:47,540 --> 00:33:48,730 mai mare de 10. 838 00:33:48,730 --> 00:33:51,810 Cu alte cuvinte, vreau un număr de la 1 la 9, doar 839 00:33:51,810 --> 00:33:52,720 arbitrar. 840 00:33:52,720 --> 00:33:55,290 Deci, eu am folosit o expresie booleană aici pentru a combinat 841 00:33:55,290 --> 00:33:59,930 asigurați-vă că i este mai mic decât 0 sau mai mare de 10, în care 842 00:33:59,930 --> 00:34:02,530 caz că va face acest lucru bucla din nou aici. 843 00:34:02,530 --> 00:34:04,400 Deci, din nou, face acest lucru - 844 00:34:04,400 --> 00:34:08,480 în timp ce i este mai mic decât 0 sau i este mai mare de 10. 845 00:34:08,480 --> 00:34:11,440 >> Deci, acum să mergem mai departe și face acest lucru după ce am făcut asta. 846 00:34:11,440 --> 00:34:13,270 Hai să facem doar o verificare rapidă bun-simț. 847 00:34:13,270 --> 00:34:18,929 printf ("Mulțumesc, i este% d", i). 848 00:34:18,929 --> 00:34:21,350 Deci, acest program simplu solicită de utilizator pentru un int, 849 00:34:21,350 --> 00:34:24,000 face sigur că e ceva în intervalul de la 1 la 9 inclusiv, 850 00:34:24,000 --> 00:34:26,280 și apoi mulțumește utilizatorului, amintindu-le ceea ce ei tocmai 851 00:34:26,280 --> 00:34:27,940 tastat în, la fel ca și un cec bun-simț pic. 852 00:34:27,940 --> 00:34:30,659 Dar hai să vedem dacă asta funcționează astfel cum sa prevăzut. 853 00:34:30,659 --> 00:34:34,533 Lasă-mă să merg cu capul în jos aici și re-rulați make buclă. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Utilizarea identificator nedeclarate" i "". Asta e ciudat. 856 00:34:38,600 --> 00:34:41,509 Am crezut că am rezolvat asta. 857 00:34:45,489 --> 00:34:47,560 Același simptom, dar alt cod. 858 00:34:47,560 --> 00:34:47,899 Da? 859 00:34:47,899 --> 00:34:50,191 PUBLICUL: [inaudibil] în interiorul doi, trebuie să ne 860 00:34:50,191 --> 00:34:52,639 [Neauzit]. 861 00:34:52,639 --> 00:34:53,260 >> David J. MALAN: Exact. 862 00:34:53,260 --> 00:34:55,989 Deci, acest fapt ne conduce la un subiect cunoscut sub numele de domeniul de aplicare. 863 00:34:55,989 --> 00:34:59,350 Se pare că C, din nou, într-adevăr te duce literalmente. 864 00:34:59,350 --> 00:35:02,970 Și dacă faci ceva de genul asta în cazul în care declara o int 865 00:35:02,970 --> 00:35:06,120 și atribuiți apoi o valoare, dar să faci asta în interiorul unui 866 00:35:06,120 --> 00:35:09,840 pereche de acolade, ceea ce face C este se presupune că 867 00:35:09,840 --> 00:35:14,800 vreau doar acele biti 32 cunoscuți ca i să existe în cadrul 868 00:35:14,800 --> 00:35:18,200 cadrul acestor acolade, în contextul liniilor 869 00:35:18,200 --> 00:35:22,420 6 până la 9. Deci, i este declarată, și se atribuie un 870 00:35:22,420 --> 00:35:26,530 valoarea din linia 8, dar de îndată ce ajungi în afara 871 00:35:26,530 --> 00:35:30,270 Linia 9 de mai jos bretele cret, i nu mai este în 872 00:35:30,270 --> 00:35:31,910 domeniul de aplicare, ca să spunem așa. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. E nu mai este în contextul potrivit. 874 00:35:35,030 --> 00:35:37,940 Deci, acum nu există nici un i, așa că e ca și cum nu am avut chiar 875 00:35:37,940 --> 00:35:38,770 a declarat că, la toate. 876 00:35:38,770 --> 00:35:41,520 >> Deci, ce e un fix atunci pentru așa ceva, în cazul în care 877 00:35:41,520 --> 00:35:44,300 Motivul este că i este declarat în cadrul acolade, care 878 00:35:44,300 --> 00:35:45,120 este aparent rău? 879 00:35:45,120 --> 00:35:45,410 Aici? 880 00:35:45,410 --> 00:35:46,820 PUBLICUL: [neauzit]. 881 00:35:46,820 --> 00:35:47,150 David J. MALAN: Da. 882 00:35:47,150 --> 00:35:48,710 Astfel încât să putem inițializa afara. 883 00:35:48,710 --> 00:35:53,530 Așa că lasă-mă să merg mai departe și ștergeți părțile declarație prin care 884 00:35:53,530 --> 00:35:55,820 Am specifica tipul, și lasă-mă să-l fac aici. 885 00:35:55,820 --> 00:36:00,220 Deci, în linia 5, acum spune: "Dă-mi un int." Spune-i. 886 00:36:00,220 --> 00:36:03,400 Observați în linia 9, nu vreau să fac asta, pentru că am 887 00:36:03,400 --> 00:36:04,830 au deja biti 32. 888 00:36:04,830 --> 00:36:06,140 Nu vreau să solicite un calculator pentru 889 00:36:06,140 --> 00:36:07,630 biți diferite 32. 890 00:36:07,630 --> 00:36:09,850 Vreau să folosesc aceste aceleași 32 de biți. 891 00:36:09,850 --> 00:36:13,190 Și acum, pentru că i se declară în linia 5, este încă legit 892 00:36:13,190 --> 00:36:16,550 să-l folosească în linia 11 și linia 12. 893 00:36:16,550 --> 00:36:19,310 >> Așa că lasă-mă să încerc să recompilați acest lucru și a vedea 894 00:36:19,310 --> 00:36:20,490 în cazul în care se oprește zăngănit țipa. 895 00:36:20,490 --> 00:36:22,380 face bucla. 896 00:36:22,380 --> 00:36:25,470 Deci, acum este "declarația implicită a funcției 897 00:36:25,470 --> 00:36:29,880 "GetInt" este nul în C99 "Ce este asta.? 898 00:36:29,880 --> 00:36:30,400 Da? 899 00:36:30,400 --> 00:36:32,330 PUBLICUL: [neauzit]. 900 00:36:32,330 --> 00:36:32,690 David J. MALAN: Da. 901 00:36:32,690 --> 00:36:35,520 Deci, acum că eu sunt, folosind de fapt GetInt, acest lucru nu este ceva 902 00:36:35,520 --> 00:36:38,190 ca doar vine cu C. Acest lucru vine de la CS50. 903 00:36:38,190 --> 00:36:39,890 Deci, avem nevoie de asta aici. 904 00:36:39,890 --> 00:36:41,450 Și lasă-mă să mă întorc la promptul jos 905 00:36:41,450 --> 00:36:43,500 aici și re-rulați make. 906 00:36:43,500 --> 00:36:44,160 Bine, în cele din urmă. 907 00:36:44,160 --> 00:36:46,270 Acum am rezolvat și că altă eroare. 908 00:36:46,270 --> 00:36:48,930 Lasă-mă să ruleze, acum, bucla și a vedea ce se întâmplă. 909 00:36:48,930 --> 00:36:51,740 "Dă-mi un int." Eu voi da 11. 910 00:36:51,740 --> 00:36:53,100 Eu voi da -1. 911 00:36:53,100 --> 00:36:54,470 Eu voi da foo. 912 00:36:54,470 --> 00:36:56,080 Eu voi da 5. 913 00:36:56,080 --> 00:36:57,450 Și, într-adevăr funcționează acum. 914 00:36:57,450 --> 00:36:59,410 Dar promptul schimbat pentru un motiv aici. 915 00:36:59,410 --> 00:37:02,800 De ce l-am spus încercați din nou una dintre aceste ori, dar da-mi un 916 00:37:02,800 --> 00:37:03,920 int celelalte trei ori? 917 00:37:03,920 --> 00:37:05,500 De ce este faptul că un comportament diferit? 918 00:37:05,500 --> 00:37:06,980 PUBLICUL: dat un șir. 919 00:37:06,980 --> 00:37:07,830 David J. MALAN: Imi pare rau? 920 00:37:07,830 --> 00:37:08,570 PUBLICUL: Ai dat un șir. 921 00:37:08,570 --> 00:37:08,990 David J. MALAN: Da. 922 00:37:08,990 --> 00:37:11,450 Așa că am dat un șir în această a treia încercare, 923 00:37:11,450 --> 00:37:12,490 când am tastat foo. 924 00:37:12,490 --> 00:37:13,200 Foo este un șir de caractere. 925 00:37:13,200 --> 00:37:14,340 E evident ca nu o int. 926 00:37:14,340 --> 00:37:17,500 Și modul în care a pus în aplicare CS50 GetInt este că noi 927 00:37:17,500 --> 00:37:20,330 Nu verifica dacă ceva e mai mică de 0 sau mai mare de 10 928 00:37:20,330 --> 00:37:22,260 pentru tine, pentru că de unde știm dinainte ce fel de 929 00:37:22,260 --> 00:37:23,130 int vrei? 930 00:37:23,130 --> 00:37:25,880 Dar putem verifica minim pentru tine, ai ghidul de cel puțin 931 00:37:25,880 --> 00:37:26,730 tastați un număr întreg? 932 00:37:26,730 --> 00:37:30,500 Și dacă nu au făcut-, am țipa la utilizator prin tastarea "retry" pe 933 00:37:30,500 --> 00:37:31,440 ecranului. 934 00:37:31,440 --> 00:37:34,210 >> Deci, acum avem un program care este looping. Bine. 935 00:37:34,210 --> 00:37:37,070 Acum, care dintre acestea este un fel de construct mai bine? 936 00:37:37,070 --> 00:37:39,060 Deci, acest lucru este în cazul în care lucrurile încep să obțineți un pic dezordonat, 937 00:37:39,060 --> 00:37:42,360 Faptul că trebuie să vă amintiți de a declara o variabila aici 938 00:37:42,360 --> 00:37:44,630 dacă doriți să-l utilizați în interiorul unor 939 00:37:44,630 --> 00:37:46,460 acolade și în afara. 940 00:37:46,460 --> 00:37:48,490 Dar, chiar dacă acest lucru pare un pic criptic la prima 941 00:37:48,490 --> 00:37:50,750 ochire, doar din nou, amintiți-vă logica simpla. 942 00:37:50,750 --> 00:37:54,630 În scopul de a utiliza ceva în C, indiferent dacă este o funcție sau 943 00:37:54,630 --> 00:37:57,680 este o variabilă, trebuie să-l includă în cazul în care este o funcție 944 00:37:57,680 --> 00:37:59,770 în unele bibliotecă, sau trebuie să-l declare. 945 00:37:59,770 --> 00:38:02,405 Dar acum trebuie să fim atenți în plus de faptul că 946 00:38:02,405 --> 00:38:04,940 tu îl declară în domeniul de aplicare dreapta. 947 00:38:04,940 --> 00:38:08,150 Tu nu-l pune prea tare în interiorul parantezelor. 948 00:38:08,150 --> 00:38:09,410 >> Așa că lasă-mă să se rostogolească de fapt, înapoi. 949 00:38:09,410 --> 00:38:12,660 Dacă ne întoarcem la noi, de exemplu, de la mai devreme, și mă duc 950 00:38:12,660 --> 00:38:19,245 inapoi la pentru int, int i = 0; i <10; i + +, și am 951 00:38:19,245 --> 00:38:26,370 face Stele printf, cum ar fi aceasta, și apoi paren aproape, și acum 952 00:38:26,370 --> 00:38:30,410 printf i este acum - 953 00:38:30,410 --> 00:38:33,500 conform aceleiași logici, ce se va întâmpla atunci când am încerca să 954 00:38:33,500 --> 00:38:35,500 compila acest program? 955 00:38:35,500 --> 00:38:36,790 PUBLICUL: identificator invalid. 956 00:38:36,790 --> 00:38:38,560 David J. MALAN: Deci e un alt identificator invalid, 957 00:38:38,560 --> 00:38:39,470 nedeclarate identificator. 958 00:38:39,470 --> 00:38:41,810 Acum, motivul e un pic diferit. 959 00:38:41,810 --> 00:38:44,370 Nu e evident, nu acolade aici, dar același 960 00:38:44,370 --> 00:38:46,790 Ideea, aceeași poveste a domeniului de aplicare. 961 00:38:46,790 --> 00:38:50,340 Dacă ați declarat o variabilă ca și cum aș interiorul unui 962 00:38:50,340 --> 00:38:53,960 pentru bucla, chiar dacă nu ați scris în mod explicit cret 963 00:38:53,960 --> 00:38:56,980 bretele, cred că de ei mental ca fiind încă acolo, în care 964 00:38:56,980 --> 00:39:00,310 caz i este valabil doar în interiorul a buclei pentru. 965 00:39:00,310 --> 00:39:03,080 Acesta nu este valabilă odată ce ajunge la linia următoare, care, în 966 00:39:03,080 --> 00:39:05,090 acest caz, este acum 10. 967 00:39:05,090 --> 00:39:09,060 Deci, doar la câteva aspecte ale domeniului de aplicare și similar. 968 00:39:09,060 --> 00:39:12,620 În regulă, întrebări? 969 00:39:12,620 --> 00:39:15,310 >> În regulă, deci asta este un fel de un mic program banal, 970 00:39:15,310 --> 00:39:17,450 imprimarea doar stele mici. 971 00:39:17,450 --> 00:39:20,400 Dar hai să vedem dacă vă amintiți acest cântec aici. 972 00:39:20,400 --> 00:39:22,530 Acesta este un cantec incredibil de enervant copiii vor cânta pe 973 00:39:22,530 --> 00:39:23,550 autobuz școlar și similar. 974 00:39:23,550 --> 00:39:25,990 Dar ce e frumos despre ea este că are această ciclicitate, 975 00:39:25,990 --> 00:39:27,910 care e "99 de sticle de bere pe perete, 976 00:39:27,910 --> 00:39:28,520 99 de sticle de bere. 977 00:39:28,520 --> 00:39:31,030 Luați o în jos, trece-l în jurul valorii de, 98 de sticle de bere pe 978 00:39:31,030 --> 00:39:34,330 de perete. "Și apoi cântecul repetă 97, apoi 96, apoi 979 00:39:34,330 --> 00:39:38,040 95, apoi 94, tot drumul până la 0 daca tu de fapt ai ca 980 00:39:38,040 --> 00:39:38,920 departe pe autobuz. 981 00:39:38,920 --> 00:39:41,960 Deci, acesta este un program de frumos pentru a sorta de utilaj, deoarece mea 982 00:39:41,960 --> 00:39:43,650 Dumnezeu, dacă ai putea să pună în aplicare acest lucru cu doar câteva 983 00:39:43,650 --> 00:39:46,660 de linii de cod, ai putea scuipat versurile întregi la prezentul 984 00:39:46,660 --> 00:39:48,240 cântec destul de repede. 985 00:39:48,240 --> 00:39:50,420 Dar de-a lungul drum, putem începe să tachineze acum Apart unele 986 00:39:50,420 --> 00:39:52,460 acestor constructe de bază buclă și acum, de asemenea, 987 00:39:52,460 --> 00:39:55,830 introducă funcții care ne scrie, returna valori 988 00:39:55,830 --> 00:39:57,020 pe care le trece în jurul valorii de. 989 00:39:57,020 --> 00:39:58,910 Dar, mai întâi, de ce nu mergem mai departe și să ia noastră de cinci minute 990 00:39:58,910 --> 00:39:59,320 rupe aici? 991 00:39:59,320 --> 00:40:01,480 Și când ne vom întoarce, vom cânta acest cântec. 992 00:40:05,680 --> 00:40:08,760 >> În regulă, deci ne-am întors. 993 00:40:08,760 --> 00:40:11,850 Și când spun că voi cânta acest cântec acum, vreau să spun 994 00:40:11,850 --> 00:40:13,250 programatic, nu verbal. 995 00:40:13,250 --> 00:40:19,370 Deci, aici avem beer1.c, care este unul punerea în aplicare a prezentei 996 00:40:19,370 --> 00:40:20,580 cântec special. 997 00:40:20,580 --> 00:40:23,110 Și doar pentru a fi clar, pentru cei nefamiliarizați cu ceea ce 998 00:40:23,110 --> 00:40:24,460 acest lucru arata ca, lasă-mă să merg mai departe 999 00:40:24,460 --> 00:40:27,070 și să facă beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Acum, permiteți-mi să ruleze beer1, și ceea ce vom vedea - cât de multe sticle 1001 00:40:30,400 --> 00:40:31,140 de bere va fi acolo? 1002 00:40:31,140 --> 00:40:33,240 Voi tip în 99, cum ar fi cântecul spune. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 Și acum, dacă vom parcurge - 1005 00:40:35,650 --> 00:40:38,280 Hopa - dacă am parcurge toate acestea, vom vedea că 1006 00:40:38,280 --> 00:40:41,350 această a cantat intr-adevar cântec întreg. 1007 00:40:44,050 --> 00:40:44,540 Stai un minut. 1008 00:40:44,540 --> 00:40:46,240 Barul meu defilare E un pic dat peste cap. 1009 00:40:46,240 --> 00:40:47,940 Să folosim fereastra mai mare. 1010 00:40:47,940 --> 00:40:53,500 Deci beer1, 99, acolo mergem. 1011 00:40:53,500 --> 00:40:56,420 Deci, aici avem cântec întreg, cântat mult mai rapid de 1012 00:40:56,420 --> 00:40:58,450 calculator decât ar fi putut fi de noi. 1013 00:40:58,450 --> 00:41:00,340 Deci observați, însă, natura ciclică aici. 1014 00:41:00,340 --> 00:41:03,380 Se spune 99, apoi 99, apoi "ia una în jos, să-l dați 1015 00:41:03,380 --> 00:41:04,740 în jurul valorii de, ", apoi 98. 1016 00:41:04,740 --> 00:41:06,640 Și acum se repetă din nou și din nou. 1017 00:41:06,640 --> 00:41:08,840 >> Deci, aceasta este de fapt o oportunitate perfecta pentru un fel de 1018 00:41:08,840 --> 00:41:10,400 looping construi. 1019 00:41:10,400 --> 00:41:12,950 Observați că eu sunt un fel de tăiere a unui colț aici. 1020 00:41:12,950 --> 00:41:15,960 Observați că am spus "98 de sticle de bere pe perete, 1021 00:41:15,960 --> 00:41:19,010 97 de sticle de bere pe perete, "și că a fost doar atât de 1022 00:41:19,010 --> 00:41:21,640 că, atunci când vom ajunge la unul de sticle de bere, nu am 1023 00:41:21,640 --> 00:41:23,300 să vă faceți griji despre gramatica limbii engleze. 1024 00:41:23,300 --> 00:41:25,790 Dar putem stabili, de asemenea, acest lucru cu un pic de o în cazul în care 1025 00:41:25,790 --> 00:41:26,910 condiție, probabil. 1026 00:41:26,910 --> 00:41:30,110 Dacă acest număr este singular, mergeți mai departe și spune "sticla", 1027 00:41:30,110 --> 00:41:31,840 în caz contrar, dacă e plural, spune "sticle". 1028 00:41:31,840 --> 00:41:34,150 Dar pentru acum, am tăiat complet acel colț. 1029 00:41:34,150 --> 00:41:35,520 Deci, haideți să vedem ce avem aici. 1030 00:41:35,520 --> 00:41:37,150 Deci, ne-am luat unele comentarii de la partea de sus. 1031 00:41:37,150 --> 00:41:39,450 Mă inclusiv aceste două biblioteci, după cum 1032 00:41:39,450 --> 00:41:41,140 am fost de obicei. 1033 00:41:41,140 --> 00:41:43,610 Și acum să-mi defilați în jos la prima 1034 00:41:43,610 --> 00:41:44,990 de linii efective de cod. 1035 00:41:44,990 --> 00:41:47,020 Linia 17 va începe principal. 1036 00:41:47,020 --> 00:41:50,610 Linia 21 și 20 are câte sticle de bere va fi acolo? 1037 00:41:50,610 --> 00:41:52,060 Și apoi m-am sun GetInt. 1038 00:41:52,060 --> 00:41:53,800 Și acum am un pic de un cec bun-simț. 1039 00:41:53,800 --> 00:41:57,030 >> Deci, aceasta este o convenție pe care o vom începe acum de adoptare a 1040 00:41:57,030 --> 00:41:59,620 mai riguros verificați de intrare utilizatorului. 1041 00:41:59,620 --> 00:42:01,710 Uneori, tu chiar nu vrei să-i determine din nou 1042 00:42:01,710 --> 00:42:02,630 și din nou și din nou. 1043 00:42:02,630 --> 00:42:05,620 Dacă utilizatorul șuruburi și nu cooperează, bine. 1044 00:42:05,620 --> 00:42:07,430 Închideți și doar nu face cu ei. 1045 00:42:07,430 --> 00:42:08,990 Si pentru ca e ceea ce fac eu aici. 1046 00:42:08,990 --> 00:42:12,520 Dacă n este mai mică de 1, eu doar de gând să țipi la utilizator, 1047 00:42:12,520 --> 00:42:14,330 "Îmi pare rău, că nu are sens." Și apoi am de gând să 1048 00:42:14,330 --> 00:42:16,650 a reveni arbitrar 1. 1049 00:42:16,650 --> 00:42:18,550 Deci, din nou, aceasta este doar o convenție să te obișnuiești cu. 1050 00:42:18,550 --> 00:42:19,850 Pentru moment, aceasta ia în credință. 1051 00:42:19,850 --> 00:42:22,700 Dar pana acum, am fost întotdeauna se întoarce 0, deoarece 1052 00:42:22,700 --> 00:42:25,204 am spus revin 0 denotă ce? 1053 00:42:25,204 --> 00:42:26,000 PUBLICUL: Succes. 1054 00:42:26,000 --> 00:42:27,320 David J. MALAN: Succes, asta-i tot. 1055 00:42:27,320 --> 00:42:29,740 Deci, acum că suntem în cele din urmă începe să se gândească la 1056 00:42:29,740 --> 00:42:31,330 non-succese - 1057 00:42:31,330 --> 00:42:33,760 cu alte cuvinte, cazuri de colt, stările de eroare - 1058 00:42:33,760 --> 00:42:37,520 acum am o aprovizionare infinit, sau cel puțin patru miliarde 1059 00:42:37,520 --> 00:42:39,790 lucruri posibile care pot merge greșit în programele mele. 1060 00:42:39,790 --> 00:42:42,300 Și eu pot începe atribuirea de numere individuale. 1061 00:42:42,300 --> 00:42:44,340 Acum, în general, este suficient doar să se întoarcă 1062 00:42:44,340 --> 00:42:45,730 altele decât 0 ceva. 1063 00:42:45,730 --> 00:42:48,040 Deci, vom reveni pur și simplu 1 pentru acum. 1064 00:42:48,040 --> 00:42:51,440 Dar motivul pentru returnarea 1 este faptul că de îndată ce vă veți întoarce 1065 00:42:51,440 --> 00:42:55,110 1, ghici ce se întâmplă cu restul programului? 1066 00:42:55,110 --> 00:42:55,720 Se oprește. 1067 00:42:55,720 --> 00:42:56,560 Asta e tot. 1068 00:42:56,560 --> 00:42:59,150 Deci, faptul că mă întorc 1 este eficient 1069 00:42:59,150 --> 00:43:02,950 scurt-circuitul execuția acestui program, astfel încât 1070 00:43:02,950 --> 00:43:06,780 nimic mai jos linia 27 va continua de executare. 1071 00:43:06,780 --> 00:43:09,210 De îndată ce se întoarce principale, care este. 1072 00:43:09,210 --> 00:43:13,160 >> În regulă, așa că, dacă utilizatorul nu cooperează și vom ajunge la linia 30 1073 00:43:13,160 --> 00:43:15,680 deoarece acestea tastat într-un număr de legitim, aici este meu 1074 00:43:15,680 --> 00:43:16,990 punerea în aplicare a acestui cântec. 1075 00:43:16,990 --> 00:43:19,050 Asa ca am imprimați mai întâi o linie noua de caractere, doar pentru 1076 00:43:19,050 --> 00:43:19,880 estetica. 1077 00:43:19,880 --> 00:43:21,500 Am acum o buclă pentru. 1078 00:43:21,500 --> 00:43:22,930 Și observați că fac lucrurile într-un pic 1079 00:43:22,930 --> 00:43:23,880 de-o direcție diferită. 1080 00:43:23,880 --> 00:43:26,210 Eu nu trebuie să fac mai puțin, eu nu trebuie să fac + +. 1081 00:43:26,210 --> 00:43:30,660 Pot spune în schimb inițializa o variabilă i, setați-l egal cu 1082 00:43:30,660 --> 00:43:35,080 n, numărul de utilizatorul tastat în, apoi procedați astfel, așa 1083 00:43:35,080 --> 00:43:39,590 timp cât i este mai mare decât 0, atunci I - 1084 00:43:39,590 --> 00:43:42,070 După ce ați terminat de o iterație din această buclă. 1085 00:43:42,070 --> 00:43:44,310 Deci, putem conta în jos folosind o buclă de asemenea. 1086 00:43:44,310 --> 00:43:47,520 Acum, acest lucru este destul de mult o săptămâna lucruri acum, cu printf. 1087 00:43:47,520 --> 00:43:51,770 Deci de imprimare "% d de sticle de bere pe perete." Print "% d 1088 00:43:51,770 --> 00:43:54,990 sticle de bere. "" Luați o în jos, trece-l în jurul valorii de. "Print 1089 00:43:54,990 --> 00:43:58,880 "% D sticle de bere pe perete." Deci, e încă% d, dar 1090 00:43:58,880 --> 00:44:02,770 observăm că argumentul cu printf se schimbă. 1091 00:44:02,770 --> 00:44:05,840 După virgulă, am am, pentru că vreau să spun 99. 1092 00:44:05,840 --> 00:44:08,590 După această virgulă, am am, pentru că vreau să spun 99. 1093 00:44:08,590 --> 00:44:14,030 După această virgulă, am am - 1, pentru că vreau să spun 98, în 1094 00:44:14,030 --> 00:44:16,260 această repetare în primul rând, și așa mai departe. 1095 00:44:16,260 --> 00:44:18,520 Și acum aici, am doar o remarcă stupid. 1096 00:44:18,520 --> 00:44:22,270 Și apoi linia 42, ma voi intoarce 0, prin convenție, semnificând faptul că 1097 00:44:22,270 --> 00:44:23,650 totul este în regulă. 1098 00:44:23,650 --> 00:44:24,490 >> Și ce dacă am goofed? 1099 00:44:24,490 --> 00:44:26,350 Ce s-ar putea o greșeală comună să fie aici? 1100 00:44:26,350 --> 00:44:29,200 Ei bine, ce dacă am spus accidental bine, eu nu vreau să conteze 1101 00:44:29,200 --> 00:44:31,640 la 0, vreau 0 sticle de bere pe perete? 1102 00:44:31,640 --> 00:44:34,620 Așa că am spus, i este mai mare sau egal cu 0. 1103 00:44:34,620 --> 00:44:38,920 Ce se va fi simptom pe care o văd acum, dacă am recompilați 1104 00:44:38,920 --> 00:44:41,173 beer1 și rulați-l? 1105 00:44:41,173 --> 00:44:42,120 PUBLICUL: Negativ. 1106 00:44:42,120 --> 00:44:43,590 David J. MALAN: Da, o să merg negativ. 1107 00:44:43,590 --> 00:44:45,950 Aceasta este o eroare off-cu-o, o incredibil de 1108 00:44:45,950 --> 00:44:47,270 greșeală comună pentru a face. 1109 00:44:47,270 --> 00:44:48,960 Să mergem de fapt, înapoi la fereastră terminal și fă-o 1110 00:44:48,960 --> 00:44:50,620 aici, astfel încât să putem vedea mai multe la un moment dat. 1111 00:44:50,620 --> 00:44:53,280 Introduceți, 99 de sticle de bere. 1112 00:44:53,280 --> 00:44:56,580 Aproape, dar ne-am dus vreodată atât de ușor prea departe. 1113 00:44:56,580 --> 00:45:00,500 Am cântat piesa prea departe în jos, astfel că am lovit acum 1114 00:45:00,500 --> 00:45:01,510 negativă număr. 1115 00:45:01,510 --> 00:45:03,680 Deci nu merge prea bine. 1116 00:45:03,680 --> 00:45:06,450 >> În regulă, astfel încât să putem rezolva cu ușurință că prin a merge înapoi la 1117 00:45:06,450 --> 00:45:07,650 modul în care aceasta a fost odata. 1118 00:45:07,650 --> 00:45:10,360 Dar ce sunt unele oportunități acum 1119 00:45:10,360 --> 00:45:11,190 îmbunătățire? 1120 00:45:11,190 --> 00:45:17,200 Ei bine, lasă-mă să deschid beer2.c și defilează în jos aici și să ia o 1121 00:45:17,200 --> 00:45:19,310 uita-te la aceasta versiune. 1122 00:45:19,310 --> 00:45:21,370 Care e primul lucru pe care sare la tine ca diferite 1123 00:45:21,370 --> 00:45:23,715 în această versiune aici? 1124 00:45:23,715 --> 00:45:24,190 PUBLICUL: [neauzit]. 1125 00:45:24,190 --> 00:45:26,510 David J. MALAN: Da, deci nu mai sunt eu, pentru că aceasta a avut loc la 1126 00:45:26,510 --> 00:45:29,350 mi știi ce, eu cer de utilizator pentru N, si atunci eu sunt 1127 00:45:29,350 --> 00:45:33,580 stabilirea i egale cu n, iar apoi eu am schimba, dar eu nu sunt 1128 00:45:33,580 --> 00:45:34,590 atingând n din nou. 1129 00:45:34,590 --> 00:45:37,390 Deci, ce naiba a fost punctul de ai aloca alte 32 1130 00:45:37,390 --> 00:45:45,210 biți numit i doar pentru ca pot avea o altă variabilă? 1131 00:45:45,210 --> 00:45:47,960 Deci, în acest caz, am un fel de inutile recunoscut că 1132 00:45:47,960 --> 00:45:49,190 Design caracteristică. 1133 00:45:49,190 --> 00:45:52,730 Și am de gând să spun acum în timp ce n este mai mare decât 0, du-te 1134 00:45:52,730 --> 00:45:56,180 înainte și imprima același cântec, trecerea unui n pentru ca printf 1135 00:45:56,180 --> 00:46:00,210 al doilea argument, și n - 1 ca al doilea argument aici. 1136 00:46:00,210 --> 00:46:02,930 Și apoi pe fiecare iterație a buclei acest, mergeți mai departe și doar 1137 00:46:02,930 --> 00:46:05,080 decrement n sine. 1138 00:46:05,080 --> 00:46:06,960 Acum, funcțional, acest program 1139 00:46:06,960 --> 00:46:08,010 va fi identice. 1140 00:46:08,010 --> 00:46:10,730 Dacă aș scrie în 99, N începe la 99. 1141 00:46:10,730 --> 00:46:12,890 Am decrement, decrement, scădere, scădere. 1142 00:46:12,890 --> 00:46:15,875 Mă duc pentru a obține toate drumul până la "O sticlă de bere pe 1143 00:46:15,875 --> 00:46:16,740 perete, o sticlă de bere. 1144 00:46:16,740 --> 00:46:18,020 Luați o în jos, trece-l în jurul valorii de. 1145 00:46:18,020 --> 00:46:21,480 0 de sticle de bere pe perete ". Finali, pentru că am făcut-o 1146 00:46:21,480 --> 00:46:23,200 obține starea corectă. 1147 00:46:23,200 --> 00:46:24,280 E mai mare decât 0. 1148 00:46:24,280 --> 00:46:26,220 Nu am face această greșeală. 1149 00:46:26,220 --> 00:46:28,470 >> Deci, care este mai bună, versiunea unul sau versiunea doi? 1150 00:46:31,380 --> 00:46:33,480 Așa că am auzit o grămadă de cârtirile pentru doi. 1151 00:46:33,480 --> 00:46:34,730 De ce două? 1152 00:46:37,210 --> 00:46:38,225 Ce-i asta? 1153 00:46:38,225 --> 00:46:39,215 PUBLICUL: [neauzit]. 1154 00:46:39,215 --> 00:46:40,070 David J. MALAN: Oh, bine. 1155 00:46:40,070 --> 00:46:42,870 Deci nu va merge sub 0, dar amintiți-vă, în versiunea unul, 1156 00:46:42,870 --> 00:46:45,870 Versiunea originală corectă nu merge sub 0, fie. 1157 00:46:45,870 --> 00:46:48,340 Deci, amintiți-vă că aceasta este versiunea corectă. 1158 00:46:48,340 --> 00:46:51,630 Așa că haideți să-i cel puțin a compara cele două versiuni corecte. 1159 00:46:51,630 --> 00:46:53,300 Ce este un argument în favoarea versiunii 1160 00:46:53,300 --> 00:46:55,146 două fiind, mmm, mai bine? 1161 00:46:55,146 --> 00:46:55,642 Da? 1162 00:46:55,642 --> 00:46:57,630 PUBLICUL: Se utilizează mai puțin spațiu. 1163 00:46:57,630 --> 00:46:59,530 David J. MALAN: Ok, deci foloseste mai putin spatiu, nu? 1164 00:46:59,530 --> 00:47:02,900 Întrucât o versiune pe 32 de biți utilizat pentru n, și apoi un alt 1165 00:47:02,900 --> 00:47:07,680 32 de biți pentru i. 1166 00:47:07,680 --> 00:47:10,060 Versiunea doi foloseste numai 32 de biți pentru n, astfel încât 1167 00:47:10,060 --> 00:47:11,700 pare a fi un plus. 1168 00:47:11,700 --> 00:47:12,950 Alte gânduri? 1169 00:47:18,070 --> 00:47:21,520 Vrea cineva să argumenteze în favoarea unuia? 1170 00:47:21,520 --> 00:47:22,070 Da? 1171 00:47:22,070 --> 00:47:25,240 PUBLICUL: Trebuie să utilizați linia de cod suplimentar pentru n -. 1172 00:47:25,240 --> 00:47:26,090 >> David J. MALAN: Bine, sigur. 1173 00:47:26,090 --> 00:47:26,960 Deci asta e corect. 1174 00:47:26,960 --> 00:47:29,040 Deci asta doar, cel puțin pentru mine - 1175 00:47:29,040 --> 00:47:31,940 Adică, asta se simte de fapt, un pic de Messier, faptul că 1176 00:47:31,940 --> 00:47:35,120 Eu nu pot sorta de chintesența tuturor logicii mele într-un singur 1177 00:47:35,120 --> 00:47:38,030 Linia frumos, pentru bucla, ca pentru bucla poate. 1178 00:47:38,030 --> 00:47:40,240 Aici, am cam trebui să tac în acest n - 1179 00:47:40,240 --> 00:47:41,120 la finalul buclei, deoarece 1180 00:47:41,120 --> 00:47:42,550 e logic necesar. 1181 00:47:42,550 --> 00:47:45,190 Dar este un fel de freacă-mi mod greșit, doar pentru că 1182 00:47:45,190 --> 00:47:48,260 pare separat de logica de până aici, chiar dacă, 1183 00:47:48,260 --> 00:47:49,430 din nou, e necesar. 1184 00:47:49,430 --> 00:47:50,990 Alte gânduri? 1185 00:47:50,990 --> 00:47:51,490 Da? 1186 00:47:51,490 --> 00:47:52,740 PUBLICUL: [neauzit]. 1187 00:47:57,990 --> 00:47:58,350 >> David J. MALAN: Da. 1188 00:47:58,350 --> 00:48:00,730 Deci, ce se întâmplă dacă în schimb, la sfârșitul melodiei, a vrut să 1189 00:48:00,730 --> 00:48:02,950 imprimați din nou numele melodiei? 1190 00:48:02,950 --> 00:48:05,660 Ca "Multumesc pentru a juca 99 de sticle de bere", sau ceva de genul 1191 00:48:05,660 --> 00:48:06,690 o prostie ca asta? 1192 00:48:06,690 --> 00:48:09,750 Dar punctul este, ai vrut acces la valoarea inițială. 1193 00:48:09,750 --> 00:48:13,180 Faptul că ați suferit mutatii sau schimbat n pe fiecare 1194 00:48:13,180 --> 00:48:16,330 repetare și, prin urmare, s-au distrus valoarea sa inițială 1195 00:48:16,330 --> 00:48:18,650 înseamnă pur și simplu nu se poate face că, la sfârșitul. 1196 00:48:18,650 --> 00:48:20,660 Acum, fără îndoială, noi în mod evident, nu vreau să fac 1197 00:48:20,660 --> 00:48:21,450 că, în acest program. 1198 00:48:21,450 --> 00:48:22,350 Deci, cui îi pasă? 1199 00:48:22,350 --> 00:48:23,630 Dar asta e un punct foarte valabil. 1200 00:48:23,630 --> 00:48:25,520 Și ca să fiu sincer, nu e într-adevăr nimeni 1201 00:48:25,520 --> 00:48:26,630 chiar răspunde aici. 1202 00:48:26,630 --> 00:48:28,740 Sunt amândoi la fel de corect. 1203 00:48:28,740 --> 00:48:30,210 Aș putea fi convins nici un fel. 1204 00:48:30,210 --> 00:48:33,310 Eu va spun ca, in general, este un principiu bun, dacă 1205 00:48:33,310 --> 00:48:36,030 a solicitat de utilizator pentru o anumită valoare și ați stocat într-o variabilă 1206 00:48:36,030 --> 00:48:38,730 ca n, doar un fel de principiu privind, e probabil bine 1207 00:48:38,730 --> 00:48:40,160 pentru a menține în jurul valorii de faptul că. 1208 00:48:40,160 --> 00:48:43,400 Precum și orice date pe care doriți să transforme din nou și din nou, doar 1209 00:48:43,400 --> 00:48:46,030 da-te o copie a acestei variabile, doar astfel încât să 1210 00:48:46,030 --> 00:48:47,830 au acces la versiunea originală. 1211 00:48:47,830 --> 00:48:51,040 Va petreceti mai mult de 32 de biți, dar realitatea este aceasta 1212 00:48:51,040 --> 00:48:53,490 calculatorul a, ca, doi gigaocteți de RAM in aceste zile, 1213 00:48:53,490 --> 00:48:55,310 și suntem quibbling peste 32 de biți? 1214 00:48:55,310 --> 00:48:56,320 Chiar nu o astfel de afacere mare. 1215 00:48:56,320 --> 00:48:58,550 Și chiar pe acest dispozitiv aici, cu o jumătate de concert sau o 1216 00:48:58,550 --> 00:49:01,700 gigaoctet de RAM, 32 biți versus pe 64 de biți, 1217 00:49:01,700 --> 00:49:02,920 Nu o astfel de afacere mare. 1218 00:49:02,920 --> 00:49:05,890 Desigur astăzi, o să fie drumul copleșiți de mărimea 1219 00:49:05,890 --> 00:49:08,400 a programului în sine, care va fi câteva sute de 1220 00:49:08,400 --> 00:49:10,890 kiloocteți, dacă nu de cativa megabiti, in aceste zile. 1221 00:49:10,890 --> 00:49:13,550 >> Preocupări atât de rezonabile, nu un singur raspuns corect. 1222 00:49:13,550 --> 00:49:15,490 Dar, cel puțin acestea sunt gândurile pe care ar trebui să înceapă să 1223 00:49:15,490 --> 00:49:16,790 trece prin mintea ta? 1224 00:49:16,790 --> 00:49:19,600 Pentru că în PSET 0, chiar dacă suntem cu adevarat doar de așteptat 1225 00:49:19,600 --> 00:49:22,340 corectitudinea, sau cel puțin renuntarii bug-uri diferite care 1226 00:49:22,340 --> 00:49:25,440 s-ar putea s-au confruntat, așa cum am merge mai departe, design-ul este 1227 00:49:25,440 --> 00:49:27,910 O să fie un alt aspect-cheie, atât de scrierea de cod 1228 00:49:27,910 --> 00:49:29,770 și, de asemenea, evaluarea noastră cod. 1229 00:49:29,770 --> 00:49:32,310 Și astfel, cel puțin da gândit la lucruri de acest gen. 1230 00:49:32,310 --> 00:49:35,590 Și doar pentru că lucrările ceva nu inseamna ca e bine, 1231 00:49:35,590 --> 00:49:37,130 nu înseamnă că e bine concepute. 1232 00:49:37,130 --> 00:49:38,820 Și asta e unul din lucrurile pe care semenii didactice și 1233 00:49:38,820 --> 00:49:41,990 seturi de probleme ne va ajuta să tachineze parte a lungul timpului. 1234 00:49:41,990 --> 00:49:45,020 >> Ei bine, ce zici de, să spunem, această versiune aici? 1235 00:49:45,020 --> 00:49:49,090 Lasă-mă să fac ceva un pic mai sexy aici, într-un moment. 1236 00:49:49,090 --> 00:49:50,740 În primul rând permiteți-mi să scap de asta. 1237 00:49:50,740 --> 00:49:54,120 Și acum să rezolva această problemă gramaticală. 1238 00:49:54,120 --> 00:49:58,780 Deci, în această versiune, vreau să stabilească gramatica, astfel încât, 1239 00:49:58,780 --> 00:50:02,460 mai degrabă decât să spun e paranteză, cum ar fi "sticla" 1240 00:50:02,460 --> 00:50:03,360 sau "sticle" - 1241 00:50:03,360 --> 00:50:04,900 Nu vreau să taie acel colț - 1242 00:50:04,900 --> 00:50:08,350 De asemenea, doresc să imprimați dinamic out sugerate de "sticle" 1243 00:50:08,350 --> 00:50:12,820 sau "sticla", folosind astfel substituenți acestea% s azi. 1244 00:50:12,820 --> 00:50:16,550 Așa că am nevoie pentru a verifica ceea ce este condiționat valoarea lui i. 1245 00:50:16,550 --> 00:50:19,590 Și dacă e 1, vreau să spun "sticla", iar dacă ceva e 1246 00:50:19,590 --> 00:50:23,115 altceva, vreau să spun "sticle". Deci, haideți să încercăm să facem acest lucru. 1247 00:50:23,115 --> 00:50:31,340 Deci, dacă i == 1, atunci să-mi duc mai departe și să declare - 1248 00:50:31,340 --> 00:50:34,080 Am nevoie de un șir de caractere, asa ca lasa-mă să fac s1 șir, pentru că este 1249 00:50:34,080 --> 00:50:36,070 primul șir Îmi pasă acum. 1250 00:50:36,070 --> 00:50:40,980 Am de gând să spun "sticla". Și apoi, să vedem, string 1251 00:50:40,980 --> 00:50:43,110 s2 - și voi explica de unde mă duc într-un moment - 1252 00:50:43,110 --> 00:50:47,650 "Sticle". Deci reamintesc faptul că, în acest cântec, trebuie să fim capabili 1253 00:50:47,650 --> 00:50:50,580 pentru a imprima lucruri, două cuvinte diferite cu potențial. 1254 00:50:50,580 --> 00:50:53,590 Deci, dacă ne uităm înapoi aici, observați că atunci când vom ajunge la 1255 00:50:53,590 --> 00:50:56,440 acest exemplu aici, "două sticle de bere pe perete, 1256 00:50:56,440 --> 00:50:59,490 doua sticle de bere, ia una jos, treci în jurul valorii de ", vreau 1257 00:50:59,490 --> 00:51:02,380 această a patra linie de spus acum "o sticla de bere pe 1258 00:51:02,380 --> 00:51:04,900 perete "Așa că am nevoie pentru a decide,. vreau să spun" sticle "sau 1259 00:51:04,900 --> 00:51:07,780 "Sticla"? Așa că am de gând să spun arbitrar, în regulă, 1260 00:51:07,780 --> 00:51:10,530 Am de gând să declare acum o variabilă numită s1, string 1261 00:51:10,530 --> 00:51:13,830 unul, care este mergi la a lua conectat aici și, de asemenea, aici, 1262 00:51:13,830 --> 00:51:16,070 deoarece aceste cuvinte sunt întotdeauna identice, doar din cauza 1263 00:51:16,070 --> 00:51:17,290 natura cântec. 1264 00:51:17,290 --> 00:51:20,100 Și am de gând să sun s2 orice cuvânt vreau să 1265 00:51:20,100 --> 00:51:21,560 în cele din urmă să apară aici. 1266 00:51:21,560 --> 00:51:25,530 Acum, literalmente, de 99 de ori din 100, aceasta va fi 1267 00:51:25,530 --> 00:51:28,820 aceeași în ambele cazuri, pentru că 3 este la plural, 2 este 1268 00:51:28,820 --> 00:51:30,200 plural, 4 este la plural. 1269 00:51:30,200 --> 00:51:34,640 Dar în acest caz colț, în cazul în care se ajunge la 2 și apoi 1, sau 1270 00:51:34,640 --> 00:51:37,250 chiar 1 si apoi 0, am nevoie de această logică. 1271 00:51:37,250 --> 00:51:41,020 Deci, am să-și petreacă ceva timp în codul meu obținerea acestui drept. 1272 00:51:41,020 --> 00:51:47,530 Deci, dacă am face acest lucru, dacă i == 1, atunci s1 stabilite egale cu "sticla" 1273 00:51:47,530 --> 00:51:52,010 și S2 egal cu "sticle", deoarece acest lucru va fi de 1 1274 00:51:52,010 --> 00:51:56,340 sticla, iar acest lucru va fi pentru 0 sticle. 1275 00:51:56,340 --> 00:51:58,250 Și asta aici, ce înseamnă asta reprezinta? 1276 00:51:58,250 --> 00:51:59,780 Doar ca să fie clar. 1277 00:51:59,780 --> 00:52:00,620 Acesta este doar un comentariu. 1278 00:52:00,620 --> 00:52:03,730 Deci, faptul că puteți avea o singură linie comentariile pe care le reprezintă 1279 00:52:03,730 --> 00:52:06,110 poate comenta codul dvs. cum ar fi acest lucru, dar un alt comună 1280 00:52:06,110 --> 00:52:09,050 paradigmă, de asemenea, este că, dacă aveți o expresie super-scurt, care 1281 00:52:09,050 --> 00:52:11,410 vrei sa te pui si e doar mai ușor de citit pentru a pune 1282 00:52:11,410 --> 00:52:13,270 se chiar la capătul liniei de cod, puteți 1283 00:52:13,270 --> 00:52:15,230 face absolut ceva de genul asta. 1284 00:52:15,230 --> 00:52:20,150 >> Deci, acum, ce se întâmplă dacă am face acest lucru? Altceva dacă i nu este egal cu 1. 1285 00:52:20,150 --> 00:52:21,620 Deci, bang egal - 1286 00:52:21,620 --> 00:52:23,150 semn de exclamare este cunoscut sub numele de "bang". 1287 00:52:23,150 --> 00:52:25,080 Deci, bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Deci, dacă i nu este egal cu 1, ceea ce nu am loc doriți să faceți? 1289 00:52:28,530 --> 00:52:31,700 Ei bine, primul cuvânt Vreau sa fiu ce? 1290 00:52:34,620 --> 00:52:40,030 Deci, ar trebui să fie un șir de "sticle" pentru sticle plural, 1291 00:52:40,030 --> 00:52:42,440 și apoi aceasta va fi la plural "sticle", precum și, pentru moment. 1292 00:52:42,440 --> 00:52:43,800 Și vom vedea dacă acest lucru devine de fapt ne-a 1293 00:52:43,800 --> 00:52:44,870 în cazul în care vrem să mergem. 1294 00:52:44,870 --> 00:52:47,680 Deci, acum, dacă aș defila în jos aici, observați că eu sunt de a conecta 1295 00:52:47,680 --> 00:52:50,170 nu numai eu, ci s1. 1296 00:52:50,170 --> 00:52:51,860 Sunt conectarea i și s1. 1297 00:52:51,860 --> 00:52:54,440 Și apoi aici, eu sunt minus 1, care este aceeași ca și 1298 00:52:54,440 --> 00:52:55,920 înainte, dar s2. 1299 00:52:55,920 --> 00:52:58,730 Cu alte cuvinte, vreau cuvânt în limba engleză pentru a schimba pe baza 1300 00:52:58,730 --> 00:52:59,930 pe această logică. 1301 00:52:59,930 --> 00:53:03,310 Acum, există deja unele probleme în acest cod. 1302 00:53:03,310 --> 00:53:08,460 Ceea ce este rupt deja de poarta aici? 1303 00:53:08,460 --> 00:53:10,796 Da? 1304 00:53:10,796 --> 00:53:13,210 PUBLICUL: [neauzit]. 1305 00:53:13,210 --> 00:53:13,800 >> David J. MALAN: Exact. 1306 00:53:13,800 --> 00:53:16,030 Așa că am încălcat deja lecția de aplicare. 1307 00:53:16,030 --> 00:53:19,610 Așa că m-am declarat S1 și S2, dar am făcut-o în interiorul 1308 00:53:19,610 --> 00:53:22,980 acolade, ceea ce înseamnă Da, acest cod va funcționa până 1309 00:53:22,980 --> 00:53:27,430 până la linia 42, dar de indata ce l-am lovit linia 43, ghici ce nu 1310 00:53:27,430 --> 00:53:28,900 mai există? 1311 00:53:28,900 --> 00:53:32,600 Ei bine, ghici ce e nu mai este în sfera de aplicare - nici S1 sau S2. 1312 00:53:32,600 --> 00:53:33,780 Așa că trebuie să repar asta. 1313 00:53:33,780 --> 00:53:36,180 Așa că lasă-mă să ștergeți declarațiile. 1314 00:53:36,180 --> 00:53:39,320 Și voi lăsa nume de variabile și ștergeți această evaluare aici 1315 00:53:39,320 --> 00:53:40,120 și ștergeți această aici. 1316 00:53:40,120 --> 00:53:43,557 Și în ce ar trebui să mă declar foarte mult de aceste lucruri? 1317 00:53:43,557 --> 00:53:44,960 PUBLICUL: [neauzit]. 1318 00:53:44,960 --> 00:53:45,410 David J. MALAN: Da, așa, probabil, 1319 00:53:45,410 --> 00:53:46,850 chiar aici, 33-ISH. 1320 00:53:46,850 --> 00:53:50,670 Deci, s1 șir și apoi șirul s2. 1321 00:53:50,670 --> 00:53:51,950 Și se pare, eu pot face asta. 1322 00:53:51,950 --> 00:53:54,260 Daca te declararea două variabile de același tip, 1323 00:53:54,260 --> 00:53:57,420 de fapt, puteți folosi doar o virgulă și de a face că, în C. Toate 1324 00:53:57,420 --> 00:53:58,970 Bine, așa că acum am două variabile - 1325 00:53:58,970 --> 00:53:59,860 S1 și S2. 1326 00:53:59,860 --> 00:54:02,000 Sunt atribuindu-le valori în aceste 1327 00:54:02,000 --> 00:54:04,210 condiții de aici, sau aici. 1328 00:54:04,210 --> 00:54:06,690 Și apoi eu le folosesc de mai jos. 1329 00:54:06,690 --> 00:54:10,960 Cât de bine este acest lucru acum va merge? 1330 00:54:10,960 --> 00:54:12,740 >> Ei bine, e încă un pic buggy, dar hai sa vedem cel puțin 1331 00:54:12,740 --> 00:54:13,730 cat de departe am ajuns. 1332 00:54:13,730 --> 00:54:16,500 Așa că lasă-mă să mergeți mai departe și să facă beer3. 1333 00:54:16,500 --> 00:54:17,695 Este aceasta beer3? 1334 00:54:17,695 --> 00:54:19,410 Da, acest lucru este beer3. 1335 00:54:19,410 --> 00:54:21,510 Și acum să-mi merge mai departe și a alerga beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Ne putem sări peste, probabil, cele mai multe dintre ele. 1338 00:54:25,840 --> 00:54:29,100 Și aici, uita-te la asta. 1339 00:54:29,100 --> 00:54:31,110 "O sticlă de bere pe perete, o sticla de bere, ia 1340 00:54:31,110 --> 00:54:34,306 unul în jos, să-l dați în jurul valorii de, 0 sticle de bere pe perete. " 1341 00:54:34,306 --> 00:54:37,570 Dar am atrage atenția asupra numai jumătate din soluție. 1342 00:54:37,570 --> 00:54:39,620 Un fel de greșit aici. 1343 00:54:39,620 --> 00:54:43,030 Deci se pare că în cazurile de colt apar atunci când i este egal cu ceea ce 1344 00:54:43,030 --> 00:54:44,030 două valori? 1345 00:54:44,030 --> 00:54:45,020 PUBLICUL: 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 Nu e 1 si nu 1. 1348 00:54:48,180 --> 00:54:51,890 E într-adevăr doar aceste ultimele două strofe ale acestui cântec. 1349 00:54:51,890 --> 00:54:53,890 Deci, ce am în loc doriți să faceți? 1350 00:54:53,890 --> 00:54:58,890 Asa ca am par să fi prins cazul în care, dacă i este == la 1, 1351 00:54:58,890 --> 00:55:02,240 apoi primul cuvânt este "sticla", dar al doilea cuvânt 1352 00:55:02,240 --> 00:55:07,230 este "sticle". Dar aici, vreau să schimbe acest lucru să fie == 2. 1353 00:55:07,230 --> 00:55:08,570 Și dacă acesta este cazul, ce vreau eu 1354 00:55:08,570 --> 00:55:09,620 primul cuvânt să fie? 1355 00:55:09,620 --> 00:55:10,430 PUBLICUL: "Sticle". 1356 00:55:10,430 --> 00:55:12,890 David J. MALAN: "Sticle", astfel încât pentru două sticle. 1357 00:55:12,890 --> 00:55:14,690 Și apoi aici, acest cuvânt ar trebui să fie - 1358 00:55:14,690 --> 00:55:15,340 PUBLICUL: "Sticlă". 1359 00:55:15,340 --> 00:55:17,316 David J. MALAN: "Bottle", singular. 1360 00:55:20,430 --> 00:55:25,160 >> În regulă, hai să zoom out, du-te înapoi aici, re-rulați make, 1361 00:55:25,160 --> 00:55:28,590 Re-run beer3, de tip 99 din nou. 1362 00:55:28,590 --> 00:55:30,710 Bine, "Segmentation fault (core fac obiectul unui dumping)." 1363 00:55:30,710 --> 00:55:32,780 Ce am făcut greșit? 1364 00:55:36,050 --> 00:55:38,722 PUBLICUL: Nu aveți o valoare de [neauzit]. 1365 00:55:38,722 --> 00:55:40,480 David J. MALAN: Ah, excelent punct de. 1366 00:55:40,480 --> 00:55:43,310 În regulă, deci ce sa întâmplat aici? 1367 00:55:43,310 --> 00:55:45,450 Deci eroare de segmentare, de fapt, și ne vom vedea 1368 00:55:45,450 --> 00:55:49,020 acest lucru destul de câteva ori în viitor, în mod deliberat. 1369 00:55:49,020 --> 00:55:51,030 Dar pentru acum, ceea ce înseamnă de fapt? 1370 00:55:51,030 --> 00:55:53,620 O eroare de segmentare aproape întotdeauna înseamnă că aveți 1371 00:55:53,620 --> 00:55:56,760 cumva a încercat să acceseze memoria, RAM în calculator, 1372 00:55:56,760 --> 00:56:00,600 care nu este în proprietatea, că nu ați cerut de fapt, 1373 00:56:00,600 --> 00:56:02,050 sistemul de operare pentru. 1374 00:56:02,050 --> 00:56:04,440 Deci, în acest caz, observa ceea ce am făcut, ceea ce este 1375 00:56:04,440 --> 00:56:05,870 viciate în logica mea. 1376 00:56:05,870 --> 00:56:09,500 Am alocat S1 și S2 o valoare dacă i este egal cu 1. 1377 00:56:09,500 --> 00:56:11,590 Am făcut, de asemenea, că, dacă i este egal cu 2. 1378 00:56:11,590 --> 00:56:13,710 Dar nu am făcut-o în număr infinit de alte 1379 00:56:13,710 --> 00:56:14,690 Posibilitățile - 1380 00:56:14,690 --> 00:56:17,940 în special, 3 sau 4 sau dot, dot, dot, 99. 1381 00:56:17,940 --> 00:56:20,100 Deci, un remediu pentru acest lucru ar putea fi doar hai să 1382 00:56:20,100 --> 00:56:22,190 avea o condiție de altcineva. 1383 00:56:22,190 --> 00:56:26,780 Și lasă-mă să merg aici și să spunem s1 este egal cu - 1384 00:56:26,780 --> 00:56:28,180 ceea ce ar trebui să fie aici? 1385 00:56:28,180 --> 00:56:28,750 PUBLICUL: [neauzit]. 1386 00:56:28,750 --> 00:56:30,460 >> David J. MALAN: "Sticle", deoarece, în caz comun, 1387 00:56:30,460 --> 00:56:32,020 e doar același lucru. 1388 00:56:32,020 --> 00:56:35,580 Deci, este egală cu oferta, citatul, "sticle". Deci, pentru plural 1389 00:56:35,580 --> 00:56:41,010 sticle, iar apoi aici, pentru sticle plural. 1390 00:56:41,010 --> 00:56:44,580 Bine, deci acum să mă întorc la fereastră terminalul meu, 1391 00:56:44,580 --> 00:56:47,200 recompilați, se re-rula. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Uau. 1394 00:56:49,150 --> 00:56:50,610 Și hai să facem o verificare rapidă bun-simț. 1395 00:56:50,610 --> 00:56:52,400 Punct de vedere tehnic, am dori să citească toate acestea pentru a se asigura 1396 00:56:52,400 --> 00:56:53,370 sunt corecte, dar să ne uităm la 1397 00:56:53,370 --> 00:56:54,640 cel puțin vinovați cunoscute. 1398 00:56:54,640 --> 00:56:57,370 3 sticle, 2 sticle, 2 sticle, 1 1399 00:56:57,370 --> 00:57:00,380 flacon, 1 flacon, 0 sticle. 1400 00:57:00,380 --> 00:57:03,080 Se pare că am cel puțin, fixată pentru acum. 1401 00:57:03,080 --> 00:57:06,010 Dar captura aici este că ceea ce o mizerie îngrozitoare Dumnezeu, asta este 1402 00:57:06,010 --> 00:57:07,470 doar pentru a rezolva o prostie 1403 00:57:07,470 --> 00:57:09,540 de un caracter gramaticale detalii. 1404 00:57:09,540 --> 00:57:11,150 Deci, există un fel de motiv pentru care m-am tăiat acest colț 1405 00:57:11,150 --> 00:57:14,090 mai devreme, pentru că e doar enervant complet pentru a avea la 1406 00:57:14,090 --> 00:57:15,020 scrie acest cod de mult. 1407 00:57:15,020 --> 00:57:17,530 Dar se pare că există metode ușor mai elegante ale 1408 00:57:17,530 --> 00:57:20,110 exprima exact același lucru. 1409 00:57:20,110 --> 00:57:22,040 Și putem face acest lucru, după cum urmează. 1410 00:57:22,040 --> 00:57:23,890 >> Lasă-mă lăsa asta pe ecran pentru un moment și 1411 00:57:23,890 --> 00:57:27,320 introducă ceva cunoscut ca un operator de ternar. 1412 00:57:27,320 --> 00:57:29,600 Aceasta este un fel de una-liner care a vrut doar să ne facem 1413 00:57:29,600 --> 00:57:31,880 trăiește un pic mai sexy, așa cum a promis. 1414 00:57:31,880 --> 00:57:33,130 Și am de gând să fac asta, după cum urmează. 1415 00:57:33,130 --> 00:57:35,810 Dă-mi un șir numit s1, și lasă-mă să 1416 00:57:35,810 --> 00:57:37,200 atribui, după cum urmează. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Bottle", în caz contrar "sticle". String s2 devine (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Bottle", în caz contrar "sticle". 1420 00:57:52,670 --> 00:57:57,050 Deci, ce este atunci diferența aici? 1421 00:57:57,050 --> 00:57:59,370 Aceste două linii de cod, eu susțin, pot 1422 00:57:59,370 --> 00:58:02,200 înlocuiască toată mizeria asta. 1423 00:58:02,200 --> 00:58:04,280 Așa că îl numesc o mizerie, doar pentru că un fel de freacă mine 1424 00:58:04,280 --> 00:58:05,940 mod greșit că e atât de multe linii de cod. 1425 00:58:05,940 --> 00:58:06,650 Nu este greșit. 1426 00:58:06,650 --> 00:58:07,700 Nu e rău de proiectare. 1427 00:58:07,700 --> 00:58:10,140 Place, acest lucru este perfect corectă și foarte bine. 1428 00:58:10,140 --> 00:58:12,970 Dar devine plictisitor de codificare, dacă aveți de a vă exprima astfel 1429 00:58:12,970 --> 00:58:15,530 la naiba specific din nou și din nou și din nou, cu un simplu 1430 00:58:15,530 --> 00:58:16,620 scenariu de genul asta. 1431 00:58:16,620 --> 00:58:19,470 Deci, C are unele comenzi rapide, cum ar fi acest lucru. 1432 00:58:19,470 --> 00:58:24,270 Deci, în esență, spune aceasta declară un șir s1 numit și 1433 00:58:24,270 --> 00:58:32,610 atribui fie această valoare sau în cazul în care această valoare i este == - 1434 00:58:32,610 --> 00:58:35,290 Îmi pare rău, ar trebui să spun asta mai clar. 1435 00:58:35,290 --> 00:58:41,680 Declare o variabilă s1, aloca această valoare în cazul în care acest lucru este adevărat. 1436 00:58:41,680 --> 00:58:44,280 În caz contrar, se atribuie această valoare. 1437 00:58:44,280 --> 00:58:47,220 Deci, cu alte cuvinte, aceasta este un fel de cale de o linie de 1438 00:58:47,220 --> 00:58:51,490 spun altceva, dar dacă faci o misiune de-a lungul drum. 1439 00:58:51,490 --> 00:58:55,540 Deci, în cazul în care i este 1, atunci du-te mai departe și numesc acest "sticla". Și 1440 00:58:55,540 --> 00:58:59,830 atunci acest altceva, îl numesc "sticle". Între timp, s2, 1441 00:58:59,830 --> 00:59:04,060 al doilea cuvânt de care avem nevoie pentru a defini, dacă i este egal cu 2, vă vom 1442 00:59:04,060 --> 00:59:08,350 setat s2 la "sticla". În caz contrar, setați-l la "sticle". Și ce 1443 00:59:08,350 --> 00:59:11,460 aceasta înseamnă acum este ca eu pot trece prin acest lucru și a șterge toate 1444 00:59:11,460 --> 00:59:12,860 aceste linii de cod. 1445 00:59:12,860 --> 00:59:17,220 Și când spun, oarecum ridicol, faptul că acest lucru este acum 1446 00:59:17,220 --> 00:59:20,060 sexy, e mai sexy în fel de sens stilistic. 1447 00:59:20,060 --> 00:59:22,660 Faptul că funcțional, acest cod este, de fapt de gând să 1448 00:59:22,660 --> 00:59:24,610 face exact același lucru. 1449 00:59:24,610 --> 00:59:26,890 Și chiar dacă s-ar putea părea un pic criptic la prima 1450 00:59:26,890 --> 00:59:29,250 ochire, pentru că nu ne-am mai văzut această construcție înainte, aș 1451 00:59:29,250 --> 00:59:31,850 susțin că este în cele din urmă va fi atât de mult mai mult 1452 00:59:31,850 --> 00:59:34,820 ușor de citit și atât de mult mai ușor pentru noi, oamenii, pentru a sorta de 1453 00:59:34,820 --> 00:59:36,830 înțeles, pentru că acum puteți citi doar 1454 00:59:36,830 --> 00:59:38,830 Codul de toate pe o singură linie. 1455 00:59:38,830 --> 00:59:41,550 E încă similară în spirit cu o în cazul în care, în cazul în care acest lucru este 1456 00:59:41,550 --> 00:59:44,920 Stare și apoi aceasta este ceea ce este în interiorul și în cazul în care acest 1457 00:59:44,920 --> 00:59:46,480 este ceea ce este în interiorul altceva. 1458 00:59:46,480 --> 00:59:49,450 Dar putem face acest lucru doar mult mai elegant. 1459 00:59:49,450 --> 00:59:52,650 >> Și dacă mă duc acum la terminalul meu, care a eliminat toate 1460 00:59:52,650 --> 00:59:55,530 a acestor linii și le-a înlocuit cu doar cei doi, 1461 00:59:55,530 --> 01:00:00,150 recompilare, re-conduse de sticle de bere cu 99, observați că mi 1462 01:00:00,150 --> 01:00:03,350 gramatica este, de fapt, încă mai corect. 1463 01:00:03,350 --> 01:00:06,160 Deci, din nou, pentru a începe ceva. 1464 01:00:06,160 --> 01:00:08,840 2 sticle de bere, 1 sticlă de bere. 1465 01:00:08,840 --> 01:00:09,370 Arata bine. 1466 01:00:09,370 --> 01:00:10,100 Da. 1467 01:00:10,100 --> 01:00:13,900 Deci nu avem o soluție mult mai succint. 1468 01:00:13,900 --> 01:00:16,020 Deci aceasta, de asemenea, cum să obțineți mai mult confortabil cu C nu, 1469 01:00:16,020 --> 01:00:18,630 neapărat cu PSET prima sau chiar două, dar 1470 01:00:18,630 --> 01:00:21,170 dau seama că aceste concepte ne poate permite să facă lucruri vreodată 1471 01:00:21,170 --> 01:00:22,810 mai elegant. 1472 01:00:22,810 --> 01:00:25,200 Acum, hai sa facem un lucru aici. 1473 01:00:25,200 --> 01:00:31,460 Lasă-mă să mergeți mai departe și să se deschidă return1.c. 1474 01:00:31,460 --> 01:00:34,340 Acum, hai să începem să rezolve o altă problemă într-un mod care 1475 01:00:34,340 --> 01:00:37,140 ne permite să scrie cod mai sofisticate. 1476 01:00:37,140 --> 01:00:39,960 >> Deci, aici e un program simplu pic, al cărei scop în viață 1477 01:00:39,960 --> 01:00:41,870 este de a incrementa valori. 1478 01:00:41,870 --> 01:00:43,100 Și, de fapt, să ia un pas înapoi. 1479 01:00:43,100 --> 01:00:44,400 Lasă-mă să fac asta manual. 1480 01:00:44,400 --> 01:00:52,200 Lasă-mă să fac și includ int main (void). 1481 01:00:52,200 --> 01:00:53,450 Și lasă-mă să numim această increment.c. 1482 01:00:57,150 --> 01:00:58,570 Și ce vreau să fac? 1483 01:00:58,570 --> 01:01:02,240 Am de gând să merg mai departe și spune ceva de genul - 1484 01:01:02,240 --> 01:01:04,280 vom apela numerele de aceeași - 1485 01:01:04,280 --> 01:01:04,980 x int. 1486 01:01:04,980 --> 01:01:13,670 Deci x int primește 2; x printf este% d, noua linie, x. 1487 01:01:13,670 --> 01:01:16,780 Deci, eu sunt tastarea rapidă, dar un fel de lucruri familiare acum. 1488 01:01:16,780 --> 01:01:18,830 Apoi, am de gând să fac x + +. 1489 01:01:18,830 --> 01:01:21,710 Apoi, am de gând să imprima că aceeași propoziție din nou. 1490 01:01:21,710 --> 01:01:24,550 Și apoi am de gând să se întoarcă 0 doar pentru a iesi din program. 1491 01:01:24,550 --> 01:01:25,960 În regulă, astfel încât acesta este un program care 1492 01:01:25,960 --> 01:01:26,960 un număr de pași. 1493 01:01:26,960 --> 01:01:29,830 E primul gând să inițializeze ceva la 2, iar apoi e 1494 01:01:29,830 --> 01:01:33,470 O să-l incrementa și imprimați-l din nou. 1495 01:01:33,470 --> 01:01:36,930 >> Deci haideți să rulați creștere, programul incredibil de simplu. 1496 01:01:36,930 --> 01:01:40,940 Dar să presupunem acum că vreau să cub valoarea, deci nu 1497 01:01:40,940 --> 01:01:42,490 oarecum arbitrară ceva. 1498 01:01:42,490 --> 01:01:45,140 Și eu de fapt vreau să fac x devine cub de ea. 1499 01:01:45,140 --> 01:01:47,570 Asa ca am putea folosi ceea ce se numește funcția pow, dar eu nu fac 1500 01:01:47,570 --> 01:01:48,650 într-adevăr știu în cazul în care este încă. 1501 01:01:48,650 --> 01:01:50,580 Așa că am de gând să fac asta felul de modă veche. 1502 01:01:50,580 --> 01:01:54,550 x ori x ori aceasta este egală de x ori x. 1503 01:01:54,550 --> 01:01:56,880 Deci, eu sunt cubaj valoarea, înmulțind-o din nou de la sine 1504 01:01:56,880 --> 01:02:00,440 și din nou și din nou, astfel încât să putem obține puterea 1505 01:02:00,440 --> 01:02:02,050 din 3 în acest caz. 1506 01:02:02,050 --> 01:02:06,000 Așa că acum am numerele trebuie să tipărească ar trebui să fie, după cum vom vedea 1507 01:02:06,000 --> 01:02:08,450 aici - face creștere, așa că e de fapt, nu incrementa cu adevărat 1508 01:02:08,450 --> 01:02:10,260 mai, dar vom lăsa în pace numele - 1509 01:02:10,260 --> 01:02:11,590 2 și apoi 8. 1510 01:02:11,590 --> 01:02:17,670 Acum, avem începuturile o oportunitate pentru rafinament 1511 01:02:17,670 --> 01:02:21,570 aici, prin care acest lucru cubaj de multiplicare a unui număr de 1512 01:02:21,570 --> 01:02:24,680 de la sine, în sine, de la sine se simte ca acest lucru ar putea fi doar 1513 01:02:24,680 --> 01:02:27,920 util pentru a avea ca funcție, la fel ca cineva a decis 1514 01:02:27,920 --> 01:02:30,430 de ani în urmă - știți, un fel de util în cazul în care unul dintre noi se aseaza 1515 01:02:30,430 --> 01:02:33,120 și scrie printf, astfel încât restul lumii poate folosi, 1516 01:02:33,120 --> 01:02:36,160 de ce nu stai jos și scrie o funcție numită cub 1517 01:02:36,160 --> 01:02:39,250 care face acest lucru cubaj pentru noi, asa ca nu trebuie sa manual 1518 01:02:39,250 --> 01:02:41,500 pună în aplicare noțiunea de cubaj valori aici? 1519 01:02:41,500 --> 01:02:44,040 >> Deci, un exemplu simplu, dar hai să mergem mai departe și de a folosi aceasta este ca o 1520 01:02:44,040 --> 01:02:46,280 posibilitatea de a scrie funcția noastră. 1521 01:02:46,280 --> 01:02:49,110 Deci pana acum, am folosit doar principală, și am folosit alte 1522 01:02:49,110 --> 01:02:51,780 Funcțiile oamenilor, dar nu ne-am scris propria noastră. 1523 01:02:51,780 --> 01:02:52,650 Deci, aici vom merge. 1524 01:02:52,650 --> 01:02:56,330 Am de gând să merg mai departe și scrie o funcție numită cub. 1525 01:02:56,330 --> 01:02:58,490 Și am de gând să îl ia o intrare. 1526 01:02:58,490 --> 01:03:02,070 Deci, intrarea sa este de gând să fie un număr întreg. 1527 01:03:02,070 --> 01:03:03,570 Și ce-i așa de gând să faci? 1528 01:03:03,570 --> 01:03:08,500 O să declare iesire int = de intrare ori de intrare 1529 01:03:08,500 --> 01:03:09,880 ori de intrare. 1530 01:03:09,880 --> 01:03:12,190 Și apoi o să se întoarcă că producția. 1531 01:03:12,190 --> 01:03:14,500 Și apoi trebuie să fie specific acum. 1532 01:03:14,500 --> 01:03:16,820 Această funcție este de gând să se întoarcă un int. 1533 01:03:16,820 --> 01:03:19,130 Deci, aici, atunci este modul în care te-ai scrie propriile funcții. 1534 01:03:19,130 --> 01:03:20,850 Tu decizi ce e numele dvs. de 1535 01:03:20,850 --> 01:03:21,720 Funcția va fi. 1536 01:03:21,720 --> 01:03:23,964 Și, în general, ceva explicativ este bun, așa că voi 1537 01:03:23,964 --> 01:03:25,060 numesc cub. 1538 01:03:25,060 --> 01:03:27,180 Apoi, va trebui să specificați ce se va întoarce, ceea ce este 1539 01:03:27,180 --> 01:03:28,240 producția sa va fi. 1540 01:03:28,240 --> 01:03:29,595 Și nu avem opțiunile multe încă. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Pentru moment, am de gând să stai cu un int, pentru că eu o vreau 1543 01:03:34,260 --> 01:03:35,880 pentru a returna un număr întreg. 1544 01:03:35,880 --> 01:03:38,770 Apoi, va trebui să specificați ce intrările sale, dacă există, sunt. 1545 01:03:38,770 --> 01:03:41,570 Și dacă cub are un argument, ia ceva între 1546 01:03:41,570 --> 01:03:44,970 paranteze, trebuie să dai ca argument un nume, astfel încât 1547 01:03:44,970 --> 01:03:47,860 puteți apela acest ceva ca esti de punere în aplicare sau de scris 1548 01:03:47,860 --> 01:03:50,550 această funcție, iar tu trebuie să-i dea un tip, care în acest 1549 01:03:50,550 --> 01:03:51,810 cazul va fi int. 1550 01:03:51,810 --> 01:03:54,690 Deci, pe scurt, cub este o funcție care are un număr întreg 1551 01:03:54,690 --> 01:03:57,560 ca intrare și returnează un întreg ca ieșire. 1552 01:03:57,560 --> 01:03:59,240 >> Deci, ce face cu asta de intrare? 1553 01:03:59,240 --> 01:04:03,710 Ei bine, în linia 14, am declara o ieșire variabilă numită, și am 1554 01:04:03,710 --> 01:04:07,410 atribuie valoarea, de intrare de intrare ori de ori de intrare. 1555 01:04:07,410 --> 01:04:11,490 Și apoi mă voi întoarce de ieșire. 1556 01:04:11,490 --> 01:04:14,890 Deci, cum mă folosesc acest lucru, atunci? 1557 01:04:14,890 --> 01:04:19,210 Ce pot modifica aceste caractere subliniate pe linia 1558 01:04:19,210 --> 01:04:21,006 7 să fie, nu crezi? 1559 01:04:21,006 --> 01:04:21,800 PUBLICUL: [neauzit]. 1560 01:04:21,800 --> 01:04:25,570 David J. MALAN: Da, așa cub de x. 1561 01:04:25,570 --> 01:04:28,290 Deci x este o variabilă, ceea ce înseamnă că are o anumită valoare. 1562 01:04:28,290 --> 01:04:30,190 Din fericire, e de tip întreg. 1563 01:04:30,190 --> 01:04:34,280 Si pentru ca x este un int, înseamnă că pot să-l trece în cub. 1564 01:04:34,280 --> 01:04:39,500 Și chiar dacă am imperative valoarea lui x cu valoarea 1565 01:04:39,500 --> 01:04:42,780 de x cub, așa cum a fost cazul până acum, de fiecare dată când 1566 01:04:42,780 --> 01:04:46,150 au semnul egal și de o linie de cod, chestii pe dreapta 1567 01:04:46,150 --> 01:04:49,090 este executat și apoi se atribuie 1568 01:04:49,090 --> 01:04:50,150 Valoarea pe stânga. 1569 01:04:50,150 --> 01:04:52,950 Deci, ordinea operațiunilor este ca ne-ar spera. 1570 01:04:52,950 --> 01:04:56,620 Deci, face acest lucru? 1571 01:04:56,620 --> 01:04:58,410 Ei bine, lasă-mă să merg în jos aici. 1572 01:04:58,410 --> 01:04:59,970 Lasă-mă să deschid fereastra mea terminalului. 1573 01:04:59,970 --> 01:05:03,610 Lasă-mă să fac creștere, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Declarație implicită de" cub ", funcția este nul în 1575 01:05:07,140 --> 01:05:13,700 C99 "Ca o paranteza., C99 se referă la limbajul C așa cum a fost 1576 01:05:13,700 --> 01:05:16,790 definite în 1999, care a fost o actualizare de peste versiunea de la 1577 01:05:16,790 --> 01:05:19,360 1989, care este o actualizare de peste original. 1578 01:05:19,360 --> 01:05:21,740 Deci, asta e tot ceea ce înseamnă. 1579 01:05:21,740 --> 01:05:24,250 >> Deci, ce înseamnă că "declarația implicită 1580 01:05:24,250 --> 01:05:26,790 "cub" funcția este invalid "E chiar aici?. 1581 01:05:26,790 --> 01:05:28,430 E chiar acolo, în linia 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLICUL: [neauzit]. 1583 01:05:30,460 --> 01:05:30,730 David J. MALAN: Ce e asta? 1584 01:05:30,730 --> 01:05:32,470 PUBLICUL: Nu e înainte. 1585 01:05:32,470 --> 01:05:33,540 David J. MALAN: Nu e înainte. 1586 01:05:33,540 --> 01:05:34,740 Deci, asta e chestia. 1587 01:05:34,740 --> 01:05:38,190 C este un fel de prost, sau compilatoare C sunt un fel de prost. 1588 01:05:38,190 --> 01:05:41,060 Ei într-adevăr face doar ceea ce-ți spun ei să facă. 1589 01:05:41,060 --> 01:05:44,770 Și ei, în special, citit numai de sus în jos codul, 1590 01:05:44,770 --> 01:05:45,620 la stânga la dreapta. 1591 01:05:45,620 --> 01:05:49,140 Deci, dacă compilator, zăngănit, este citit codul, linia 1, acesta 1592 01:05:49,140 --> 01:05:50,120 seama cum să facă acest lucru. 1593 01:05:50,120 --> 01:05:50,940 Oh, aici vine principal. 1594 01:05:50,940 --> 01:05:53,000 Bine, lasă-mă să merg mai departe și să declare o variabila x. 1595 01:05:53,000 --> 01:05:54,160 Lasă-mă să imprimați ceva. 1596 01:05:54,160 --> 01:05:55,890 Linia 7, ceea ce naiba e cubul? 1597 01:05:55,890 --> 01:05:58,230 Nu e declarate în stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Ea nu vine cu C. Nu am nici o idee ce să fac. 1599 01:06:00,950 --> 01:06:03,960 Și așa zăngănit doar bails și se închide cu acest mesaj de eroare. 1600 01:06:03,960 --> 01:06:05,850 Astfel încât să putem rezolva acest lucru în câteva moduri. 1601 01:06:05,850 --> 01:06:10,530 Putem învăța ceea ce face să răsune cub este de doar în cazul în care mutarea 1602 01:06:10,530 --> 01:06:11,820 declarație este. 1603 01:06:11,820 --> 01:06:14,640 Asa ca am taiat si lipit-l deasupra principal. 1604 01:06:14,640 --> 01:06:17,770 Acum dau seama că doar pentru că nu mai este principalul în primul rând, e 1605 01:06:17,770 --> 01:06:19,150 încă executate în mod implicit. 1606 01:06:19,150 --> 01:06:20,060 Principal este principal. 1607 01:06:20,060 --> 01:06:21,022 E numele implicit funcția. 1608 01:06:21,022 --> 01:06:22,930 Nu contează în cazul în care aceasta este într-un fișier. 1609 01:06:22,930 --> 01:06:26,910 Dar cel puțin acum zăngănit a văzut cub înainte de a-l folosesc. 1610 01:06:26,910 --> 01:06:28,500 Deci, să vedem dacă zăngănit este mai fericit acum. 1611 01:06:28,500 --> 01:06:31,410 Asigurați-creștere, aceasta a compila acest moment. 1612 01:06:31,410 --> 01:06:33,060 >> Lasă-mă să fugi creștere. 1613 01:06:33,060 --> 01:06:34,810 Și într-adevăr, se pare a fi de lucru. 1614 01:06:34,810 --> 01:06:36,810 Acum, puteți veni cu scenarii în cele din urmă în cazul în care 1615 01:06:36,810 --> 01:06:38,650 nu este posibil să se pună fiecare funcție 1616 01:06:38,650 --> 01:06:39,740 mai presus de orice altă funcție. 1617 01:06:39,740 --> 01:06:42,140 Te vei blocat în această buclă infinită în realitate, 1618 01:06:42,140 --> 01:06:43,480 în cazul în care acest tip vrea sa fie aici, dar acest lucru 1619 01:06:43,480 --> 01:06:44,390 Tipul trebuie să fie acolo. 1620 01:06:44,390 --> 01:06:45,830 Așa că nu funcționează întotdeauna. 1621 01:06:45,830 --> 01:06:49,020 Deci din fericire, C are o soluție mai elegantă. 1622 01:06:49,020 --> 01:06:50,790 Am de gând să pun asta înapoi în cazul în care acesta a fost, pur și simplu pentru că am 1623 01:06:50,790 --> 01:06:53,390 preferă, ca o chestiune de principiu, că principalul fi mereu 1624 01:06:53,390 --> 01:06:55,550 în partea de sus, pentru că e doar frumos pentru a vedea ce acest program 1625 01:06:55,550 --> 01:06:56,920 face în mod implicit. 1626 01:06:56,920 --> 01:06:58,950 Și ce am de gând să fac aici este să declare ceea ce se numește 1627 01:06:58,950 --> 01:07:00,250 un prototip. 1628 01:07:00,250 --> 01:07:05,730 Am de gând să re-declare funcția mea cub de literalmente 1629 01:07:05,730 --> 01:07:07,180 copierea și lipirea. 1630 01:07:07,180 --> 01:07:08,290 De fapt, asta nu e literalmente. 1631 01:07:08,290 --> 01:07:13,060 Deci, literalmente copierea și lipirea linia 15 1632 01:07:13,060 --> 01:07:15,160 deasupra liniei 6. 1633 01:07:15,160 --> 01:07:17,010 Nu contează ce se termină această linie de pe. 1634 01:07:17,010 --> 01:07:18,380 Se întâmplă să fie pe linia 4. 1635 01:07:18,380 --> 01:07:19,950 Dar aceasta nu trebuie să fie înainte de principal. 1636 01:07:19,950 --> 01:07:21,150 Dar observați diferența. 1637 01:07:21,150 --> 01:07:24,100 Linia 4 se termină cu punct și virgulă, ceea ce înseamnă hei, 1638 01:07:24,100 --> 01:07:27,510 Zăngănit, luați cuvântul meu pentru asta că există o funcție 1639 01:07:27,510 --> 01:07:31,350 numit cub care ia un int și returnează un int. 1640 01:07:31,350 --> 01:07:33,020 Dar eu nu sunt o să-ți spun ce este încă. 1641 01:07:33,020 --> 01:07:35,180 Doar știi că îți promit să-ți spun în cele din urmă. 1642 01:07:35,180 --> 01:07:38,490 Și într-adevăr, acum e în regulă că acest lucru este mai jos. 1643 01:07:38,490 --> 01:07:41,275 >> Deci, aceasta este, în general, mai bine, pentru că atunci, la partea de sus a 1644 01:07:41,275 --> 01:07:44,240 fișierul, aveți posibilitatea să zornăie doar off, rapidă foc, o linie 1645 01:07:44,240 --> 01:07:46,470 fiecare, ceea ce numele funcțiilor sunt, ceea ce lor 1646 01:07:46,470 --> 01:07:49,120 intrări sunt, ce ieșirile lor sunt. 1647 01:07:49,120 --> 01:07:52,210 Și pentru a fi mai clar, înseamnă, în general, de intrare sau de argument 1648 01:07:52,210 --> 01:07:54,110 parametru, sinonime. 1649 01:07:54,110 --> 01:07:56,890 De ieșire înseamnă valoarea returnata, ceea ce face 1650 01:07:56,890 --> 01:07:58,700 mâna înapoi la mine. 1651 01:07:58,700 --> 01:08:03,420 Deci, în acest caz aici, cubul a fost declarată în partea de sus, dar 1652 01:08:03,420 --> 01:08:06,940 definite, altfel cunoscut sub numele de pus în aplicare, în partea de jos. 1653 01:08:06,940 --> 01:08:09,620 Deci, acum să ne întoarcem aici și re-rula acest lucru. 1654 01:08:09,620 --> 01:08:13,430 Asa ca lasa-ma acum mergeți mai departe și re-rulați make, re-rula increment. 1655 01:08:13,430 --> 01:08:16,500 Și acum se pare a fi de lucru bine. 1656 01:08:16,500 --> 01:08:19,450 Deci, acum putem merge mai departe și a factorului de afară ceva de genul 1657 01:08:19,450 --> 01:08:23,720 bere exemplu în această versiune a patra. 1658 01:08:23,720 --> 01:08:25,590 Așa că lasă-mă să defilați în jos aici. 1659 01:08:25,590 --> 01:08:28,149 Și observați că am luat un fel de această lecție la inimă chiar acum. 1660 01:08:28,149 --> 01:08:31,140 Faptul că am fost cântat aceeași strofă din nou și 1661 01:08:31,140 --> 01:08:34,130 din nou și din nou, linie de corul același cântec, pâslă 1662 01:08:34,130 --> 01:08:36,439 place de ce nu am factor de asta într-o funcție? 1663 01:08:36,439 --> 01:08:38,470 Și într-adevăr, aceasta ar trebui să fie unul dintre motivațiile. 1664 01:08:38,470 --> 01:08:40,960 Pe lângă faptul că altcineva în lume ar putea dori 1665 01:08:40,960 --> 01:08:42,390 să utilizați o funcție cub - 1666 01:08:42,390 --> 01:08:44,560 asta e un motiv bun să țină ceva afară și scrie mesajul Dvs. 1667 01:08:44,560 --> 01:08:45,720 personalizat funcție - 1668 01:08:45,720 --> 01:08:48,720 în cazul în care există o bucată de cod in programul tau, care te face 1669 01:08:48,720 --> 01:08:51,370 sens conceptual, pe care le cam vrea să dea un 1670 01:08:51,370 --> 01:08:53,740 Nume - ca și în acest caz, cor - 1671 01:08:53,740 --> 01:08:57,380 atunci se poate scrie în mod similar că, o funcție separată. 1672 01:08:57,380 --> 01:08:59,560 Nu trebuie să scrie totul în principal în cazul în care doar 1673 01:08:59,560 --> 01:09:02,609 se simte curat să-l separa si dau un nume. 1674 01:09:02,609 --> 01:09:05,529 >> Deci, în acest caz aici, observați că am un comentariu deasupra 1675 01:09:05,529 --> 01:09:06,859 această funcție că doar cântă despre 1676 01:09:06,859 --> 01:09:08,630 Numerele specificate de sticle. 1677 01:09:08,630 --> 01:09:10,609 Observați aici că nu am nevoie să numesc aceste 1678 01:09:10,609 --> 01:09:12,520 lucruri de intrare și ieșire. 1679 01:09:12,520 --> 01:09:16,090 De fapt, de data asta i-am sunat doar b meu de intrare pentru sticla. 1680 01:09:16,090 --> 01:09:19,960 Și observați aici, anulate sugerează ce? 1681 01:09:19,960 --> 01:09:21,309 Această cor - 1682 01:09:21,309 --> 01:09:22,660 PUBLICUL: Nu se întoarcă. 1683 01:09:22,660 --> 01:09:23,870 David J. MALAN: nu returnează o valoare. 1684 01:09:23,870 --> 01:09:26,800 Și într-adevăr, funcțiile nu trebuie să se întoarcă valori. 1685 01:09:26,800 --> 01:09:28,060 Ei doar se poate face ceva. 1686 01:09:28,060 --> 01:09:30,270 Ei pot avea ceea ce se numeste efecte adverse, care, în acest 1687 01:09:30,270 --> 01:09:33,109 caz este doar o grămadă de imprimare pe ecran. 1688 01:09:33,109 --> 01:09:36,580 Deci, observăm că acest cod aici, am literalmente doar la furat 1689 01:09:36,580 --> 01:09:37,680 exemplul anterior. 1690 01:09:37,680 --> 01:09:39,930 Singura diferență este în loc de a folosi i ca-mi 1691 01:09:39,930 --> 01:09:42,890 variabilă, eu sunt, folosind acum B ca variabilă meu. 1692 01:09:42,890 --> 01:09:45,880 Deci, am b aici, am b aici, am b 1693 01:09:45,880 --> 01:09:47,109 minus 1 aici. 1694 01:09:47,109 --> 01:09:49,279 Dar codul este exact la fel. 1695 01:09:49,279 --> 01:09:52,529 Dar, doar pentru a vă arăta acum cum putem folosi acest lucru, permiteți-mi să merg 1696 01:09:52,529 --> 01:09:56,780 mai departe și de fapt schimba acest lucru să fie un pentru buclă. 1697 01:09:56,780 --> 01:10:03,850 pentru (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Asa ca am furat asta de la exemplul nostru anterior. 1699 01:10:06,230 --> 01:10:08,970 Anterior, e în linia 37, care mi-ar fi început 1700 01:10:08,970 --> 01:10:10,640 cântând acest cântec enervant. 1701 01:10:10,640 --> 01:10:15,810 Dar, în loc, Mă duc să sun acum cor de i.. 1702 01:10:15,810 --> 01:10:16,870 Adoptată. 1703 01:10:16,870 --> 01:10:20,260 Deci, acum, în fiecare iterație a buclei acest, eu numesc acest alt 1704 01:10:20,260 --> 01:10:22,220 funcției, cor, care sa întâmplat să scriu. 1705 01:10:22,220 --> 01:10:24,110 Ea nu a fost scrisă de altcineva de ani în urmă. 1706 01:10:24,110 --> 01:10:27,930 Dar cor, între timp, foloseste printf pentru a imprima 1707 01:10:27,930 --> 01:10:29,840 aceste patru linii. 1708 01:10:29,840 --> 01:10:32,720 Dar faptul că te-am sunat din nou și din nou cor într-o 1709 01:10:32,720 --> 01:10:35,900 buclă înseamnă că am de gând pentru a obține, la sfârșitul foarte, 1710 01:10:35,900 --> 01:10:39,310 cântec exact același ca și până acum am. 1711 01:10:39,310 --> 01:10:42,130 Deci, pe scurt, acum, dacă mă uit înapoi la codul meu, chiar dacă 1712 01:10:42,130 --> 01:10:44,240 aceasta este echivalent funcțional, observăm că e 1713 01:10:44,240 --> 01:10:46,020 incepand pentru a obține chiar mai ușor de citit. 1714 01:10:46,020 --> 01:10:48,410 Nu știu exact cum GetInt 1715 01:10:48,410 --> 01:10:49,250 este pusă în aplicare. 1716 01:10:49,250 --> 01:10:52,050 Sincer, nu știu cum refrenul este pus în aplicare. 1717 01:10:52,050 --> 01:10:52,970 Dar nu contează pentru mine. 1718 01:10:52,970 --> 01:10:55,620 Nu-mi pasă, pentru că acum pot sorta a, ca om, citește 1719 01:10:55,620 --> 01:10:57,050 aceasta de jos, de sus în. 1720 01:10:57,050 --> 01:10:59,950 Și pentru că funcțiile sunt denumite în funcție de ceea ce au 1721 01:10:59,950 --> 01:11:02,910 fac, codul meu este din ce în ce poate fi citit. 1722 01:11:02,910 --> 01:11:05,190 Și, după cum programele noastre obține mult mai complex - 1723 01:11:05,190 --> 01:11:07,220 până la sfârșitul semestrului, veți fi scris sute de linii 1724 01:11:07,220 --> 01:11:10,970 de cod în limbaje cum ar fi PHP si JavaScript și cum ar fi - 1725 01:11:10,970 --> 01:11:13,550 veți găsi că este mult mai ușor decât de a ține evidența 1726 01:11:13,550 --> 01:11:14,080 ce ai făcut. 1727 01:11:14,080 --> 01:11:15,810 Și atunci când veți începe colaborarea cu prietenii sau 1728 01:11:15,810 --> 01:11:19,010 parteneri sau colegi, vei fi capabil să scrie mult mai mult 1729 01:11:19,010 --> 01:11:22,910 programe masive de plecare pentru a exercita aceste bază 1730 01:11:22,910 --> 01:11:23,990 constructii blocuri. 1731 01:11:23,990 --> 01:11:25,550 >> Deci, cu care a spus, de ce nu o numim o zi? 1732 01:11:25,550 --> 01:11:27,190 Si te vom vedea miercuri. 1733 01:11:27,190 --> 01:11:33,611 [Aplauze]