1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUZICĂ] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. MALAN: Bine, acest lucru este CS50. 5 00:00:16,240 --> 00:00:18,010 Și acest lucru este de o saptamana. 6 00:00:18,010 --> 00:00:22,050 Așa că amintesc că ultima dată în săptămâna zero ne-am concentrat pe o gândire de calcul. 7 00:00:22,050 --> 00:00:25,440 Si am trecut de la asta Zero, un grafic de programare 8 00:00:25,440 --> 00:00:27,360 Limba de la prietenii noștri la MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> Și, cu zgârieturi, am explora idei, cum ar fi funcții și condiții, 10 00:00:31,730 --> 00:00:35,210 și bucle, și variabile, și chiar evenimente și fire de execuție și multe altele. 11 00:00:35,210 --> 00:00:37,880 Și astăzi, vom continua folosind aceste idei, 12 00:00:37,880 --> 00:00:40,630 și într-adevăr luați-le pentru acordate, dar să le traducă 13 00:00:40,630 --> 00:00:44,220 într-o altă limbă cunoscută sub numele de C. Acum, C este un limbaj mai tradițional. 14 00:00:44,220 --> 00:00:46,020 Este un nivel inferior limbă, dacă vreți. 15 00:00:46,020 --> 00:00:47,300 >> Este pur textuală. 16 00:00:47,300 --> 00:00:49,910 Și așa, la prima vedere, este toate vor să se uite destul de criptic 17 00:00:49,910 --> 00:00:51,430 dacă nu ați programat mai înainte. 18 00:00:51,430 --> 00:00:53,530 Vom avea semi-colons, și paranteze, 19 00:00:53,530 --> 00:00:55,150 și acolade, și multe altele. 20 00:00:55,150 --> 00:00:57,240 Dar, dau seama că, chiar deși sintaxa este 21 00:00:57,240 --> 00:01:00,600 pe cale să se uite un pic nefamiliar la cele mai multe dintre voi, vezi trecut peste asta. 22 00:01:00,600 --> 00:01:03,220 Și să încerce să vadă ideile care sunt, într-adevăr, familiare, 23 00:01:03,220 --> 00:01:06,750 pentru că aici, în prima săptămână ceea ce vom începe să facem este să compare, 24 00:01:06,750 --> 00:01:08,980 Inițial, Scratch versus C. 25 00:01:08,980 --> 00:01:12,350 >> Astfel, de exemplu, amintim că, atunci când ne a implementat primul dintre programele noastre 26 00:01:12,350 --> 00:01:16,220 ultima dată, am avut un bloc care sa uitat un pic ceva de genul astea-- când 27 00:01:16,220 --> 00:01:19,990 pavilion verde dat click, iar apoi am avut una sau mai multe piese de puzzle de sub el, 28 00:01:19,990 --> 00:01:22,150 în acest caz, să zicem, hello world. 29 00:01:22,150 --> 00:01:24,870 Așa că, într-adevăr, în Scratch, atunci când fac clic steagul verde 30 00:01:24,870 --> 00:01:27,390 pentru a rula programul meu, așa să vorbească, acestea sunt 31 00:01:27,390 --> 00:01:29,520 blocurile care se executa, sau a alerga. 32 00:01:29,520 --> 00:01:32,230 Și, în special, Scratch a declarat, bună, lume. 33 00:01:32,230 --> 00:01:35,377 >> Acum, aș fi putut fi specificat diferite cuvinte aici. 34 00:01:35,377 --> 00:01:37,960 Dar vom vedea că, într-adevăr, mulți acestor blocks-- și într-adevăr, 35 00:01:37,960 --> 00:01:41,880 în C multe functions-- poate fi parametrizat sau personalizate 36 00:01:41,880 --> 00:01:43,150 de a face lucruri diferite. 37 00:01:43,150 --> 00:01:45,520 De fapt, în C, dacă ne doresc să transforme, acum, 38 00:01:45,520 --> 00:01:47,567 acest program Scratch la această altă limbă, 39 00:01:47,567 --> 00:01:49,650 vom scrie ceva de genul asta. 40 00:01:49,650 --> 00:01:52,540 >> Desigur, există unele necunoscute sintaxă acolo cel mai probabil, int 41 00:01:52,540 --> 00:01:54,380 și între paranteze și gol. 42 00:01:54,380 --> 00:01:57,740 Dar, chiar dacă printf-- v-ar cred că ar fi pur și simplu de imprimare. 43 00:01:57,740 --> 00:02:00,120 Dar, de imprimare înseamnă imprimare formatate, după cum vom vedea în curând. 44 00:02:00,120 --> 00:02:02,140 Acest lucru literalmente va imprima pe ecran, indiferent 45 00:02:02,140 --> 00:02:05,990 este în interiorul acestor paranteze, care desigur, în acest caz este, bună mondial. 46 00:02:05,990 --> 00:02:09,290 >> Dar, veți observa câteva alte sintaxa, unele ghilimele duble, 47 00:02:09,290 --> 00:02:11,890 că parantezele la sfârșit, semi-colon și altele asemenea. 48 00:02:11,890 --> 00:02:15,027 Deci, există un pic de deasupra capului, ca să spunem așa, atât cognitiv 49 00:02:15,027 --> 00:02:17,860 și sintactic, că vom merge să aibă să-și amintească înainte de mult timp. 50 00:02:17,860 --> 00:02:20,720 Dar, dau seama că, odată cu practica, acest lucru va începe să sară la tine. 51 00:02:20,720 --> 00:02:24,920 >> De fapt, să se concentreze pe faptul că unul Funcția specifically-- în acest caz, 52 00:02:24,920 --> 00:02:26,290 spun salut mondial. 53 00:02:26,290 --> 00:02:27,560 Deci, spun este funcția. 54 00:02:27,560 --> 00:02:31,320 Hello World este parametrul, sau argumente, personalizarea acestuia. 55 00:02:31,320 --> 00:02:34,320 >> Și echivalența în C este doar Va fi aceasta linie de aici, 56 00:02:34,320 --> 00:02:38,710 în cazul în care printf este echivalent cu, să zicem, șirul citat dublu, salut 57 00:02:38,710 --> 00:02:41,470 lume este echivalent, desigur, la ceea ce este în cutie albă acolo. 58 00:02:41,470 --> 00:02:45,680 Iar backslash n, deși un pic ciudat și absente de la zero, 59 00:02:45,680 --> 00:02:49,380 pur și simplu va avea ca efect ne vom a se vedea într-un calculator, cum ar fi Mac sau un PC, 60 00:02:49,380 --> 00:02:51,660 de doar mutarea cursorul la linia următoare. 61 00:02:51,660 --> 00:02:53,970 E ca lovind Enter de pe tastatură. 62 00:02:53,970 --> 00:02:55,580 >> Așa că, vom vedea că din nou înainte de mult timp. 63 00:02:55,580 --> 00:02:58,640 Dar, mai întâi, să aruncăm o privire la acest alt exemplu în cazul buclelor. 64 00:02:58,640 --> 00:03:02,830 Am avut această buclă pentru totdeauna ultima dată, care a fost o serie de piese de puzzle 65 00:03:02,830 --> 00:03:05,490 care a făcut ceva literalmente forever-- în acest caz, 66 00:03:05,490 --> 00:03:08,360 spune, hello world, hello world, hello world, hello world. 67 00:03:08,360 --> 00:03:10,350 Deci este o buclă infinită prin design. 68 00:03:10,350 --> 00:03:14,580 >> În C, dacă vrem să pună în aplicare această aceeași idee, am putea face acest lucru, pur și simplu. 69 00:03:14,580 --> 00:03:19,570 În timp ce este adevărat, printf salut world-- acum în timp ce, doar semantically, un fel de 70 00:03:19,570 --> 00:03:23,090 evocă ideea de a face ceva nou, și din nou, și din nou, 71 00:03:23,090 --> 00:03:23,980 și pentru cât timp? 72 00:03:23,980 --> 00:03:27,990 Ei bine, amintesc că true-- adevărat este doar pe sau unul. 73 00:03:27,990 --> 00:03:30,660 >> Și adevărat este, desigur, întotdeauna adevărat. 74 00:03:30,660 --> 00:03:33,060 Deci, e un fel de lipsit de sens declarație doar să spun adevărat. 75 00:03:33,060 --> 00:03:36,890 Dar, într-adevăr, acest lucru este în mod deliberat, pentru că dacă este adevărat este doar întotdeauna adevărat, 76 00:03:36,890 --> 00:03:40,850 decât în ​​timp ce doar adevărat implică, în cazul în care un pic indirect, 77 00:03:40,850 --> 00:03:44,070 că următoarele linii de cod între aceste acolade 78 00:03:44,070 --> 00:03:48,320 trebuie doar să executați din nou, și din nou, și din nou, și nu se opresc niciodata de fapt. 79 00:03:48,320 --> 00:03:50,230 >> Dar, dacă tu nu vrei sa-ti bucla pentru a opri, așa cum am 80 00:03:50,230 --> 00:03:54,500 a făcut ultima oară cu ceva de genul acest lucru, se repetă următoarele 50 de ori, 81 00:03:54,500 --> 00:03:57,700 în C, putem face același lucru cu ceea ce este numit pentru loop-- cuvântul cheie 82 00:03:57,700 --> 00:03:59,330 nu este în același timp, dar pentru. 83 00:03:59,330 --> 00:04:03,290 Și apoi avem o sintaxă nouă aici, cu int i este egal cu 0, i mai puțin de 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 Si vom reveni la asta. 86 00:04:05,430 --> 00:04:09,660 Dar acest lucru este pur și simplu modul în care ne-ar traducerea setului de blocuri răzuibile 87 00:04:09,660 --> 00:04:13,079 la un set de linii de cod C. 88 00:04:13,079 --> 00:04:14,450 >> În același timp, ia în considerare variabile. 89 00:04:14,450 --> 00:04:16,540 Și, de fapt, tocmai am a văzut unul acum un moment. 90 00:04:16,540 --> 00:04:21,220 Iar în cazul Scratch, dacă a vrut să declare o variabilă numită i 91 00:04:21,220 --> 00:04:24,590 pentru i fi întreg, doar un număr, și vrem să-l setați la o anumită valoare, 92 00:04:24,590 --> 00:04:28,410 vom folosi această portocală blocul aici-- setat i la 0 ° C. 93 00:04:28,410 --> 00:04:30,800 >> Și vom vedea astăzi și dincolo de aceasta, la fel ca și săptămâna trecută, 94 00:04:30,800 --> 00:04:33,850 programatori face aproape întotdeauna începe numărarea de la zero, într-adevăr 95 00:04:33,850 --> 00:04:34,950 prin convenție. 96 00:04:34,950 --> 00:04:37,250 Dar, de asemenea, pentru că retragerea din discuția noastră de binar, 97 00:04:37,250 --> 00:04:39,990 cel mai mic număr posibil reprezintă cu orice număr de biți 98 00:04:39,990 --> 00:04:41,640 este doar de gând să fie 0 în sine. 99 00:04:41,640 --> 00:04:45,190 Și așa vom începe, în general, initializarea chiar și variabilele noastre la 0. 100 00:04:45,190 --> 00:04:47,710 >> Și, în C, pentru a face același lucru, vom spune int 101 00:04:47,710 --> 00:04:50,110 pentru întreg, doar prin convenție. 102 00:04:50,110 --> 00:04:53,390 Aș putea fi numit această variabilă tot ce vreau, la fel ca și în Scratch. 103 00:04:53,390 --> 00:04:57,770 Și apoi este egal cu 0 la doar imputernicitii valoarea 0 din dreapta 104 00:04:57,770 --> 00:05:01,319 și pune în variabila, sau containere de depozitare acolo, pe partea stângă. 105 00:05:01,319 --> 00:05:04,360 Și semi-colon ca vom see-- și am văzut câteva dintre aceste already-- 106 00:05:04,360 --> 00:05:06,530 înseamnă doar sfârșitul termenului de gândire. 107 00:05:06,530 --> 00:05:09,430 Mai departe spre a face altceva pe liniile care urmează. 108 00:05:09,430 --> 00:05:11,330 >> Acum, ce despre expresiile booleene? 109 00:05:11,330 --> 00:05:14,320 Să ne amintim că în Scratch, acestea au fost expresii 110 00:05:14,320 --> 00:05:16,740 care sunt fie adevărate sau întrebări false--, 111 00:05:16,740 --> 00:05:18,910 într-adevăr, că sunt fie adevărate sau false. 112 00:05:18,910 --> 00:05:21,960 Deci, în cazul Scratch, am putea pune o întrebare simplă ca asta, 113 00:05:21,960 --> 00:05:24,586 este i mai mică de 50? 114 00:05:24,586 --> 00:05:25,710 Deci, eu, din nou, este un număr întreg. 115 00:05:25,710 --> 00:05:27,210 Poate că noi o utilizați într-un program de Scratch 116 00:05:27,210 --> 00:05:29,310 pentru a ține evidența unui scor sau asa ceva. 117 00:05:29,310 --> 00:05:33,810 Astfel încât această sintaxă aici, în Scratch înseamnă doar, este i mai mică de 50 de ani? 118 00:05:33,810 --> 00:05:37,330 Ei bine, din fericire, este ceva simplu în C. Și pentru a traduce, 119 00:05:37,330 --> 00:05:41,780 acest lucru ne-ar spune pur și simplu i mai puțin de 50, folosind cheia familiară 120 00:05:41,780 --> 00:05:42,850 de pe tastatură. 121 00:05:42,850 --> 00:05:45,141 >> Între timp, dacă ai vrut să spune ceva mai general, 122 00:05:45,141 --> 00:05:49,890 cum ar fi, ei bine, este x mai mică decât în ​​cazul în care fiecare y x și y sunt ele însele variabile? 123 00:05:49,890 --> 00:05:52,280 Putem face același lucru în C, atâta timp cât ne-am 124 00:05:52,280 --> 00:05:53,942 a creat aceste variabile deja. 125 00:05:53,942 --> 00:05:55,650 Si vom vedea cum se face acest lucru înainte de mult timp. 126 00:05:55,650 --> 00:05:58,590 Ne-ar spune pur și simplu x mai mic decât y. 127 00:05:58,590 --> 00:06:00,530 >> Așa că ai început să a se vedea unele similitudini. 128 00:06:00,530 --> 00:06:03,490 Iar acei oameni care au făcut Zgârietură au fost cu siguranță 129 00:06:03,490 --> 00:06:05,250 inspirat de unele dintre aceste idei de bază. 130 00:06:05,250 --> 00:06:10,350 Și veți vedea acest tip de sintaxă în multe languages-- 131 00:06:10,350 --> 00:06:12,160 nu doar zero, nu doar C, dar Python, 132 00:06:12,160 --> 00:06:14,790 și JavaScript și alte limbi încă. 133 00:06:14,790 --> 00:06:18,270 >> Hai să analizăm un alt construct de la C, noțiunea de condiție, 134 00:06:18,270 --> 00:06:20,370 face ceva în mod condiționat. 135 00:06:20,370 --> 00:06:22,720 Dacă ceva este adevărat, acest lucru. 136 00:06:22,720 --> 00:06:24,457 Dacă ceva este adevărat altceva, face asta. 137 00:06:24,457 --> 00:06:27,040 Este un fel de programare echivalentul unei furculiță în drum. 138 00:06:27,040 --> 00:06:29,730 Poate este o furculiță cu două sensuri, o furculiță cu trei căi, sau mai mult. 139 00:06:29,730 --> 00:06:32,800 Și, în Scratch, am putea avea văzut ceva de genul asta. 140 00:06:32,800 --> 00:06:34,010 >> Așa că acesta e unul mare. 141 00:06:34,010 --> 00:06:36,750 Dar ia în considerare în raport simplitatea logicii. 142 00:06:36,750 --> 00:06:44,010 Dacă x este mai mic decât y, atunci spune x este mai mică decât y, altfel daca x este mai mare decât y, 143 00:06:44,010 --> 00:06:46,230 apoi spune x este mai mare decât y. 144 00:06:46,230 --> 00:06:48,300 Și apoi, în mod logic, dacă te gândești înapoi la zero 145 00:06:48,300 --> 00:06:52,610 sau pur și simplu propria intuiție umană, bine, dacă x nu este mai mare decât y și x 146 00:06:52,610 --> 00:06:57,000 nu este mai mic decât y, atunci, desigur, x va fi egal cu y. 147 00:06:57,000 --> 00:06:59,690 Deci, în acest caz, prin cuiburi aceste blocuri, răzuibile 148 00:06:59,690 --> 00:07:02,580 putem realiza o perioadă de trei drum furculiță în drum? 149 00:07:02,580 --> 00:07:04,980 >> Între timp, dacă vrem să face acest lucru în C, se poate spune 150 00:07:04,980 --> 00:07:08,420 arată un pic simpler-- cel puțin odată ce vă familiarizați cu sintaxa. 151 00:07:08,420 --> 00:07:12,050 Dacă x este mai mic decât y, printf x este mai mic decât y. 152 00:07:12,050 --> 00:07:16,140 Altfel, dacă x este mai mare decât y, printf x este mai mare decât y. 153 00:07:16,140 --> 00:07:21,210 X este altceva printf egal cu y-- și, din nou, cu cei backslash se termină doar 154 00:07:21,210 --> 00:07:24,160 pentru aceste noi linii, astfel că, dacă a fugit de fapt, acest tip de program 155 00:07:24,160 --> 00:07:25,940 ar muta doar cursorul în cele din urmă 156 00:07:25,940 --> 00:07:28,100 la următoarea linie a ecranului. 157 00:07:28,100 --> 00:07:31,270 >> Acum, între timp zero a avut alt caracteristici mai sofisticate, numai 158 00:07:31,270 --> 00:07:34,320 unele dintre care ne vom muta inițial peste în lumea C. 159 00:07:34,320 --> 00:07:37,010 Și unul dintre ei a fost numita listă în Scratch. 160 00:07:37,010 --> 00:07:39,100 Și acest lucru a fost o specială tipul de variabilă care 161 00:07:39,100 --> 00:07:42,840 permis să stocați mai multe lucruri în ea înapoi, în spate, în spate, în spate. 162 00:07:42,840 --> 00:07:45,540 >> În C, nu are liste, per se, dar ceva 163 00:07:45,540 --> 00:07:48,090 care sunt în general mai numite tablouri, cu toate că vom 164 00:07:48,090 --> 00:07:50,590 întoarce mai târziu în acest semestru pentru a uita la ceva 165 00:07:50,590 --> 00:07:52,780 numita listă, sau într-adevăr o listă legată. 166 00:07:52,780 --> 00:07:55,510 Dar pentru acum aproape, The echivalent în C pentru noi 167 00:07:55,510 --> 00:07:57,345 va fi ceva numit matrice. 168 00:07:57,345 --> 00:07:59,740 Și o matrice este pur și simplu un tip special de variabilă 169 00:07:59,740 --> 00:08:03,160 care vă permite să stocați date înapoi, în spate, în spate, în spate. 170 00:08:03,160 --> 00:08:05,840 >> Și, într-adevăr, în Scratch, dacă ne-am dorit să acceseze 171 00:08:05,840 --> 00:08:09,030 primul element al unui tablou sau un list-- și am de gând să-l sun, 172 00:08:09,030 --> 00:08:13,600 prin convenție, argv, argumentul vector, dar mai mult pe asta înainte de mult timp. 173 00:08:13,600 --> 00:08:17,090 Dacă vreau să ajung primul element din argv, în lumea Scratch 174 00:08:17,090 --> 00:08:20,930 tu de fapt, nu de obicei începe numărarea de la 1. 175 00:08:20,930 --> 00:08:22,850 >> Și, așa că am putea obține punctul 1 din argv. 176 00:08:22,850 --> 00:08:26,310 Asta e doar modul în care a implementat MIT noțiunea de liste. 177 00:08:26,310 --> 00:08:29,860 Dar, în C, voi mai simplu doar să spun, argv, 178 00:08:29,860 --> 00:08:32,758 care din nou este numele meu list-- sau să fie clar, o matrice. 179 00:08:32,758 --> 00:08:34,549 Și, dacă vreau primul elemente, mă duc 180 00:08:34,549 --> 00:08:37,890 pentru a utiliza paranteze pătrate, care vă s-ar putea să nu de multe ori utilizată sub o tastatură. 181 00:08:37,890 --> 00:08:40,150 >> Dar, 0 înseamnă doar, adu-mi primul. 182 00:08:40,150 --> 00:08:42,160 Așa că uneori și ca timpul trece, vom merge 183 00:08:42,160 --> 00:08:44,570 pentru a începe să vadă aceste dihotomii între zero și C, 184 00:08:44,570 --> 00:08:46,070 prin care Scratch utilizează una. 185 00:08:46,070 --> 00:08:47,670 Noi, în C, utilizați 0 aici. 186 00:08:47,670 --> 00:08:49,420 Dar, veți vedea rapid odată ce ați înțeles 187 00:08:49,420 --> 00:08:52,920 bazele fiecărei limbi, care aceste lucruri încep să se tot mai mult 188 00:08:52,920 --> 00:08:56,860 familiare prin practica si practica. 189 00:08:56,860 --> 00:08:59,700 >> Așa că haideți să ne uităm de fapt, acum la un program. 190 00:08:59,700 --> 00:09:04,031 Aici va fi primul nostru C codul sursă pentru programe complete. 191 00:09:04,031 --> 00:09:06,280 Iar programul ne vom pentru a oferi cu titlu oneros 192 00:09:06,280 --> 00:09:09,340 este cel care este echivalent la acea piesa Scratch mai devreme. 193 00:09:09,340 --> 00:09:13,210 >> Așa că aici, avem ceea ce-i fără îndoială, cel mai simplu program C 194 00:09:13,210 --> 00:09:15,410 puteți scrie că de fapt, face ceva. 195 00:09:15,410 --> 00:09:18,250 Acum, ne vom uita din trecut, de acum, a includ, 196 00:09:18,250 --> 00:09:21,190 io.h standard și acestea unghi între paranteze, și int și gol, 197 00:09:21,190 --> 00:09:22,840 și acolade și altele asemenea. 198 00:09:22,840 --> 00:09:25,390 >> Și să ne concentrăm asupra ceea ce, cel puțin în mod intuitiv, 199 00:09:25,390 --> 00:09:26,860 s-ar putea sări la tine deja. 200 00:09:26,860 --> 00:09:30,300 De fapt, principal, eu nu fac știu neapărat ce este acest lucru, 201 00:09:30,300 --> 00:09:34,580 dar, la fel ca zero a avut ca atunci când pavilion verde apasat bucata de puzzle, 202 00:09:34,580 --> 00:09:39,070 tot așa C, ca un limbaj de programare au o piesă principală de cod care 203 00:09:39,070 --> 00:09:43,380 este executat în mod implicit. Și, într-adevăr, este pur și simplu va fi numit principal. 204 00:09:43,380 --> 00:09:44,720 >> Deci principal este o funcție. 205 00:09:44,720 --> 00:09:48,720 Și este o funcție specială care există în C, că, atunci când executați un program, 206 00:09:48,720 --> 00:09:52,720 este principalul care devine condus de Mod implicit. În lumea Scratch, 207 00:09:52,720 --> 00:09:56,970 era, de obicei, atunci când steagul verde a făcut clic pe care s-au administrat în mod implicit. 208 00:09:56,970 --> 00:10:01,130 >> Între timp, am văzut acest lucru înainte, printf sau imprimare formatat, asta 209 00:10:01,130 --> 00:10:05,620 va fi o funcție care vine cu C, împreună cu o grămadă de alții, 210 00:10:05,620 --> 00:10:10,140 care va din timp și de timp din nou, în scopul de a face exact 211 00:10:10,140 --> 00:10:12,450 după cum sugerează și numele, imprima ceva. 212 00:10:12,450 --> 00:10:13,500 Ce vrem să imprimați? 213 00:10:13,500 --> 00:10:15,770 Ei bine, vom vedea că de caractere anexând 214 00:10:15,770 --> 00:10:18,680 cum ar fi these-- mondial Bună ziua, backslash n în ghilimele duble, 215 00:10:18,680 --> 00:10:23,040 putem spune printf exact ce pentru a imprima pe ecran. 216 00:10:23,040 --> 00:10:26,430 >> Dar, în scopul de a face că, din păcate, 217 00:10:26,430 --> 00:10:30,010 trebuie să ia ceva care este deja criptice pentru noi, oamenii, 218 00:10:30,010 --> 00:10:34,510 dar cel puțin este oarecum readable-- ascuțite includ, io.h standard int 219 00:10:34,510 --> 00:10:39,340 principal, nule, printf, toate magice incantatii tocmai am văzut pe ecran. 220 00:10:39,340 --> 00:10:42,470 Dar noi de fapt, trebuie să du-te mai Arcane încă. 221 00:10:42,470 --> 00:10:47,140 În primul rând avem nevoie de a traduce codul pe care le scrie în cod mașină. 222 00:10:47,140 --> 00:10:51,370 Și amintesc de săptămâna trecută că mașinile, cel puțin pe cele pe care le știm aici, 223 00:10:51,370 --> 00:10:54,450 la sfârșitul zilei numai să înțeleagă zero-uri si altele. 224 00:10:54,450 --> 00:10:58,100 >> Iar Dumnezeul meu, dacă a trebuit să scrie aceste zero-uri și cele pentru programul de fapt, 225 00:10:58,100 --> 00:11:01,260 aceasta ar fi foarte, foarte repede ia de distracție din nimic. 226 00:11:01,260 --> 00:11:05,150 Dar, se pare, pe saptamana trecuta, că aceste modele de zero-uri și altele 227 00:11:05,150 --> 00:11:06,400 pur și simplu au o semnificație specială. 228 00:11:06,400 --> 00:11:08,500 În anumite contexte, acestea ar putea însemna numere. 229 00:11:08,500 --> 00:11:11,840 >> În anumite contexte, ar putea însemna litere, sau culori, sau orice număr 230 00:11:11,840 --> 00:11:14,710 din alte abstracțiuni acolo asupra. 231 00:11:14,710 --> 00:11:18,450 Dar, la fel ca și computerul are un CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 sau creierul din interiorul calculatorului. 233 00:11:20,390 --> 00:11:22,240 Este de obicei Intel în interior, pentru că 234 00:11:22,240 --> 00:11:24,900 una dintre cele mai mari companii care face procesoare pentru calculatoare. 235 00:11:24,900 --> 00:11:28,910 >> Ei bine, procesoare Intel și altele pur și simplu, s-au decis în avans 236 00:11:28,910 --> 00:11:33,970 că anumite modele de zero-uri și cele înseamnă lucruri specifice. 237 00:11:33,970 --> 00:11:37,040 Anumite modele de zero-uri și altele va însemna, imprima acest lucru pe ecran, 238 00:11:37,040 --> 00:11:39,710 sau adăugați aceste două numere, sau scad aceste două numere, 239 00:11:39,710 --> 00:11:43,310 sau mutați această bucată de date de la memoria computerului meu aici, 240 00:11:43,310 --> 00:11:47,870 sau orice alt număr de nivel foarte scăzut, dar în cele din urmă util, operații. 241 00:11:47,870 --> 00:11:53,022 Dar, din fericire, noi oamenii nu-i merge să aibă nevoie să cunoască acest nivel de detaliu. 242 00:11:53,022 --> 00:11:56,230 Intr-adevar, la fel ca ultima dată, în cazul în care ne-am abstrase din nou, și din nou, și din nou, 243 00:11:56,230 --> 00:11:58,930 clădire de la un nivel foarte scăzut Primitive, cum ar fi zero-uri și altele 244 00:11:58,930 --> 00:12:01,160 la concepte de nivel superior cum ar fi numere și litere, 245 00:12:01,160 --> 00:12:04,330 și culori, și multe altele, astfel încât putem noi programatori 246 00:12:04,330 --> 00:12:07,080 stau pe umerii alții care au venit înaintea noastră 247 00:12:07,080 --> 00:12:11,260 și de a folosi software-ul celălalt oamenii au scris înainte de us-- 248 00:12:11,260 --> 00:12:14,340 și anume programe numite compilatoare. 249 00:12:14,340 --> 00:12:17,770 >> C este un limbaj care este de obicei compilat, 250 00:12:17,770 --> 00:12:22,130 ceea ce înseamnă convertit de la codul sursă pentru cod mașină. 251 00:12:22,130 --> 00:12:25,230 În special, ceea ce înseamnă este că, dacă ai sursa ta 252 00:12:25,230 --> 00:12:29,530 cod pe care le scrie, așa cum am în curând va fi, în doar un moment de pe ecran, 253 00:12:29,530 --> 00:12:33,140 și doriți să-l convertiți în cele din urmă la mașină code-- 254 00:12:33,140 --> 00:12:37,100 aceste zerouri și cele care numai Mac sau PC-ul 255 00:12:37,100 --> 00:12:41,230 understands-- ai un prim hrana pentru animale, care codul sursă ca 256 00:12:41,230 --> 00:12:46,340 intrare la o specială program numit un compilator, 257 00:12:46,340 --> 00:12:48,974 ieșirea pe care le se vedea este cod mașină. 258 00:12:48,974 --> 00:12:51,890 Și, într-adevăr, ultima dată când am vorbit aproximativ, într-adevăr, la sfârșitul zilei, 259 00:12:51,890 --> 00:12:52,610 rezolvarea problemelor. 260 00:12:52,610 --> 00:12:53,360 Ai intrări. 261 00:12:53,360 --> 00:12:54,318 Iar tu ai ieșiri. 262 00:12:54,318 --> 00:12:56,560 Si ai un fel a algoritmului în mijloc. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmii pot fi cu siguranță implementat în software-ul, 264 00:12:59,830 --> 00:13:02,900 așa cum am văzut săptămâna trecută pseudocod și după cum vom vedea cu codul real 265 00:13:02,900 --> 00:13:03,490 săptămâna aceasta. 266 00:13:03,490 --> 00:13:06,430 Si astfel un compilator cu adevărat doar are un set de algoritmi interior 267 00:13:06,430 --> 00:13:10,060 din ea care știu cum să converti cuvintele cheie speciale, 268 00:13:10,060 --> 00:13:12,180 cum ar fi principală, și printf, și altele pe care tocmai l 269 00:13:12,180 --> 00:13:17,620 a văzut în tiparele de zero-uri și cele pe care Intel în interiorul și în alte procesoare 270 00:13:17,620 --> 00:13:20,020 de fapt, o înțelege. 271 00:13:20,020 --> 00:13:22,460 Deci, cum facem asta? 272 00:13:22,460 --> 00:13:24,470 De unde obținem un compilator? 273 00:13:24,470 --> 00:13:26,400 >> Cei mai mulți dintre noi aici au un Mac sau un PC. 274 00:13:26,400 --> 00:13:29,152 Și tu ești care rulează Mac OS, sau Windows sau Linux sau Solaris, 275 00:13:29,152 --> 00:13:30,860 sau orice număr de alte sisteme de operare. 276 00:13:30,860 --> 00:13:32,568 Și, într-adevăr, am putea du-te afară pe web 277 00:13:32,568 --> 00:13:35,710 și de a descărca un compilator pentru Mac-ul sau PC-ul 278 00:13:35,710 --> 00:13:37,360 pentru sistemul de operare special. 279 00:13:37,360 --> 00:13:39,617 Dar noi ar fi toate pe pagini diferite, ca să spunem așa. 280 00:13:39,617 --> 00:13:41,450 Ne-ar fi puțin configurații diferite. 281 00:13:41,450 --> 00:13:43,210 Și lucrurile nu ar merge toate la fel. 282 00:13:43,210 --> 00:13:45,280 Și, într-adevăr, în aceste zile mulți dintre noi nu folosesc 283 00:13:45,280 --> 00:13:47,516 software-ul care rulează numai pe laptop-urile noastre. 284 00:13:47,516 --> 00:13:49,390 In schimb, folosim ceva ca un browser 285 00:13:49,390 --> 00:13:52,930 ne permite să acceseze web-based aplicații în cloud. 286 00:13:52,930 --> 00:13:55,630 Și, în cursul acestui semestru, vom face exact asta. 287 00:13:55,630 --> 00:13:59,660 Vom scrie aplicatii sau Software-ul nu utilizează code-- C, 288 00:13:59,660 --> 00:14:02,860 dar alte limbaje cum ar fi Python și JavaScript-- care rulează în nor. 289 00:14:02,860 --> 00:14:05,860 >> Și pentru a face acest lucru, noi înșine pe parcursul semestrului 290 00:14:05,860 --> 00:14:11,890 se va folosi de fapt un nor bazat pe mediu cunoscut sub numele de CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Aceasta este o programare web mediu, sau de dezvoltare integrat 292 00:14:16,030 --> 00:14:20,610 mediu, Ide, care este construit in varful unele software-ul open source numit Cloud 9. 293 00:14:20,610 --> 00:14:22,966 Și am făcut unele pedagogice simplificări pentru ea 294 00:14:22,966 --> 00:14:25,840 astfel încât să se ascundă anumite funcții în primele săptămâni pe care nu avem nevoie, 295 00:14:25,840 --> 00:14:27,770 după care puteți dezvăluie-le și de a face cele mai multe 296 00:14:27,770 --> 00:14:29,400 tot ce vrei cu mediul înconjurător. 297 00:14:29,400 --> 00:14:32,470 >> Și ne permite, de asemenea, să pre-a instala anumite programe. 298 00:14:32,470 --> 00:14:35,330 Lucruri cum ar fi așa-numitele CS50 bibliotecă, pe care le vom vedea în curând 299 00:14:35,330 --> 00:14:39,210 ne oferă în C, cu unele funcționalitate suplimentară. 300 00:14:39,210 --> 00:14:44,392 Așa că, dacă te duci la, în cele din urmă, CS50.io, vi se va solicita să vă conectați, 301 00:14:44,392 --> 00:14:46,350 și o dată ce faci și creați un cont gratuit, 302 00:14:46,350 --> 00:14:52,150 vei putea accesa un mediu care arata destul ca acest lucru. 303 00:14:52,150 --> 00:14:53,760 >> Acum, acest lucru este în modul implicit. 304 00:14:53,760 --> 00:14:55,650 Totul este frumos și luminoase de pe ecran. 305 00:14:55,650 --> 00:14:57,941 Mulți dintre noi au obiceiul de lucru pe bucata CS50 asta 306 00:14:57,941 --> 00:14:59,150 destul de târziu în noapte. 307 00:14:59,150 --> 00:15:02,400 Și astfel, unii dintre voi s-ar putea prefera să porniți-l în modul de noapte, ca să spunem așa. 308 00:15:02,400 --> 00:15:05,550 >> Dar, în cele din urmă, ceea ce ești O să vadă în interiorul CS50 IDE 309 00:15:05,550 --> 00:15:08,340 este de trei areas-- distincte o zonă pe unde a plecat 310 00:15:08,340 --> 00:15:12,604 fișierele vor fi în nor, o zonă de pe partea dreaptă sus 311 00:15:12,604 --> 00:15:14,270 în cazul în care codul va fi editat. 312 00:15:14,270 --> 00:15:16,650 Vei putea deschide file individuale pentru orice program 313 00:15:16,650 --> 00:15:19,670 pe care scrie acest semestru interior din acel colț de sus din dreapta. 314 00:15:19,670 --> 00:15:23,070 Și apoi mai arcanely, și totuși puternic, 315 00:15:23,070 --> 00:15:26,610 va fi acest lucru la cele mai fund cunoscut sub numele de o fereastră de terminal. 316 00:15:26,610 --> 00:15:29,450 >> Aceasta este o școală veche Interfață linie de comandă, 317 00:15:29,450 --> 00:15:32,240 sau CLI, care permite vă pentru a executa comenzi 318 00:15:32,240 --> 00:15:35,260 pe computer--, în acest caz, computerul în cloud-- 319 00:15:35,260 --> 00:15:39,090 pentru a face lucruri cum ar fi compila codul de la codul sursă la cod mașină, 320 00:15:39,090 --> 00:15:43,600 pentru a rula programe sau pentru a începe server de web sau pentru a accesa baza de date, 321 00:15:43,600 --> 00:15:47,454 precum și orice număr de alte tehnici că vom începe să utilizați înainte de mult timp. 322 00:15:47,454 --> 00:15:49,370 Dar pentru a ajunge acolo, suntem va avea de fapt 323 00:15:49,370 --> 00:15:51,240 pentru a merge on-line și de a începe să joace. 324 00:15:51,240 --> 00:15:54,399 Și pentru a face acest lucru, să mai întâi începe să meșterească principal, 325 00:15:54,399 --> 00:15:55,940 și a scrie cea mai mare parte a unui program. 326 00:15:55,940 --> 00:15:59,170 Și să folosească această funcție printf, pe care am folosit mai devreme, 327 00:15:59,170 --> 00:16:01,050 pur și simplu să spună ceva. 328 00:16:01,050 --> 00:16:04,910 >> Deci, aici sunt deja în interiorul IDE-ului CS50. 329 00:16:04,910 --> 00:16:05,930 M-am autentificat în avans. 330 00:16:05,930 --> 00:16:07,360 Si am ecranat plin fereastra. 331 00:16:07,360 --> 00:16:09,670 Și așa, în cele din urmă, tu prea în probleme următori 332 00:16:09,670 --> 00:16:12,960 va urma pașii similare va furniza o documentație on-line. 333 00:16:12,960 --> 00:16:16,360 Așa că nu trebuie să vă faceți griji cu privire la absorbind fiecare pas tehnic mic 334 00:16:16,360 --> 00:16:17,730 că eu fac astăzi aici. 335 00:16:17,730 --> 00:16:19,222 >> Dar, veți primi un ecran de genul asta. 336 00:16:19,222 --> 00:16:20,430 I se întâmplă să fie în modul de noapte. 337 00:16:20,430 --> 00:16:22,944 Și tu poți lumina totul prin dezactivarea modului de noapte. 338 00:16:22,944 --> 00:16:24,860 Iar la sfârșitul fișierului zi, vei vedea 339 00:16:24,860 --> 00:16:30,090 aceste trei principale areas-- fișierul browser-ul de la stânga, filele de cod în sus de sus, 340 00:16:30,090 --> 00:16:32,430 și fereastra terminalului din partea de jos. 341 00:16:32,430 --> 00:16:34,890 >> Lasă-mă să merg mai departe și scrie primul meu program de. 342 00:16:34,890 --> 00:16:42,300 Mă duc să preemptively la File, Salvați și salvați fișierul meu ca hello.c. 343 00:16:42,300 --> 00:16:46,850 Într-adevăr, prin convenție, orice program de noi scrie care este scris în limbajul C 344 00:16:46,850 --> 00:16:49,739 ar trebui să fie numit ceva dot c, prin convenție. 345 00:16:49,739 --> 00:16:53,030 Așa că am de gând să-l numească hello.c, deoarece Vreau doar să spun salut din lume. 346 00:16:53,030 --> 00:16:54,820 Acum am de gând să zoom afară și faceți clic pe Salvare. 347 00:16:54,820 --> 00:16:58,180 Si tot ce am aici, acum este o filă în care eu pot începe scrierea de cod. 348 00:16:58,180 --> 00:16:59,490 >> Acest lucru nu se va compila. 349 00:16:59,490 --> 00:17:00,300 Acest lucru nu înseamnă nimic. 350 00:17:00,300 --> 00:17:02,750 Și astfel, chiar dacă m-am convertit acest lucru la zero-uri si cele, 351 00:17:02,750 --> 00:17:05,390 procesorul va avea nici un idee despre ce se întâmplă în jur. 352 00:17:05,390 --> 00:17:14,170 Dar dacă voi scrie linii care se potrivesc cu C fiind conventions-- lui C, 353 00:17:14,170 --> 00:17:20,150 din nou, acest language-- cu sintaxa cum ar fi acest lucru, printf salut world-- și am 354 00:17:20,150 --> 00:17:22,210 ajuns confortabil cu a face acest lucru în timp. 355 00:17:22,210 --> 00:17:24,510 Deci, eu nu cred că am făcut orice erori tipografice. 356 00:17:24,510 --> 00:17:27,910 >> Dar, invariabil, primul timp ce faci acest lucru, vei face. 357 00:17:27,910 --> 00:17:31,090 Și ce sunt pe cale să fac s-ar putea foarte bine să nu lucreze pentru tine prima dată. 358 00:17:31,090 --> 00:17:33,610 Și asta e perfect în regulă, deoarece chiar acum tu 359 00:17:33,610 --> 00:17:37,662 ar putea vedea doar o mulțime de noutate, dar, în timp, odată ce vă familiarizați 360 00:17:37,662 --> 00:17:39,870 cu acest mediu, și această limbă, și altele, 361 00:17:39,870 --> 00:17:42,370 veți începe să vedeți lucruri care sunt fie corecte sau incorecte. 362 00:17:42,370 --> 00:17:44,369 >> Și acest lucru este ceea ce semenii didactice și desigur 363 00:17:44,369 --> 00:17:48,780 asistenți obține atât de bun la timp, este spotting erori sau bug-uri în codul. 364 00:17:48,780 --> 00:17:52,110 Dar eu susțin că acolo nu sunt bug-uri în acest cod. 365 00:17:52,110 --> 00:17:53,990 Deci, eu acum vreau să rulați acest program. 366 00:17:53,990 --> 00:17:57,440 >> Acum, pe cont propriu Mac sau PC-ul, eu sunt în obiceiul de icoane dublu click 367 00:17:57,440 --> 00:17:59,350 când vreau să ruleze un alt program. 368 00:17:59,350 --> 00:18:01,080 Dar asta nu e modelul de aici. 369 00:18:01,080 --> 00:18:04,570 În acest mediu, care este CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Noi folosim o operare sistem numit Linux. 371 00:18:07,192 --> 00:18:09,900 Linux amintește de un alt sistem de operare, cunoscut în general 372 00:18:09,900 --> 00:18:10,850 ca Unix. 373 00:18:10,850 --> 00:18:16,340 Și Linux este cunoscut în special pentru având o linie de comandă pentru mediu, CLI. 374 00:18:16,340 --> 00:18:20,070 Acum, noi folosim un anumit aromă de Linux, denumit Ubuntu. 375 00:18:20,070 --> 00:18:22,770 Ubuntu și este pur și simplu un anumită versiune de Linux. 376 00:18:22,770 --> 00:18:27,900 >> Dar, aceste Linux în aceste zile face de fapt vin cu interfețe grafice de utilizator. 377 00:18:27,900 --> 00:18:30,360 Iar cel care se întâmplă să să fie utilizați aici este web-based. 378 00:18:30,360 --> 00:18:32,735 Deci, acest lucru s-ar putea arata chiar un putin diferit de ceva 379 00:18:32,735 --> 00:18:35,310 v-ar putea avea văzut sau a alerga în trecut. 380 00:18:35,310 --> 00:18:37,910 >> Așa că am de gând să merg mai departe acum și de a face următoarele. 381 00:18:37,910 --> 00:18:40,950 Am salvat acest fișier ca hello.c. 382 00:18:40,950 --> 00:18:47,350 Mă duc să merg mai departe și Tip clanghello.c Deci, zăngănit 383 00:18:47,350 --> 00:18:49,850 pentru limbajul C este un compilator. 384 00:18:49,850 --> 00:18:51,952 Este pre-instalat în CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 Și tu poți descărca și absolut instalați acest lucru pe cont propriu Mac sau PC. 386 00:18:54,910 --> 00:18:57,910 >> Dar, din nou, nu v-ar avea toate pre-configurația făcut pentru tine. 387 00:18:57,910 --> 00:19:00,940 Deci, pentru moment, eu sunt doar va rula clanghello.c. 388 00:19:00,940 --> 00:19:03,240 Și acum observați această sintaxă aici cele din urmă va 389 00:19:03,240 --> 00:19:06,930 dau seama că înseamnă că sunt într-un director sau director numit spațiu de lucru. 390 00:19:06,930 --> 00:19:11,030 Acest semn dolar este doar convenție pentru sensul, tastați comenzile aici. 391 00:19:11,030 --> 00:19:14,560 >> Este ceea ce se numește un prompt, doar prin convenție, este semn dolar. 392 00:19:14,560 --> 00:19:19,130 Și, dacă mă duc mai departe acum și faceți clic Enter, nimic nu pare să se fi întâmplat. 393 00:19:19,130 --> 00:19:20,930 Dar asta e de fapt un lucru bun. 394 00:19:20,930 --> 00:19:23,650 Mai puțin ce se întâmplă pe ecran, cu atât mai probabil 395 00:19:23,650 --> 00:19:26,710 codul este să fie corectă, cel puțin sintactic. 396 00:19:26,710 --> 00:19:29,120 >> Așa că, dacă vreau să rulați acest Programul, ce să fac? 397 00:19:29,120 --> 00:19:33,770 Ei bine, se pare că nume implicit prin convenție 398 00:19:33,770 --> 00:19:38,854 pentru programe când nu specificați o nume pentru programul dvs. este doar a.out. 399 00:19:38,854 --> 00:19:41,270 Iar această sintaxă le veți se familiarizeze cu mult timp înainte de a. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash înseamnă doar, hei, CS50 IDE, executați un program numit a.out 401 00:19:47,500 --> 00:19:49,400 care este în interiorul directorul meu curent. 402 00:19:49,400 --> 00:19:51,520 Dot înseamnă că directorul curent. 403 00:19:51,520 --> 00:19:55,040 Și vom vedea ce alte astfel de secvențe de caractere înseamnă înainte de mult timp. 404 00:19:55,040 --> 00:19:58,430 >> Deci, aici vom merge, Enter, hello world. 405 00:19:58,430 --> 00:20:00,080 Și veți observa că ceea ce sa întâmplat? 406 00:20:00,080 --> 00:20:01,580 Nu numai că a imprima Bună ziua lume. 407 00:20:01,580 --> 00:20:05,990 De asemenea, acesta a mutat cursorul la linia următoare. 408 00:20:05,990 --> 00:20:07,160 >> Și de ce a fost asta? 409 00:20:07,160 --> 00:20:12,400 Care a fost codul pe care am scris mai înainte care a asigurat că cursorul ar 410 00:20:12,400 --> 00:20:14,882 du-te pe linia următoare? 411 00:20:14,882 --> 00:20:16,840 lucru amuzant despre un computerul este doar merge 412 00:20:16,840 --> 00:20:18,570 pentru a face literalmente ceea ce spune sa faci. 413 00:20:18,570 --> 00:20:26,050 >> Așa că, dacă ai spune să printf Bună ziua, virgulă, spațiu, lume, aproape citat, 414 00:20:26,050 --> 00:20:29,090 este literalmente doar merge pentru a imprima aceste caractere. 415 00:20:29,090 --> 00:20:31,980 Dar nu am avut acest caracter special la final, retragerea, backslash n. 416 00:20:31,980 --> 00:20:34,230 Și asta e ceea ce a asigurat că personajul a mers 417 00:20:34,230 --> 00:20:36,570 la următoarea linie a ecranului. 418 00:20:36,570 --> 00:20:38,097 >> De fapt, lasă-mă să merg și fac acest lucru. 419 00:20:38,097 --> 00:20:39,430 Lasă-mă să merg mai departe și să ștergeți acest lucru. 420 00:20:39,430 --> 00:20:41,180 Acum, observați că partea de sus a ecranului meu acolo 421 00:20:41,180 --> 00:20:42,890 un pic de lumină roșie fila care indică, 422 00:20:42,890 --> 00:20:45,047 hei, nu ați salvat fișierul. 423 00:20:45,047 --> 00:20:47,880 Așa că am de gând să merg mai departe cu un control S sau comanda S, salvați fișierul. 424 00:20:47,880 --> 00:20:51,130 Acum, ea a mers goes-- un verde moment--. 425 00:20:51,130 --> 00:20:53,760 Și acum este înapoi doar fiind o pictogramă aproape. 426 00:20:53,760 --> 00:21:01,860 >> Dacă am rula din nou clanghello.c, Enter, slash punct, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 veți vedea că acesta a lucrat in continuare. 428 00:21:04,110 --> 00:21:06,020 Dar este, fără îndoială, un pic buggy. 429 00:21:06,020 --> 00:21:08,714 Chiar acum, spațiul de lucru meu prompt--, și apoi acest semn dolar, 430 00:21:08,714 --> 00:21:10,880 și apoi prompt-- meu real este tot pe aceeași linie. 431 00:21:10,880 --> 00:21:14,540 Deci, acest lucru cu siguranță un bug estetic, chiar dacă nu este cu adevărat o eroare logică. 432 00:21:14,540 --> 00:21:16,250 >> Asa ca voi anula ceea ce tocmai am făcut-o. 433 00:21:16,250 --> 00:21:18,560 Mă duc să rulați din nou a.out. 434 00:21:18,560 --> 00:21:22,710 Observati Am adăugat caracter înapoi linie noua. 435 00:21:22,710 --> 00:21:24,280 Am salvat fișierul. 436 00:21:24,280 --> 00:21:31,630 >> Așa că voi să rulați din nou a.out, si-- La naiba, un bug, un bug care înseamnă greșeală. 437 00:21:31,630 --> 00:21:35,020 Asa ca bug-ul este că, chiar dacă Am adăugat backslash n acolo, 438 00:21:35,020 --> 00:21:41,180 re-salvat, re-fugit programul, comportamentul a fost același. 439 00:21:41,180 --> 00:21:42,640 De ce ar fi asta? 440 00:21:42,640 --> 00:21:43,910 >> Îmi lipsește un pas, nu? 441 00:21:43,910 --> 00:21:47,620 Acest pas cheie mai devreme a fost că aveți sa-- atunci când modificați codul sursă, 442 00:21:47,620 --> 00:21:49,610 De asemenea, se dovedește a alerga ea prin compilatorul 443 00:21:49,610 --> 00:21:51,102 din nou, astfel încât să obțineți un nou cod mașină. 444 00:21:51,102 --> 00:21:52,810 Și codul mașină, zerouri și cele, 445 00:21:52,810 --> 00:21:56,260 vor fi aproape identice, dar nu este perfect așa, pentru că avem nevoie, 446 00:21:56,260 --> 00:21:57,510 desigur, că noua linie. 447 00:21:57,510 --> 00:22:02,640 >> Deci, pentru a rezolva această problemă, voi avea nevoie de să rulați din nou clanghello.c, introduceți, punct 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 Și acum, salut lume este din nou unde mă aștept să fie. 450 00:22:08,402 --> 00:22:09,610 Deci, acest lucru este toate bine și bine. 451 00:22:09,610 --> 00:22:13,150 Dar, a.out este un nume destul de prost pentru un Programul, chiar dacă se întâmplă să fie, 452 00:22:13,150 --> 00:22:16,530 din motive istorice, default-- însemnând ieșiri de asamblare. 453 00:22:16,530 --> 00:22:20,780 >> Dar, lasă-mă să merg mai departe aici și de a face acest lucru în mod diferit. 454 00:22:20,780 --> 00:22:24,760 Vreau programul meu Salut lume pentru a fi de fapt numit salut. 455 00:22:24,760 --> 00:22:28,320 Așa că, dacă ar fi fost o icoana de pe mea desktop-ul, nu ar fi a.out. 456 00:22:28,320 --> 00:22:29,730 Ar fi numit salut. 457 00:22:29,730 --> 00:22:33,660 >> Deci, pentru a face acest lucru, se pare că zăngănit, la fel ca multe programe, 458 00:22:33,660 --> 00:22:37,980 sprijină argumente în linia de comandă, sau steaguri, sau comutatoare, 459 00:22:37,980 --> 00:22:39,600 care influențează pur și simplu comportamentul său. 460 00:22:39,600 --> 00:22:45,160 In mod specific, zăngănit susține o liniuță o pavilion, care ia apoi un al doilea cuvânt. 461 00:22:45,160 --> 00:22:48,190 În acest caz, eu voi arbitrar, dar în mod rezonabil, o numesc salut. 462 00:22:48,190 --> 00:22:50,710 Dar, am putea spune nimic Vreau, cu excepția a.out, care 463 00:22:50,710 --> 00:22:52,390 ar fi mai degrabă pe lângă punctul. 464 00:22:52,390 --> 00:22:55,640 >> Și apoi specificați doar numele din fișierul pe care îl doresc să compilați. 465 00:22:55,640 --> 00:22:59,190 Deci, acum, chiar dacă la început a comenzii am încă zăngănit, 466 00:22:59,190 --> 00:23:01,410 la sfârșitul comenzii Eu încă mai au numele de fișier, 467 00:23:01,410 --> 00:23:05,520 Am acum acestea linie de comandă argumente, aceste steaguri, care spun, 468 00:23:05,520 --> 00:23:11,180 oh, de modul în care, de ieșire-o, un fișier numit salut, nu a.out implicit. 469 00:23:11,180 --> 00:23:13,810 >> Deci, dacă am lovit Enter acum, nimic pare să se fi întâmplat. 470 00:23:13,810 --> 00:23:17,900 Și totuși, acum pot face slash dot salut. 471 00:23:17,900 --> 00:23:19,089 Deci, e același program. 472 00:23:19,089 --> 00:23:21,380 Zerourile și sunt cele de identic la sfârșitul zilei. 473 00:23:21,380 --> 00:23:24,210 >> Dar ei sunt în două diferite a.out files--, 474 00:23:24,210 --> 00:23:26,490 care este prima versiune și doar prostește pe nume, 475 00:23:26,490 --> 00:23:30,250 iar acum salut, care este un mult mai multe nume convingătoare pentru un program. 476 00:23:30,250 --> 00:23:33,195 Dar, sincer, eu nu sunt niciodată O să-și amintească acest lucru din nou, 477 00:23:33,195 --> 00:23:34,070 și din nou și din nou. 478 00:23:34,070 --> 00:23:36,411 Si, de fapt, așa cum am scrie programe mai complicate, 479 00:23:36,411 --> 00:23:38,160 comenzile de care sunteți Va trebui să scrie 480 00:23:38,160 --> 00:23:40,920 se vor obține chiar mai complicat încă. 481 00:23:40,920 --> 00:23:41,940 >> Și, ca să nu vă faceți griji. 482 00:23:41,940 --> 00:23:46,220 Se pare că, oamenii înainte de ne-au dat seama prea 483 00:23:46,220 --> 00:23:47,530 a avut aceeași problemă exact. 484 00:23:47,530 --> 00:23:50,900 Și ei nu s-au bucurat nevoie să tip comenzi destul de lungi, arcane, 485 00:23:50,900 --> 00:23:52,200 să nu mai vorbim să le amintească. 486 00:23:52,200 --> 00:23:56,070 Și, tot așa oamenii înainte de a ne-au făcut alte programe care fac mai ușoară 487 00:23:56,070 --> 00:23:57,670 pentru a compila software-ul. 488 00:23:57,670 --> 00:24:01,609 >> Și, într-adevăr, o astfel de Programul se numește face. 489 00:24:01,609 --> 00:24:03,150 Așa că am de gând să merg mai departe și de a face acest lucru. 490 00:24:03,150 --> 00:24:05,691 Voi anula tot ce am Tocmai am făcut în felul următor. 491 00:24:05,691 --> 00:24:07,690 Lasă-mă de tip LS. 492 00:24:07,690 --> 00:24:10,980 Și veți observa trei lucruri-- a.out, și o stea, salut 493 00:24:10,980 --> 00:24:12,810 și o stea, și hello.c. 494 00:24:12,810 --> 00:24:14,730 Din fericire, acest lucru ar trebui să fie un pic mai intuitiv, 495 00:24:14,730 --> 00:24:18,220 în măsura în care nu a existat anterior nimic în acest spațiu de lucru. 496 00:24:18,220 --> 00:24:21,240 Nu a fost nimic pe care am avut creată până când am început clasa. 497 00:24:21,240 --> 00:24:22,840 >> Si am creat hello.c. 498 00:24:22,840 --> 00:24:24,544 Apoi am compilat, și la numit a.out. 499 00:24:24,544 --> 00:24:27,460 Și apoi l-am compilat din nou ușor în mod diferit și a numit-o salut. 500 00:24:27,460 --> 00:24:32,830 Așa că am trei fișiere în acest director, în acest folder numit spațiu de lucru. 501 00:24:32,830 --> 00:24:35,005 Acum, eu pot vedea că la fel de bine dacă am zoom out de fapt. 502 00:24:35,005 --> 00:24:37,530 >> Dacă aș fi zoom aici și uita-te la mâna dreaptă sus 503 00:24:37,530 --> 00:24:39,940 colt, așa cum a promis la stânga în partea stângă a ecranului 504 00:24:39,940 --> 00:24:42,990 este întotdeauna să vă arăt ce-i în contul tău, ce-i 505 00:24:42,990 --> 00:24:44,790 în interiorul IDE-ului CS50. 506 00:24:44,790 --> 00:24:46,680 Și, există trei fișiere acolo. 507 00:24:46,680 --> 00:24:49,070 >> Așa că vreau să scap de a.out și de salut. 508 00:24:49,070 --> 00:24:51,275 Și, după cum s-ar putea imagina intuitiv, tu 509 00:24:51,275 --> 00:24:53,400 ar putea sorta de comandă clic sau faceți clic dreapta pe acest. 510 00:24:53,400 --> 00:24:54,590 Iar acest meniu mic apare. 511 00:24:54,590 --> 00:24:57,170 Puteți descărca fișierul, executați l, examinați-l, refresh, redenumi, 512 00:24:57,170 --> 00:24:57,700 sau ce nu. 513 00:24:57,700 --> 00:25:00,260 >> Și tocmai am putut șterge, și ar pleca. 514 00:25:00,260 --> 00:25:05,260 Dar hai să facem lucrurile cu o comandă line pentru acum, astfel încât să se obține confortabil 515 00:25:05,260 --> 00:25:07,010 cu acest lucru, și de a face următoarele. 516 00:25:07,010 --> 00:25:12,345 Mă duc să merg mai departe și eliminați a.out prin tastarea literalmente rma.out. 517 00:25:12,345 --> 00:25:14,890 Se pare, comanda pentru înlăturarea sau ștergerea ceva, 518 00:25:14,890 --> 00:25:16,280 nu elimina sau șterge. 519 00:25:16,280 --> 00:25:21,260 >> Este mai succint RM, doar pentru a salva ai unele intrarile de la tastatura, și apăsați Enter. 520 00:25:21,260 --> 00:25:24,707 Acum vom fi oarecum criptic elimina a.out fișier obișnuit. 521 00:25:24,707 --> 00:25:27,040 Nu știu cu adevărat o fișier neregulat ar fi încă. 522 00:25:27,040 --> 00:25:28,660 Dar eu vreau să-l eliminați. 523 00:25:28,660 --> 00:25:30,150 >> Așa că mă duc la y de tip pentru da. 524 00:25:30,150 --> 00:25:31,940 Sau aș putea să-l tip afară, și apăsați Enter. 525 00:25:31,940 --> 00:25:33,440 Și, din nou, nimic nu pare să se întâmple. 526 00:25:33,440 --> 00:25:35,840 Dar acest lucru este, în general, un lucru bun. 527 00:25:35,840 --> 00:25:40,490 >> Dacă aș fi de tip LS data aceasta, ce ar trebui să văd? 528 00:25:40,490 --> 00:25:44,930 Să sperăm că, trebuie doar să salut și hello.c. 529 00:25:44,930 --> 00:25:47,286 Acum, ca o parte, veți observați această stea, asterisc, 530 00:25:47,286 --> 00:25:48,660 că e la sfârșitul programelor mele. 531 00:25:48,660 --> 00:25:50,201 Și ei, de asemenea, să apară în verde. 532 00:25:50,201 --> 00:25:53,970 Acesta este doar modul CS50 IDE dintre voi cluing în faptul 533 00:25:53,970 --> 00:25:55,280 că acest lucru nu este codul sursă. 534 00:25:55,280 --> 00:25:58,880 Asta e un executabil, un Runnable program care poate rula de fapt, 535 00:25:58,880 --> 00:26:01,020 prin a face slash punct, iar apoi este numele. 536 00:26:01,020 --> 00:26:05,860 >> Acum, lasă-mă să merg mai departe și eliminați acest lucru, rm salut, Enter, eliminați regulat 537 00:26:05,860 --> 00:26:08,010 fișier salut, da. 538 00:26:08,010 --> 00:26:11,180 Și acum, dacă am de tip LS, ne întoarcem la hello.c. 539 00:26:11,180 --> 00:26:13,917 Încercați să nu ștergeți codul sursă reală. 540 00:26:13,917 --> 00:26:16,250 Chiar dacă există caracteristici construit în CS50 IDE în cazul în care 541 00:26:16,250 --> 00:26:19,870 puteți merge prin istoricul de revizuire și înapoi în timp, dacă în mod accidental 542 00:26:19,870 --> 00:26:23,660 șterge ceva, nu să fie conștient conform acestor solicitări da sau nu, 543 00:26:23,660 --> 00:26:25,381 de fapt, ceea ce vrei să faci. 544 00:26:25,381 --> 00:26:27,380 Și, dacă mă duc până la partea de sus Colțul din stânga mână aici, 545 00:26:27,380 --> 00:26:30,696 tot ceea ce rămâne este hello.c. 546 00:26:30,696 --> 00:26:32,570 Deci, nu există buchete de alte comenzi pe care le 547 00:26:32,570 --> 00:26:37,550 se poate executa în lumea Linux, una dintre care este, din nou, Make. 548 00:26:37,550 --> 00:26:40,180 Și vom merge pentru a face programul meu acum după cum urmează. 549 00:26:40,180 --> 00:26:43,270 >> In loc de a face zăngănit, în loc de a face zăngăni-o, 550 00:26:43,270 --> 00:26:45,860 Voi pur și simplu literalmente tip, să salut. 551 00:26:45,860 --> 00:26:49,630 Și acum observați, eu sunt nu face tastarea hello.c. 552 00:26:49,630 --> 00:26:50,910 Sunt tastarea face salut. 553 00:26:50,910 --> 00:26:54,840 >> Iar acest program Asigurați că vine cu IDE CS50, și multe altele 554 00:26:54,840 --> 00:26:57,090 în general, cu Linux, este un program care este 555 00:26:57,090 --> 00:26:59,120 va face un program numit Hello. 556 00:26:59,120 --> 00:27:03,680 Și va să-și asume, prin convenție, că în cazul în care acest program poate fi făcută, 557 00:27:03,680 --> 00:27:09,030 aceasta va fi făcută dintr-o sursă fișier de cod care se termină în c dot, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Deci, dacă am lovit Enter acum, observați că comanda care este executat 559 00:27:12,210 --> 00:27:14,340 este de fapt chiar mai mult înainte de a decât înainte. 560 00:27:14,340 --> 00:27:16,670 Si asta pentru ca ne-am preconfigurat IDE CS50 pentru a avea 561 00:27:16,670 --> 00:27:19,878 unele caracteristici suplimentare construite în nu avem nevoie doar de încă, dar în curând va fi. 562 00:27:19,878 --> 00:27:23,470 Dar mai important lucru pentru a realiza este acum am un program Buna ziua. 563 00:27:23,470 --> 00:27:27,080 >> Dacă aș fi din nou tip LS, I au un program de salut. 564 00:27:27,080 --> 00:27:32,070 Si eu pot rula cu dot slash a.out, nu, 565 00:27:32,070 --> 00:27:35,590 pentru că întregul punct al acestei exercițiu a fost dot salut slash. 566 00:27:35,590 --> 00:27:38,089 Și acum am programul meu Salut lume. 567 00:27:38,089 --> 00:27:39,880 Așa că merge mai departe, suntem aproape întotdeauna doar 568 00:27:39,880 --> 00:27:42,088 va compila programele noastre folosind comanda make. 569 00:27:42,088 --> 00:27:45,300 Și apoi vom merge să-i conduse de dot slash, și numele programului. 570 00:27:45,300 --> 00:27:49,610 Dar, dau seama ce fac este pentru a face tu, este că nu este ea însăși un compilator. 571 00:27:49,610 --> 00:27:53,310 Este doar un program de confort care știe cum să declanșeze un compilator 572 00:27:53,310 --> 00:27:56,470 pentru a rula astfel încât să le puteți folosi. 573 00:27:56,470 --> 00:28:00,220 >> Ce există alte comenzi în Linux, iar la rândul său CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Vom vedea în curând că există o comanda CD, Change Directory. 575 00:28:03,107 --> 00:28:05,190 Acest lucru vă permite în termen interfață linie de comandă ta 576 00:28:05,190 --> 00:28:07,610 pentru a merge mai departe, și înapoi, și să se deschidă dosare diferite 577 00:28:07,610 --> 00:28:08,860 fără a utiliza mouse-ul. 578 00:28:08,860 --> 00:28:12,470 >> LS am văzut-o, care vine de la lista fișierele din directorul curent. 579 00:28:12,470 --> 00:28:14,650 Asigurați-Dir, poți probabil, începe să se deducă 580 00:28:14,650 --> 00:28:18,150 Ce înseamnă aceste now-- face director, dacă doriți să creați un folder. 581 00:28:18,150 --> 00:28:21,270 RM pentru eliminare, RM Dir pentru eliminați directory-- și acestea, 582 00:28:21,270 --> 00:28:24,160 din nou, sunt linia de comandă echivalenți de ceea ce ai 583 00:28:24,160 --> 00:28:26,945 ar putea face în CS50 IDE cu mouse-ul. 584 00:28:26,945 --> 00:28:28,820 Dar, în curând vei găsi că, uneori, este doar 585 00:28:28,820 --> 00:28:30,610 mult mai repede pentru a face lucruri cu o tastatură, 586 00:28:30,610 --> 00:28:33,690 și în cele din urmă mult mai puternic. 587 00:28:33,690 --> 00:28:36,440 >> Dar este greu să susțină că tot ce am făcut până acum 588 00:28:36,440 --> 00:28:39,990 este tot atât de puternic, atunci când toate ne-am zis este, Bună ziua lume. 589 00:28:39,990 --> 00:28:43,740 Și, de fapt, am hardcoded cuvinte salut lumea în programul meu. 590 00:28:43,740 --> 00:28:45,530 Nu există nici un dinamism încă. 591 00:28:45,530 --> 00:28:49,320 Zgâriere a fost un ordin de mărime mai interesant săptămâna trecută. 592 00:28:49,320 --> 00:28:51,220 >> Și așa să mergem acolo. 593 00:28:51,220 --> 00:28:55,310 Hai să facem un pas spre care prin mod unora dintre aceste funcții. 594 00:28:55,310 --> 00:28:59,470 Deci, nu numai că vine C cu printf, și ciorchini de alte funcții 595 00:28:59,470 --> 00:29:01,850 unele dintre care vom vedea a lungul timpului, ea nu 596 00:29:01,850 --> 00:29:05,760 face tot atât de ușor dreapta afară din poarta în obținerea de intrare de utilizator. 597 00:29:05,760 --> 00:29:08,140 >> De fapt, unul dintre punctele slabe de limbaje cum ar fi C, 598 00:29:08,140 --> 00:29:10,140 și chiar Java și încă alții, este că nu 599 00:29:10,140 --> 00:29:15,860 face mai ușor pentru a obține doar lucruri cum ar fi numere întregi de la utilizatori, sau siruri de caractere, cuvinte, 600 00:29:15,860 --> 00:29:19,970 și fraze, lasa lucrurile singur cum ar fi valori punctuale sau numere reale plutitoare 601 00:29:19,970 --> 00:29:23,240 cu puncte zecimale, și într-adevăr numere lungi, după cum vom vedea în curând. 602 00:29:23,240 --> 00:29:27,000 Așa că această listă de funcții aici, acestea sunt ca și alte piese de puzzle Scratch 603 00:29:27,000 --> 00:29:31,090 pe care le-am pre-instalate în CS50 IDE pe care le vom folosi pentru câteva săptămâni 604 00:29:31,090 --> 00:29:34,010 ca și roți de formare de soiuri, și în cele din urmă le ia off, și uite 605 00:29:34,010 --> 00:29:37,210 sub capota, probabil, la modul în care sunt puse în aplicare aceste lucruri. 606 00:29:37,210 --> 00:29:40,460 >> Dar pentru a face acest lucru, să de fapt, a scrie un program. 607 00:29:40,460 --> 00:29:41,770 Lasă-mă să plec mai departe acum. 608 00:29:41,770 --> 00:29:44,750 Si voi crea o nouă fișierul făcând clic pe acest mic plus, 609 00:29:44,750 --> 00:29:45,970 și făcând clic pe New File. 610 00:29:45,970 --> 00:29:49,250 >> Voi salva această următor unul ca, să zicem, string.c, 611 00:29:49,250 --> 00:29:50,750 pentru că vreau să se joace cu siruri de caractere. 612 00:29:50,750 --> 00:29:53,990 Și șir de caractere în C este doar o secvență de caractere. 613 00:29:53,990 --> 00:29:56,090 Așa că acum să mergem mai departe și de a face următoarele. 614 00:29:56,090 --> 00:30:01,204 >> Includ standardul IO.h-- și se pare standardul IO, 615 00:30:01,204 --> 00:30:03,360 IO înseamnă doar de intrare și de ieșire. 616 00:30:03,360 --> 00:30:05,920 Deci, se pare că această linie aici este ceea ce 617 00:30:05,920 --> 00:30:08,140 este ne vecine de a folosi printf. 618 00:30:08,140 --> 00:30:10,410 Printf, desigur, produce ieșire. 619 00:30:10,410 --> 00:30:15,000 Deci, în scopul de a utiliza printf, se transformă afară trebuie să aibă această linie de cod 620 00:30:15,000 --> 00:30:16,040 în partea de sus a fișierului. 621 00:30:16,040 --> 00:30:18,456 >> Și ne vom întoarce la ceea ce ceea ce înseamnă cu adevărat înainte de mult timp. 622 00:30:18,456 --> 00:30:20,400 Se pare că, în orice program C I a scrie, 623 00:30:20,400 --> 00:30:23,640 Am să-l înceapă cu cod care arata ca acest lucru. 624 00:30:23,640 --> 00:30:26,860 Și veți observa CS50 IDE, și alte tipuri de dezvoltare integrată 625 00:30:26,860 --> 00:30:30,050 medii, cum ar fi ea, vor încerca ca cele mai bune 626 00:30:30,050 --> 00:30:31,780 ei pot să termine gândul tău. 627 00:30:31,780 --> 00:30:35,930 De fapt, un moment în urmă, dacă am anula ce am făcut, am lovit Enter. 628 00:30:35,930 --> 00:30:39,160 >> Am lovit apoi ondulat deschis bretele, lovit din nou Enter. 629 00:30:39,160 --> 00:30:40,430 Și sa terminat gândul meu. 630 00:30:40,430 --> 00:30:45,140 Mi-a dat o nouă linie, indentate nu mai puțin din motive stilistice frumoase, vom vedea. 631 00:30:45,140 --> 00:30:48,559 Și apoi mi-a dat în mod automat care acoladă pentru a termina gândul meu. 632 00:30:48,559 --> 00:30:50,600 Acum, ea nu întotdeauna ghici ce vrei să faci. 633 00:30:50,600 --> 00:30:53,620 Dar, în mare parte, nu-i salva niste taste. 634 00:30:53,620 --> 00:30:59,560 Deci, un moment în urmă, am rulat acest program-- Bună ziua, lume, și apoi compilat, 635 00:30:59,560 --> 00:31:00,460 și apoi a fugit. 636 00:31:00,460 --> 00:31:01,867 Dar nu e nici un dinamism aici. 637 00:31:01,867 --> 00:31:03,700 Ce se întâmplă dacă am vrut să face ceva diferit? 638 00:31:03,700 --> 00:31:07,630 Ei bine, ce dacă aș fi vrut să de fapt obține un șir de caractere de la utilizator? 639 00:31:07,630 --> 00:31:11,250 Am de gând să folosească o piesă de puzzle numit exact that-- obține șir. 640 00:31:11,250 --> 00:31:15,860 >> Se pare că, în C, că, atunci când nu doriți pentru a oferi intrare la o piesă de puzzle, 641 00:31:15,860 --> 00:31:19,360 sau mai corect la o funcție, literalmente face doar paranteze deschise, 642 00:31:19,360 --> 00:31:20,430 aproape paranteză. 643 00:31:20,430 --> 00:31:25,540 Deci, e ca și cum ar exista nici o cutie albă pentru a introduce în. 644 00:31:25,540 --> 00:31:27,720 Blocul spus înainte a avut o cutie mică de culoare albă. 645 00:31:27,720 --> 00:31:29,660 Noi nu avem acea cutie alba acum. 646 00:31:29,660 --> 00:31:33,310 >> Dar, când eu numesc șir get, eu doresc să pună rezultatul undeva. 647 00:31:33,310 --> 00:31:37,680 Deci, o paradigmă foarte frecvente în C este de apela o funcție, cum ar fi string ajunge aici, 648 00:31:37,680 --> 00:31:41,070 și apoi stoca valoarea de retur. 649 00:31:41,070 --> 00:31:44,450 Este rezultatul acesteia efort în ceva. 650 00:31:44,450 --> 00:31:47,630 >> Și ceea ce este construct în programare, 651 00:31:47,630 --> 00:31:53,450 fie în zero sau acum C, pe care noi se poate folosi pentru a stoca de fapt ceva? 652 00:31:53,450 --> 00:31:55,990 A numit-o variabilă, nu? 653 00:31:55,990 --> 00:32:00,320 Și, în Scratch, noi nu prea pasă ce se întâmplă în variabile. 654 00:32:00,320 --> 00:32:02,170 >> Dar, în acest caz, vom face de fapt. 655 00:32:02,170 --> 00:32:03,719 Am de gând să spun șir de caractere. 656 00:32:03,719 --> 00:32:05,510 Și apoi aș putea suna acest lucru tot ce vreau. 657 00:32:05,510 --> 00:32:08,340 Mă duc să-l sun nume, devine primi șir. 658 00:32:08,340 --> 00:32:10,250 >> Și acum, chiar dacă sunteți un pic mai nou la acest lucru, 659 00:32:10,250 --> 00:32:11,984 observați că am lipsit unele detalii. 660 00:32:11,984 --> 00:32:13,150 Sunt uita un semi-colon. 661 00:32:13,150 --> 00:32:14,400 Trebuie să termin acest gând. 662 00:32:14,400 --> 00:32:17,480 Așa că mă voi muta cursorul meu, și a lovit semi-colon acolo. 663 00:32:17,480 --> 00:32:19,130 Și ce tocmai am făcut? 664 00:32:19,130 --> 00:32:21,440 În această linie de cod, numărul 5 în acest moment, 665 00:32:21,440 --> 00:32:23,799 Am sunat șir get fără intrări. 666 00:32:23,799 --> 00:32:26,090 Deci, nu există nici un alb mic cutie ca blocul de Salvare are. 667 00:32:26,090 --> 00:32:28,590 >> Spun doar că, hei, calculator, adu-mi un șir de caractere. 668 00:32:28,590 --> 00:32:31,390 Semnul egal nu este cu adevărat un semn egal, per se. 669 00:32:31,390 --> 00:32:33,790 Este atribuirea operatorul, ceea ce înseamnă, 670 00:32:33,790 --> 00:32:37,860 hei, calculator, mutați valoarea din dreapta spre stânga. 671 00:32:37,860 --> 00:32:40,480 Iar în stânga, am următoarele. 672 00:32:40,480 --> 00:32:43,580 >> Hei, calculator, da-mi un string-- o secvență de caractere. 673 00:32:43,580 --> 00:32:45,637 Și sună asta Nume șir. 674 00:32:45,637 --> 00:32:47,220 Și eu nu au nici măcar să-l numesc nume. 675 00:32:47,220 --> 00:32:49,970 >> Aș putea numi, în mod convențional, ceva de genul S, 676 00:32:49,970 --> 00:32:52,900 la fel ca am folosit i pentru a apelați variabila i. 677 00:32:52,900 --> 00:32:54,829 Dar acum am nevoie să fac ceva cu ea. 678 00:32:54,829 --> 00:32:57,370 Ar fi destul de prost să încercați compilarea acestui cod, care rulează 679 00:32:57,370 --> 00:32:59,410 acest program, chiar dacă Primesc un șir de caractere, 680 00:32:59,410 --> 00:33:01,580 pentru că este încă doar O să te salut mondială. 681 00:33:01,580 --> 00:33:06,140 >> Dar dacă eu vreau să schimbe acest lucru. 682 00:33:06,140 --> 00:33:07,940 De ce nu fac asta? 683 00:33:07,940 --> 00:33:11,632 La suta s, s virgulă. 684 00:33:11,632 --> 00:33:13,090 Și acest lucru este un pic criptic încă. 685 00:33:13,090 --> 00:33:15,560 >> Deci, să-mi fac variabilele mele mai clare. 686 00:33:15,560 --> 00:33:17,510 Permiteți-mi să numim acest Nume variabilă. 687 00:33:17,510 --> 00:33:20,230 Și să vedem dacă nu putem șicana în afară ce se întâmplă aici. 688 00:33:20,230 --> 00:33:22,770 >> Deci, pe linia cinci, eu sunt obtinerea un șir de caractere. 689 00:33:22,770 --> 00:33:25,620 Si eu sunt acel șir de stocare, indiferent de utilizator a tastat 690 00:33:25,620 --> 00:33:28,430 la tastatura lui sau ei, într-o variabilă numită nume. 691 00:33:28,430 --> 00:33:30,590 Și se pare că printf nu doar 692 00:33:30,590 --> 00:33:34,220 ia un argument în dublu citate, o intrare în ghilimele duble. 693 00:33:34,220 --> 00:33:39,100 >> Aceasta poate dura două sau trei, sau mai multe, cum ar că a doua, sau a treia, sau a patra, 694 00:33:39,100 --> 00:33:42,320 sunt toate numele variabilelor, sau în mod specific valori, 695 00:33:42,320 --> 00:33:48,610 pe care doriți să conectați în, dinamic, acel șir în ghilimele. 696 00:33:48,610 --> 00:33:52,110 Cu alte cuvinte, ceea ce ar fi în neregulă cu asta? 697 00:33:52,110 --> 00:33:57,920 În cazul în care tocmai am spus salut numele, backslash n, a salvat fișierul meu, compilat codul meu, 698 00:33:57,920 --> 00:34:01,660 și a fugit acest lucru, ce s-ar întâmpla? 699 00:34:01,660 --> 00:34:05,139 >> Este doar o să spun, salut nume, literalmente N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 care este un fel de prost, deoarece nu e diferit de lumea. 701 00:34:07,900 --> 00:34:10,400 Așa că nimic în ghilimele este ceea ce literalmente se imprimă. 702 00:34:10,400 --> 00:34:12,520 Așa că, dacă vreau să am un înlocuitor acolo, 703 00:34:12,520 --> 00:34:14,422 de fapt, am nevoie pentru a utiliza unele sintaxă specială. 704 00:34:14,422 --> 00:34:17,380 Și se pare că, dacă ai citit documentație pentru funcția printf, 705 00:34:17,380 --> 00:34:21,320 vă va spune că dacă utilizați procente s, 706 00:34:21,320 --> 00:34:23,920 puteți înlocui o valoare după cum urmează. 707 00:34:23,920 --> 00:34:27,190 >> După o virgulă după aceea dublu citat, pur și simplu 708 00:34:27,190 --> 00:34:29,179 scrie pe numele variabilă pe care doriți 709 00:34:29,179 --> 00:34:33,790 să conectați în acest format cod, sau în format specifier, 710 00:34:33,790 --> 00:34:35,469 procente pentru siruri de caractere. 711 00:34:35,469 --> 00:34:39,190 Și acum, dacă am salvat fișierul meu, Mă duc înapoi la terminalul meu. 712 00:34:39,190 --> 00:34:42,870 Și I tip String Make, pentru că, din nou, numele acestui 713 00:34:42,870 --> 00:34:45,510 fișier pe care am ales înainte de string.c. 714 00:34:45,510 --> 00:34:48,510 >> Așa că am de gând să spun realiza un șir, introduceți. 715 00:34:48,510 --> 00:34:51,550 Oh, Doamne, uita-te la toate greșelile pe care le-am făcut deja. 716 00:34:51,550 --> 00:34:55,540 Si acest este-- ceea ce este într-adevăr acest lucru ca un, șapte program de șase linii? 717 00:34:55,540 --> 00:34:57,790 Deci, acest lucru este în cazul în care se poate foarte obține rapid copleșitoare. 718 00:34:57,790 --> 00:35:00,890 >> Această fereastră are terminale acum doar regurgitate 719 00:35:00,890 --> 00:35:03,230 un număr foarte mare de mesaje de eroare. 720 00:35:03,230 --> 00:35:07,560 Cu siguranță, eu nu am mai eroare mesaje decât am linii de cod. 721 00:35:07,560 --> 00:35:08,680 Deci, ce se întâmplă? 722 00:35:08,680 --> 00:35:10,920 >> Ei bine, cea mai bună strategie pentru a face oricând tine 723 00:35:10,920 --> 00:35:13,710 se confruntă cu o copleșitoare lista de erori, cum ar fi faptul că, 724 00:35:13,710 --> 00:35:16,690 este defila înapoi, uita-te pentru comanda tocmai ai fugit, care, în cazul meu 725 00:35:16,690 --> 00:35:18,020 este de a face șir. 726 00:35:18,020 --> 00:35:21,630 Uita-te la ce face făcut, și cu asta basta comandă lung zăngănit, nu e mare acolo. 727 00:35:21,630 --> 00:35:22,950 >> Dar, roșu este rău. 728 00:35:22,950 --> 00:35:24,750 Verde încearcă să fie blând și de ajutor. 729 00:35:24,750 --> 00:35:26,140 Dar este încă rău, în acest caz. 730 00:35:26,140 --> 00:35:27,510 Dar, în cazul în care este rău? 731 00:35:27,510 --> 00:35:31,450 >> String.c, linia de cinci, cinci caractere. 732 00:35:31,450 --> 00:35:32,930 Deci, aceasta este doar convenție comună. 733 00:35:32,930 --> 00:35:36,060 Ceva de colon ceva înseamnă numărul de linie și numărul de caractere. 734 00:35:36,060 --> 00:35:41,080 Eroare, utilizarea nedeclarată string identificator. 735 00:35:41,080 --> 00:35:42,900 Ai vrut să spui standard? 736 00:35:42,900 --> 00:35:45,530 >> Așa că, din păcate, zăngănit este încercarea de a fi de ajutor. 737 00:35:45,530 --> 00:35:46,850 Dar este greșit, în acest caz. 738 00:35:46,850 --> 00:35:49,350 Nu, zăngănit, nu am vrut standardul IO. 739 00:35:49,350 --> 00:35:51,070 Am vrut să spun că, pe o singură linie, da. 740 00:35:51,070 --> 00:35:53,420 >> Dar, linia cinci este asta aici. 741 00:35:53,420 --> 00:35:57,040 Și zăngănit nu înțeleg S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Este un identificator nedeclarat, o cuvânt pur și simplu nu a mai văzut înainte. 743 00:36:01,490 --> 00:36:05,730 Si asta pentru ca C, limba noi scriem cod chiar acum, 744 00:36:05,730 --> 00:36:08,070 nu are variabile numite siruri de caractere. 745 00:36:08,070 --> 00:36:11,380 >> Ea nu are, în mod implicit, suport ceva numit un șir de caractere. 746 00:36:11,380 --> 00:36:16,750 Asta-i o bucată de CS50 jargonul, dar foarte convențional. 747 00:36:16,750 --> 00:36:18,600 Dar eu pot rezolva această problemă, după cum urmează. 748 00:36:18,600 --> 00:36:22,090 >> În cazul în care am adăuga o linie de cod în partea de sus a acestui program, 749 00:36:22,090 --> 00:36:27,890 includ CS50.h, care este un alt fișier undeva în interiorul CS50 IDE, undeva 750 00:36:27,890 --> 00:36:30,820 pe hard disk, ca să spunem așa, a sistemului de operare Ubuntu 751 00:36:30,820 --> 00:36:33,590 că eu sunt difuzate, că este fișierul care este 752 00:36:33,590 --> 00:36:38,740 va preda în funcțiune sistem ce este un șir de caractere, doar 753 00:36:38,740 --> 00:36:41,930 cum ar fi io.h standard este fișierul în sistemul de operare care este 754 00:36:41,930 --> 00:36:44,430 O să-l învețe ce printf este. 755 00:36:44,430 --> 00:36:46,810 >> Într-adevăr, ne-ar fi ajuns un mesaj foarte asemănător 756 00:36:46,810 --> 00:36:50,600 în cazul în care IO a admis standardul IO.h și a încercat să folosească printf. 757 00:36:50,600 --> 00:36:53,632 Așa că am de gând să merg mai departe și doar să preia controlul L pentru a goli ecranul. 758 00:36:53,632 --> 00:36:56,340 Sau puteți introduce clar și va doar clar fereastra terminalului. 759 00:36:56,340 --> 00:36:58,020 Dar vă puteți defila încă înapoi în timp. 760 00:36:58,020 --> 00:37:01,100 >> Și am de gând să rulați din nou realiza un șir. 761 00:37:01,100 --> 00:37:03,660 Cruce degetele mele de data aceasta, Enter. 762 00:37:03,660 --> 00:37:05,380 Oh, Doamne, a funcționat. 763 00:37:05,380 --> 00:37:09,280 mi arată o comandă de lungă criptic că este ceea ce Marcă au generat prin intermediul zăngănit, 764 00:37:09,280 --> 00:37:10,460 dar nici un mesaj de eroare. 765 00:37:10,460 --> 00:37:12,460 Așa că dau seama, chiar dacă s-ar putea obține complet 766 00:37:12,460 --> 00:37:14,480 copleșit de Numărul de mesaje de eroare, 767 00:37:14,480 --> 00:37:17,540 ea ar putea fi doar acest enervant în cascadă efect, în cazul în care zăngănit nu înțelege 768 00:37:17,540 --> 00:37:19,620 un singur lucru, ceea ce înseamnă că atunci nu înțelege cuvântul următor, 769 00:37:19,620 --> 00:37:20,560 sau linia următoare. 770 00:37:20,560 --> 00:37:22,850 Și așa doar inductoare de pe codul. 771 00:37:22,850 --> 00:37:24,440 Dar fix s-ar putea să fie simplu. 772 00:37:24,440 --> 00:37:27,822 Și, astfel încât întotdeauna să se concentreze pe de prima linie de ieșire. 773 00:37:27,822 --> 00:37:29,530 Și, dacă nu Înțeleg că, uita-te doar 774 00:37:29,530 --> 00:37:32,480 pentru cuvintele cheie care ar putea fi indicii, și numărul liniei, 775 00:37:32,480 --> 00:37:34,650 și caracterul, în cazul în care că greșeala ar putea fi. 776 00:37:34,650 --> 00:37:40,328 >> Acum, lasă-mă să merg mai departe și tastați dot slash, șir, introduceți. 777 00:37:40,328 --> 00:37:44,340 Hm, nu spune nimic salut. 778 00:37:44,340 --> 00:37:46,210 De ce? 779 00:37:46,210 --> 00:37:48,170 Ei bine, amintesc, în cazul în care este execută? 780 00:37:48,170 --> 00:37:53,730 >> Este, probabil, blocat în acest moment într-o buclă, dacă va fi, pe linia de șase, 781 00:37:53,730 --> 00:37:56,950 deoarece Ia-String prin design, în scris de către personalul CS50, 782 00:37:56,950 --> 00:38:00,350 este literalmente menit să stea doar acolo de așteptare, și de așteptare, 783 00:38:00,350 --> 00:38:01,850 și de așteptare pentru un șir de caractere. 784 00:38:01,850 --> 00:38:03,792 Tot ceea ce înțelegem prin șir de intrare este uman. 785 00:38:03,792 --> 00:38:04,500 Deci, tu ce știi? 786 00:38:04,500 --> 00:38:05,166 Lasă-mă să merg mai departe. 787 00:38:05,166 --> 00:38:08,704 Și doar pe un capriciu, lasă-mă tastați numele meu, David, introduceți. 788 00:38:08,704 --> 00:38:10,120 Acum am un program mai dinamic. 789 00:38:10,120 --> 00:38:11,240 Acesta a spus, salut David. 790 00:38:11,240 --> 00:38:16,280 >> Dacă mă duc mai departe și a alerga acest lucru din nou, lasă-mă să încerc spun numele Zamila, introduceți. 791 00:38:16,280 --> 00:38:17,940 Și acum avem un program dinamic. 792 00:38:17,940 --> 00:38:19,380 Nu am codificate greu mondiale. 793 00:38:19,380 --> 00:38:21,760 Nu am codificate greu nume sau David sau Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Acum este mult mai mult ca programele știm, în cazul în care în cazul în care luați de intrare, 795 00:38:25,350 --> 00:38:27,870 ea produce ieșire ușor diferită. 796 00:38:27,870 --> 00:38:31,020 Acum, acest lucru nu este cel mai bun experiența utilizatorului, sau UX. 797 00:38:31,020 --> 00:38:33,000 Am rula programul. 798 00:38:33,000 --> 00:38:35,830 >> Nu știu ce-ar trebui de a face, dacă nu de fapt, uita-te la 799 00:38:35,830 --> 00:38:37,290 sau să vă amintiți codul sursă. 800 00:38:37,290 --> 00:38:39,640 Așa că hai să facem utilizatorului experimenta un pic mai bine 801 00:38:39,640 --> 00:38:41,240 cu cele mai simple lucruri. 802 00:38:41,240 --> 00:38:44,782 Lasă-mă să mă întorc în asta program și spune pur și simplu printf. 803 00:38:44,782 --> 00:38:48,870 >> Și lasă-mă să merg mai departe și spun numele, de colon, și un spațiu, și apoi un semi-colon. 804 00:38:48,870 --> 00:38:51,170 Si doar pentru lovituri, fără reacții negative n. 805 00:38:51,170 --> 00:38:52,980 Și asta e în mod deliberat, pentru că nu vreau 806 00:38:52,980 --> 00:38:54,590 prompt pentru a trece la linia următoare. 807 00:38:54,590 --> 00:38:58,800 >> Vreau, în schimb, a face acest lucru, face șir de caractere să recompilați codul meu într-o nouă mașină 808 00:38:58,800 --> 00:39:00,980 cod dot slash șir. 809 00:39:00,980 --> 00:39:02,460 Ah, acest lucru este mult mai frumoasa. 810 00:39:02,460 --> 00:39:05,780 Acum, de fapt, eu știu ce computerul vrea ca eu să fac, da un nume. 811 00:39:05,780 --> 00:39:10,020 >> Așa că am de gând să merg mai departe și tastați în Rob, intră, și salut, Rob. 812 00:39:10,020 --> 00:39:13,640 Așa că, realiza, aceasta este încă, la sfârșitul anului a doua zi, doar un program de nouă linie. 813 00:39:13,640 --> 00:39:15,090 Dar ne-am luat acești pași pentru copii. 814 00:39:15,090 --> 00:39:18,380 >> Am scris-o singură linie cu care ne-am erau familiare, printf, hello world. 815 00:39:18,380 --> 00:39:19,980 Apoi am undid un pic de asta. 816 00:39:19,980 --> 00:39:21,560 Si am folosit de fapt șir get. 817 00:39:21,560 --> 00:39:23,362 Si ne-am aruncat acea valoare într-o variabilă. 818 00:39:23,362 --> 00:39:26,070 Și apoi am mers mai departe și îmbunătățite l în continuare cu o a treia linie. 819 00:39:26,070 --> 00:39:29,220 Iar acest proces iterativ de scris software-ul este cu adevărat cheie. 820 00:39:29,220 --> 00:39:33,420 În CS50, și în viață, în general, în general, nu ar trebui să stai jos, 821 00:39:33,420 --> 00:39:36,800 au un program în minte, și încercați să scrieți totul naibii totul dintr-o dată. 822 00:39:36,800 --> 00:39:40,810 >> Ea va fi, în mod inevitabil, ca rezultat într-un mod mai multe erori decât ne-am văzut aici. 823 00:39:40,810 --> 00:39:44,070 Chiar și eu, până în această zi, în mod constant face alte greșeli stupide, 824 00:39:44,070 --> 00:39:47,480 sunt greșeli de fapt mai greu care sunt mai greu să dau seama. 825 00:39:47,480 --> 00:39:52,095 Dar va face mai multe greșeli mai mult linii de cod scrieți toate dintr-o dată. 826 00:39:52,095 --> 00:39:54,220 Și astfel, această practică, a scrie un pic de cod 827 00:39:54,220 --> 00:39:57,930 că tu ești confortabil, compila ea, rulați-l, testați-l mai general, 828 00:39:57,930 --> 00:40:01,370 apoi mutați on-- astfel încât la fel ca și ne-am păstrat stratificarea și stratificarea săptămâna trecută, 829 00:40:01,370 --> 00:40:04,190 construirea de la ceva foarte simplu la ceva mai complex, 830 00:40:04,190 --> 00:40:05,200 face același lucru aici. 831 00:40:05,200 --> 00:40:08,500 Nu stai jos, și să încerce să a scrie o întreagă problemă. 832 00:40:08,500 --> 00:40:10,780 De fapt, acești pași să ia copii. 833 00:40:10,780 --> 00:40:15,100 >> Acum, siruri de caractere nu sunt toate că utile pentru ei înșiși. 834 00:40:15,100 --> 00:40:18,210 Ne-ar, de fapt, în mod ideal, cum ar fi să au altceva în set de instrumente noastre. 835 00:40:18,210 --> 00:40:20,990 Așa că hai de fapt, face exact asta. 836 00:40:20,990 --> 00:40:24,900 >> Lasă-mă să merg mai departe acum și biciul un program ușor diferit. 837 00:40:24,900 --> 00:40:28,320 Si noi vom numi acest int.c, pentru întreg. 838 00:40:28,320 --> 00:40:30,870 Mă duc să, în mod similar, includ CS550.h. 839 00:40:30,870 --> 00:40:33,060 Am de gând să includă standardul IO. 840 00:40:33,060 --> 00:40:36,630 Si asta va fi destul de frecvente în aceste primele câteva zile ale clasei. 841 00:40:36,630 --> 00:40:39,050 >> Și voi gata eu cu o funcție principală. 842 00:40:39,050 --> 00:40:43,370 Iar acum, în loc de a obține un șir de caractere, Să mergem mai departe și să obțină un int. 843 00:40:43,370 --> 00:40:49,285 Hai să-l sun eu, si suna-l int parens aproape, semi-colon. 844 00:40:49,285 --> 00:40:51,410 Și acum să facem ceva cu ea, printf. 845 00:40:51,410 --> 00:40:56,190 >> Hai să spunem ceva de genul Bună ziua, backslash n, i virgulă. 846 00:40:56,190 --> 00:41:00,010 Deci, eu sunt destul de mult mimarea ceea ce am făcut doar o clipă în urmă. 847 00:41:00,010 --> 00:41:01,660 Am un înlocuitor aici. 848 00:41:01,660 --> 00:41:05,150 Am virgulă i aici, pentru că vreau la i conectați în acel substituent. 849 00:41:05,150 --> 00:41:07,250 >> Așa că hai să mergem mai departe și să încerce compilarea acestui program. 850 00:41:07,250 --> 00:41:10,060 Fișierul este numit int.c. 851 00:41:10,060 --> 00:41:12,920 Așa că am de gând să spun, fac int enter. 852 00:41:12,920 --> 00:41:16,420 Oh, Doamne, dar nu e mare, nu? 853 00:41:16,420 --> 00:41:17,230 E o greșeală. 854 00:41:17,230 --> 00:41:19,810 >> E o greșeală sintactică aici, astfel încât programul nu poate 855 00:41:19,810 --> 00:41:25,460 să fie compilate în interiorul int.c, linie șapte, caracter 27, format de eroare 856 00:41:25,460 --> 00:41:28,400 specifică tip char stea, indiferent ce este. 857 00:41:28,400 --> 00:41:30,020 Dar, tipul de argument este int. 858 00:41:30,020 --> 00:41:33,110 >> Deci, aici, de asemenea, vom nu merge sa-- chiar dacă astăzi este o mulțime de materiale, 859 00:41:33,110 --> 00:41:35,710 vom să vă copleșească cu absolut fiecare trăsătură a C, 860 00:41:35,710 --> 00:41:38,070 și programarea mai general, in doar aceste primele câteva săptămâni. 861 00:41:38,070 --> 00:41:40,400 Deci, exista de multe ori va fi jargon cu care nu sunteți familiarizați. 862 00:41:40,400 --> 00:41:43,350 Și, de fapt, char stea este ceva ne vom întoarce la 863 00:41:43,350 --> 00:41:44,830 într-o săptămână sau timp de doi lui. 864 00:41:44,830 --> 00:41:47,530 >> Dar, pentru moment, să vedem dacă putem analiza cuvinte care sunt familiare. 865 00:41:47,530 --> 00:41:50,750 așa că Formats-- am auzit formatul specifier, cod format înainte de a. 866 00:41:50,750 --> 00:41:51,840 Asta e familiar. 867 00:41:51,840 --> 00:41:53,840 Type-- dar argumentul are tip int. 868 00:41:53,840 --> 00:41:55,980 Stai puțin, i este un int. 869 00:41:55,980 --> 00:41:59,230 >> Poate la suta s de fapt are un sens definit. 870 00:41:59,230 --> 00:42:00,230 Si, intr-adevar, o face. 871 00:42:00,230 --> 00:42:03,101 Un număr întreg, dacă doriți printf să-l înlocuiască, 872 00:42:03,101 --> 00:42:05,350 tu de fapt, trebuie să utilizați un format diferit specificator. 873 00:42:05,350 --> 00:42:06,890 Și n-ar ști acest lucru cu excepția cazului în cineva ți-a spus, 874 00:42:06,890 --> 00:42:07,973 sau ați făcut-o înainte. 875 00:42:07,973 --> 00:42:10,490 Dar, la sută, i este ceea ce pot fi utilizate în mod obișnuit 876 00:42:10,490 --> 00:42:12,240 în printf pentru conectarea într-un întreg. 877 00:42:12,240 --> 00:42:14,920 De asemenea, puteți utiliza la sută d pentru un număr întreg zecimal. 878 00:42:14,920 --> 00:42:16,490 Dar i este simplu si frumos aici. 879 00:42:16,490 --> 00:42:17,590 Așa că vom merge cu asta. 880 00:42:17,590 --> 00:42:21,160 >> Acum, lasă-mă să merg mai departe și rerun marca int Enter. 881 00:42:21,160 --> 00:42:23,328 Asta e bine, nici o eroare. 882 00:42:23,328 --> 00:42:27,260 Dot slash OK int--, experiența utilizatorului rău, pentru că nu m-am spus 883 00:42:27,260 --> 00:42:27,760 ce sa fac. 884 00:42:27,760 --> 00:42:28,426 Dar asta e bine. 885 00:42:28,426 --> 00:42:29,480 Sunt prinderea pe repede. 886 00:42:29,480 --> 00:42:36,260 >> Și acum lasă-mă să merg mai departe și tastați David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, astfel încât acesta este un lucru bun. 888 00:42:37,820 --> 00:42:41,710 De data aceasta, eu sunt, folosind o funcție, o piesă de puzzle, numit get int. 889 00:42:41,710 --> 00:42:44,230 Și se pare out-- și ne vom a se vedea acest lucru mai târziu în term-- 890 00:42:44,230 --> 00:42:47,730 personalul CS50 a pus în aplicare obține șir în așa fel 891 00:42:47,730 --> 00:42:50,350 că aceasta va numai fizic obține un șir de caractere pentru tine. 892 00:42:50,350 --> 00:42:54,340 >> S-a implementat get int în astfel încât acesta va numai 893 00:42:54,340 --> 00:42:55,590 obține un număr întreg pentru tine. 894 00:42:55,590 --> 00:42:57,830 Și dacă tu, omul, nu cooperează, este 895 00:42:57,830 --> 00:43:00,590 literalmente doar a merge la spun încerca din nou, încercați din nou, încercați din nou, 896 00:43:00,590 --> 00:43:05,200 literalmente stând acolo looping, până când vă obligă cu unele număr magic, 897 00:43:05,200 --> 00:43:07,670 cum ar fi 50, și salut 50. 898 00:43:07,670 --> 00:43:11,440 >> Sau, dacă vom rula acest lucru din nou și tipul de la 42, 42 Buna ziua. 899 00:43:11,440 --> 00:43:15,750 Si astfel functia get int în interiorul acelei piese de puzzle 900 00:43:15,750 --> 00:43:19,050 este destul de logică, îndeajuns de multă gândire, să ne dăm seama, ce este un cuvânt? 901 00:43:19,050 --> 00:43:20,330 Și ce este un număr? 902 00:43:20,330 --> 00:43:23,165 Numai acceptarea, în cele din urmă, numere. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Deci, se pare că acest lucru nu este tot ceea ce expresiv. 905 00:43:30,230 --> 00:43:30,910 pana acum. 906 00:43:30,910 --> 00:43:33,690 Așa că, yay, ultima dată când am a mers destul de repede 907 00:43:33,690 --> 00:43:38,320 în jocuri de punere în aplicare, și de animație, și lucrări artistice în Scratch. 908 00:43:38,320 --> 00:43:42,260 Si aici, suntem conținut cu lumea salut, și salut 50. 909 00:43:42,260 --> 00:43:43,696 >> Nu e tot ce inspira. 910 00:43:43,696 --> 00:43:46,070 Și, într-adevăr, aceste prime exemple vor lua ceva timp 911 00:43:46,070 --> 00:43:47,510 la sol până în excitare. 912 00:43:47,510 --> 00:43:49,854 Dar noi avem atât de mult mai mult controlează în prezent, de fapt. 913 00:43:49,854 --> 00:43:51,770 Și vom merge la foarte începe rapid layering 914 00:43:51,770 --> 00:43:53,870 pe partea de sus a acestor primitivelor de bază. 915 00:43:53,870 --> 00:43:56,370 >> Dar, în primul rând, trebuie să înțelegem ce limitările sunt. 916 00:43:56,370 --> 00:43:58,620 De fapt, unul dintre lucrurile Zgârietură nu cu ușurință 917 00:43:58,620 --> 00:44:00,990 să ne facem este într-adevăr uite sub capota, 918 00:44:00,990 --> 00:44:03,740 și să înțeleagă ce computerul este, ceea ce poate face, 919 00:44:03,740 --> 00:44:05,250 și care sunt limitele sale. 920 00:44:05,250 --> 00:44:08,580 Și, într-adevăr, că lipsa înțelegere, potențial, pe termen lung 921 00:44:08,580 --> 00:44:12,520 poate duce la propria noastră scris mistakes-- bug-uri, software-ul scris nesigur că 922 00:44:12,520 --> 00:44:13,880 devine tocat într-un fel. 923 00:44:13,880 --> 00:44:17,130 >> Așa că hai să facem niște pași spre înțelegerea acest lucru un pic mai bine 924 00:44:17,130 --> 00:44:19,710 mod, să zicem, exemplul următor. 925 00:44:19,710 --> 00:44:23,550 Mă duc să merg mai departe și să pună în aplicare real, rapid un program numit Adder. 926 00:44:23,550 --> 00:44:25,134 Cum ar fi, să adăugăm niște numere împreună. 927 00:44:25,134 --> 00:44:27,800 Și voi să cod unele colțuri aici, și doar să copiați și lipiți 928 00:44:27,800 --> 00:44:30,270 unde am fost înainte, doar astfel încât să putem să plecăm mai devreme. 929 00:44:30,270 --> 00:44:33,090 Așa că acum am începuturi de bază a unui program numit Adder. 930 00:44:33,090 --> 00:44:34,670 >> Și să mergem mai departe și de a face acest lucru. 931 00:44:34,670 --> 00:44:38,680 Mă duc să merg mai departe și să zicem, INTx devine primi int. 932 00:44:38,680 --> 00:44:39,430 Si tu ce știi? 933 00:44:39,430 --> 00:44:40,990 Hai să facem o experiență de utilizare mai bună. 934 00:44:40,990 --> 00:44:45,740 >> Așa că hai să spunem x este, în mod eficient și cere utilizatorului să ne dea de x. 935 00:44:45,740 --> 00:44:50,600 Și apoi lasă-mă să merg mai departe și spun, printf cum despre y este, de data aceasta așteptându 936 00:44:50,600 --> 00:44:53,140 două valori de la utilizator. 937 00:44:53,140 --> 00:44:59,759 Și apoi să mergem mai departe și să zicem, printf, suma lui x și y este. 938 00:44:59,759 --> 00:45:01,300 Și acum nu vreau sa fac la suta s. 939 00:45:01,300 --> 00:45:09,080 Vreau să fac procente i, backslash n, și apoi conectați valoare sumă. 940 00:45:09,080 --> 00:45:10,620 >> Deci, cum pot merge despre a face acest lucru? 941 00:45:10,620 --> 00:45:11,270 Știi ce? 942 00:45:11,270 --> 00:45:12,840 Știu cum să folosească variabile. 943 00:45:12,840 --> 00:45:15,140 Lasă-mă să declare doar unul nou, int z. 944 00:45:15,140 --> 00:45:16,770 >> Și mă duc să iau o presupunere aici. 945 00:45:16,770 --> 00:45:21,470 Dacă există semne egale în această limbă, poate că eu pot face doar x plus y, 946 00:45:21,470 --> 00:45:23,660 atât timp cât am sfârșitul meu gândit cu un semi-colon? 947 00:45:23,660 --> 00:45:28,170 Acum mă pot întoarce aici în jos, conectați z, termina acest gând cu un semi-colon. 948 00:45:28,170 --> 00:45:33,160 Și să vedem acum, în cazul în care acestea Secvențele de x lines-- este de a lua int. 949 00:45:33,160 --> 00:45:34,770 Y este de a lua int. 950 00:45:34,770 --> 00:45:37,980 >> Se adaugă x și y, păstrează valoarea în z-- deci, din nou, amintiți-vă semnul egal 951 00:45:37,980 --> 00:45:38,560 nu este egal. 952 00:45:38,560 --> 00:45:41,100 Este misiune de la dreapta la stânga. 953 00:45:41,100 --> 00:45:45,180 Și să imprime că suma x și y nu este literalmente z, 954 00:45:45,180 --> 00:45:46,830 dar ceea ce este în interiorul lui z. 955 00:45:46,830 --> 00:45:50,090 Așa că hai să facem Adder - frumos, fără greșeli de data asta. 956 00:45:50,090 --> 00:45:53,030 Dot slash Adder, introduceți, x va fi 1. 957 00:45:53,030 --> 00:45:55,380 >> Y va fi 2. 958 00:45:55,380 --> 00:45:58,964 Și suma lui x și y este 3. 959 00:45:58,964 --> 00:46:00,130 Deci asta e tot fin și bun. 960 00:46:00,130 --> 00:46:03,260 >> Așa că v-ar imagina că matematica ar trebui să lucreze într-un program de genul asta. 961 00:46:03,260 --> 00:46:04,040 Dar știi ce? 962 00:46:04,040 --> 00:46:06,904 Este această variabilă, linie 12, chiar necesar? 963 00:46:06,904 --> 00:46:09,820 Nu aveți nevoie pentru a obține în obiceiul de a stoca doar lucruri în variabile 964 00:46:09,820 --> 00:46:10,980 doar pentru că poți. 965 00:46:10,980 --> 00:46:13,550 Și, de fapt, este în general Design considerate proaste 966 00:46:13,550 --> 00:46:18,100 dacă creați o variabilă, numită z, în acest caz, depozitarea ceva în ea, 967 00:46:18,100 --> 00:46:21,390 și apoi imediat folosindu-l, dar niciodată din nou. 968 00:46:21,390 --> 00:46:24,700 De ce să dea ceva un nume cum ar fi z dacă sunteți literalmente 969 00:46:24,700 --> 00:46:26,770 O să folosească lucru doar o singură dată, și așa mai departe 970 00:46:26,770 --> 00:46:29,380 proximal în cazul în care ați creat-o aceasta în primul rând, 971 00:46:29,380 --> 00:46:31,052 atât de aproape, în ceea ce privește liniile de cod? 972 00:46:31,052 --> 00:46:31,760 Deci, tu ce știi? 973 00:46:31,760 --> 00:46:34,480 Se pare că, C este destul de flexibil. 974 00:46:34,480 --> 00:46:36,586 Dacă aș fi de fapt, doresc să plug-in valori aici, 975 00:46:36,586 --> 00:46:38,210 Nu am nevoie să declare o nouă variabilă. 976 00:46:38,210 --> 00:46:41,680 Aș putea doar plug-in x plus y, deoarece C înțelege 977 00:46:41,680 --> 00:46:43,390 aritmetică, și operatorii matematice. 978 00:46:43,390 --> 00:46:47,140 >> Deci, eu pot spune pur și simplu, face acest lucru matematica, x plus y, oricare ar fi aceste valori sunt, 979 00:46:47,140 --> 00:46:50,780 conectați rezultați întreg în acel șir. 980 00:46:50,780 --> 00:46:53,730 Deci, acest lucru ar putea fi, totuși doar o singură linie mai scurtă, 981 00:46:53,730 --> 00:46:58,480 un design mai bun, un program mai bun, pentru că există mai puțin de cod, prin urmare, 982 00:46:58,480 --> 00:46:59,921 mai puțin pentru mine să înțeleg. 983 00:46:59,921 --> 00:47:01,920 Și este, de asemenea, doar mai curat, în măsura în care nu suntem 984 00:47:01,920 --> 00:47:04,620 introducerea de cuvinte noi, noi simboluri, cum ar fi z, 985 00:47:04,620 --> 00:47:07,510 chiar dacă acestea nu fac într-adevăr servesc o mare parte a unui scop. 986 00:47:07,510 --> 00:47:12,890 >> Din nefericire, matematica nu este toate că, uneori, de încredere. 987 00:47:12,890 --> 00:47:15,270 Hai să mergem mai departe și de a face acest lucru. 988 00:47:15,270 --> 00:47:18,200 Mă duc să merg mai departe acum și de a face următoarele. 989 00:47:18,200 --> 00:47:27,650 >> Hai să facem printf, procente i, în plus la sută i, sunt procente i, backslash n. 990 00:47:27,650 --> 00:47:32,240 Si am de gând să fac asta-- XYX plus y. 991 00:47:32,240 --> 00:47:34,821 Așa că am de gând doar să rescrie acest lucru ușor diferit aici. 992 00:47:34,821 --> 00:47:36,320 Lasă-mă să fac o verificare bun-simț rapid. 993 00:47:36,320 --> 00:47:37,986 Din nou, hai să nu ne pripim. 994 00:47:37,986 --> 00:47:41,420 Asigurați-sumator, punct slash sumator. 995 00:47:41,420 --> 00:47:44,950 x este 1, y 2, 1 plus 2 este 3. 996 00:47:44,950 --> 00:47:45,870 Deci asta e bine. 997 00:47:45,870 --> 00:47:49,060 Dar, hai să complice acest lucru acum un pic, și de a crea un nou fișier. 998 00:47:49,060 --> 00:47:53,350 >> Voi suna asta, spune, Ints, plural pentru numere întregi. 999 00:47:53,350 --> 00:47:55,980 Permiteți-mi să încep unde am fost un moment în urmă. 1000 00:47:55,980 --> 00:47:57,770 Dar, acum, să facem alte câteva rânduri. 1001 00:47:57,770 --> 00:48:03,430 Lasă-mă să merg mai departe și fac următoarele, printf, procente i, minus la sută i, 1002 00:48:03,430 --> 00:48:08,959 este la sută i, virgula x, y minus virgula YX. 1003 00:48:08,959 --> 00:48:10,750 Deci, eu fac ușor diferite de matematică acolo. 1004 00:48:10,750 --> 00:48:11,624 Hai să facem încă una. 1005 00:48:11,624 --> 00:48:16,610 Așa că sută la sută de ori i i este la sută i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 Hai sa plug-in x, si y, x și y ori. 1007 00:48:21,430 --> 00:48:24,530 Vom folosi asterisc computerul pentru vremuri. 1008 00:48:24,530 --> 00:48:26,390 >> Tu nu utilizați x. x este un nume de variabilă aici. 1009 00:48:26,390 --> 00:48:28,270 Utilizați steaua pentru multiplicare. 1010 00:48:28,270 --> 00:48:29,020 Hai să facem una. 1011 00:48:29,020 --> 00:48:34,580 Printf la sută I, divizat de procente i, este la sută I, 1012 00:48:34,580 --> 00:48:40,460 n backslash. xy împărțit la y-- astfel încât să utilizați slash înainte în C 1013 00:48:40,460 --> 00:48:41,502 pentru a face divizare. 1014 00:48:41,502 --> 00:48:42,460 Și să facem unul de altul. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Remainder de procente i, divizat de procente i, este la sută i. 1017 00:48:55,240 --> 00:48:59,550 xy-- și acum restul este ceea ce a mai rămas. 1018 00:48:59,550 --> 00:49:02,980 Atunci când încercați divizarea unui denominator într-un numărător, 1019 00:49:02,980 --> 00:49:05,570 cât de mult este lăsat peste asta nu a putut împărți afară? 1020 00:49:05,570 --> 00:49:07,910 >> Deci nu este într-adevăr, în mod necesar, un simbol 1021 00:49:07,910 --> 00:49:09,470 am folosit în școală pentru clasa asta. 1022 00:49:09,470 --> 00:49:13,830 Dar există în C. Puteți spune x modulo y, în cazul în care 1023 00:49:13,830 --> 00:49:18,000 acest semn la sută în acest context-- atunci când ești un risc de confuzie în interior 1024 00:49:18,000 --> 00:49:20,170 dintre ghilimele duble, în interiorul printf, procente 1025 00:49:20,170 --> 00:49:21,830 este utilizat ca specificatorul de format. 1026 00:49:21,830 --> 00:49:25,420 >> Atunci când utilizați procente în afara că într-o expresie matematică, 1027 00:49:25,420 --> 00:49:29,910 este operatorul modulo pentru modulare arithmetic-- pentru scopurile noastre 1028 00:49:29,910 --> 00:49:33,650 aici, înseamnă doar, ceea ce este restul de x împărțit la y? 1029 00:49:33,650 --> 00:49:36,130 Deci x împărțit la y este x y slash. 1030 00:49:36,130 --> 00:49:38,220 Care este restul x împărțit la y? 1031 00:49:38,220 --> 00:49:41,780 Este x y mod, ca un programator ar spune. 1032 00:49:41,780 --> 00:49:48,300 >> Deci, dacă am făcut nici o greșeală aici, lasă-mă mergeți mai departe și să facă Ints, plural, frumos, 1033 00:49:48,300 --> 00:49:50,010 și Ints slash punct. 1034 00:49:50,010 --> 00:49:55,270 Și să mergem mai departe și face, să zicem, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Bine, 1 plus 10 este de 11, cec. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 este negativ 9, verificați. 1037 00:50:01,240 --> 00:50:03,420 >> 1 ori 10 este 10, cec. 1038 00:50:03,420 --> 00:50:07,090 1 împărțit la 10 este-- OK, vom trece peste asta. 1039 00:50:07,090 --> 00:50:09,480 Remainder de 1 împărțit la 10 este 1. 1040 00:50:09,480 --> 00:50:10,680 Este corect. 1041 00:50:10,680 --> 00:50:12,630 Dar există o problemă aici. 1042 00:50:12,630 --> 00:50:15,390 >> Așa că l-am pus meu preda, nu este corect. 1043 00:50:15,390 --> 00:50:16,670 Adică, este aproape de 0. 1044 00:50:16,670 --> 00:50:20,670 1 împărțit la 10, tu știi, dacă suntem tăierea unele colțuri, sigur, este zero. 1045 00:50:20,670 --> 00:50:28,050 Dar ar trebui să fie într-adevăr 1/10, 0,1, sau 0,10, 0,1000, sau așa mai departe. 1046 00:50:28,050 --> 00:50:30,600 >> Aceasta nu ar trebui să fie într-adevăr zero. 1047 00:50:30,600 --> 00:50:35,990 Ei bine, se pare că computerul este făcând literalmente ceea ce am spus. 1048 00:50:35,990 --> 00:50:39,460 Noi facem matematica cum ar fi x împărțit la y. 1049 00:50:39,460 --> 00:50:44,680 Și x și y, pe liniile de cod anterior, sunt numere întregi. 1050 00:50:44,680 --> 00:50:50,440 >> Mai mult decât atât, pe linia 15, suntem spune printf, hei, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 un număr întreg, plug-in-un număr întreg, plug-in-un integer-- specific 1052 00:50:54,230 --> 00:50:57,580 x, y și apoi, și apoi x împărțit la y. x și y sunt Ints. 1053 00:50:57,580 --> 00:50:59,060 Suntem bine acolo. 1054 00:50:59,060 --> 00:51:01,250 >> Dar ceea ce este x împărțit la x? 1055 00:51:01,250 --> 00:51:06,790 x împărțit y ar trebui să fie, matematic, 1/10, sau 0,1, 1056 00:51:06,790 --> 00:51:11,600 care este un număr real, un număr real având, eventual, un punct zecimal. 1057 00:51:11,600 --> 00:51:13,230 Nu e un număr întreg. 1058 00:51:13,230 --> 00:51:18,290 >> Dar ceea ce este cel mai aproape număr întreg de la 1/10, sau 0,1? 1059 00:51:18,290 --> 00:51:21,114 Da, este un fel de este zero. 1060 00:51:21,114 --> 00:51:22,030 0.1 este ca aceasta mult. 1061 00:51:22,030 --> 00:51:22,890 Și 1 este atât de mult. 1062 00:51:22,890 --> 00:51:25,870 Deci 1/10 este mai aproape 0 decât este una. 1063 00:51:25,870 --> 00:51:30,800 >> Și ce C este de a face pentru us-- un fel de pentru că l-am spus sa-- 1064 00:51:30,800 --> 00:51:32,600 este trunchiere acel număr întreg. 1065 00:51:32,600 --> 00:51:40,540 Durează valoarea, care este din nou ar trebui să fie ceva de genul 0.1000, 1066 00:51:40,540 --> 00:51:41,800 0 și așa mai departe. 1067 00:51:41,800 --> 00:51:45,320 Și este totul trunchierea după virgulă 1068 00:51:45,320 --> 00:51:47,510 astfel încât toate acestea lucruri, deoarece nu 1069 00:51:47,510 --> 00:51:51,910 se potrivesc în noțiunea de un număr întreg, care este doar un număr negativ cum ar fi 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 în sus și în jos, se aruncă totul după punctul zecimal deoarece ați 1071 00:51:55,830 --> 00:51:59,020 nu se poate potrivi cu un punct zecimal într-un întreg prin definiție. 1072 00:51:59,020 --> 00:52:01,290 >> Deci, răspunsul aici este zero. 1073 00:52:01,290 --> 00:52:02,600 Deci, cum putem rezolva această problemă? 1074 00:52:02,600 --> 00:52:04,400 Avem nevoie de o altă soluție împreună. 1075 00:52:04,400 --> 00:52:06,880 Și noi putem face acest lucru, după cum urmează. 1076 00:52:06,880 --> 00:52:12,820 >> Lasă-mă să merg mai departe și de a crea un nou fișier, acesta numit floats.c. 1077 00:52:12,820 --> 00:52:16,500 Și salvați-l aici, în același director, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 Și lasă-mă să merg mai departe și să copiați o parte din acest cod de mai devreme. 1080 00:52:23,260 --> 00:52:27,690 >> Dar, în loc de a obține un int, să facem acest lucru. 1081 00:52:27,690 --> 00:52:31,037 Dă-mi o valoare în virgulă mobilă numita x. în cazul în care un punct plutitor 1082 00:52:31,037 --> 00:52:33,370 Valoarea este doar literalmente ceva cu un punct plutitor. 1083 00:52:33,370 --> 00:52:34,410 Se poate deplasa spre stânga, spre dreapta. 1084 00:52:34,410 --> 00:52:35,530 Este un număr real. 1085 00:52:35,530 --> 00:52:38,050 >> Și lasă-mă să nu sun obține int, dar obține float, 1086 00:52:38,050 --> 00:52:41,420 care, de asemenea, a fost printre meniu de opțiuni în biblioteca C250. 1087 00:52:41,420 --> 00:52:43,220 Hai să se schimbe y la un plutitor. 1088 00:52:43,220 --> 00:52:45,000 Deci, acest lucru devine obține float. 1089 00:52:45,000 --> 00:52:47,620 >> Și acum, noi nu vrem să conectați Ints. 1090 00:52:47,620 --> 00:52:53,130 Se pare că avem de a folosi la sută f pentru float, procente f pentru float, 1091 00:52:53,130 --> 00:52:54,560 și acum salvați-l. 1092 00:52:54,560 --> 00:53:01,220 Și acum, degetele încrucișate, face plutește, frumos, plută slash dot. 1093 00:53:01,220 --> 00:53:04,280 x va fi una 1. y Va fi 10 din nou. 1094 00:53:04,280 --> 00:53:08,240 >> Si, frumos, OK plus mea este corectă. 1095 00:53:08,240 --> 00:53:10,240 Am fost în speranța pentru mai mult, dar am uitat să-l scrie. 1096 00:53:10,240 --> 00:53:13,250 Așa că hai să mergem și să stabilească această eroare logică. 1097 00:53:13,250 --> 00:53:16,280 >> Hai să mergem mai departe și apuca următoarele. 1098 00:53:16,280 --> 00:53:18,080 Vom face doar un pic de copiere și lipire. 1099 00:53:18,080 --> 00:53:20,080 Si eu voi spune minus. 1100 00:53:20,080 --> 00:53:21,890 >> Si voi spune ori. 1101 00:53:21,890 --> 00:53:24,060 Si eu voi spune divizat. 1102 00:53:24,060 --> 00:53:28,240 Si eu nu am de gând să fac modulo, care nu este la fel de germaniu aici, 1103 00:53:28,240 --> 00:53:33,690 împărțit la f, și ori plus-- OK, hai să facem asta din nou. 1104 00:53:33,690 --> 00:53:44,210 >> Face plută, plută slash dot, și 1, 10, si-- frumos, nu, OK. 1105 00:53:44,210 --> 00:53:45,250 Așa că sunt un idiot. 1106 00:53:45,250 --> 00:53:47,000 Deci, acest lucru este foarte frecvente în informatică 1107 00:53:47,000 --> 00:53:49,780 pentru a face greșeli stupide de genul asta. 1108 00:53:49,780 --> 00:53:53,100 >> În scopuri pedagogice, ceea ce am vrut să fac 1109 00:53:53,100 --> 00:53:57,410 a fost schimba știința aici la plus, la minus, la ori, 1110 00:53:57,410 --> 00:54:01,140 și să împartă, după cum sperăm a observat în timpul acestui exercițiu. 1111 00:54:01,140 --> 00:54:04,700 Așa că acum să re-compila acest lucru Programul, face flotoare slash dot. 1112 00:54:04,700 --> 00:54:07,950 >> Iar pentru a treia oară, să a se vedea dacă îndeplinește așteptările mele. 1113 00:54:07,950 --> 00:54:21,480 1, 10, introduceți, da, OK, 1.000, împărțit la 10.000, este 0.100000. 1114 00:54:21,480 --> 00:54:24,952 Și se pare că putem controla cât de multe Numerele sunt după acele puncte zecimale. 1115 00:54:24,952 --> 00:54:25,660 Noi de fapt, va fi. 1116 00:54:25,660 --> 00:54:26,790 Vom reveni la asta. 1117 00:54:26,790 --> 00:54:28,440 >> Dar acum, de fapt, matematica este corectă. 1118 00:54:28,440 --> 00:54:30,090 Deci, din nou, ce-i MENIUL aici? 1119 00:54:30,090 --> 00:54:33,050 Se pare că, în C, există nu numai că doar strings-- și, de fapt, 1120 00:54:33,050 --> 00:54:36,120 nu sunt cu adevărat, pentru că noi se adaugă cei cu biblioteca CS50. 1121 00:54:36,120 --> 00:54:37,710 Dar nu sunt doar Ints. 1122 00:54:37,710 --> 00:54:38,990 >> Există, de asemenea, plutește. 1123 00:54:38,990 --> 00:54:42,810 Și se pare că o grămadă de alte date Tipuri de asemenea, că vom folosi înainte de mult timp. 1124 00:54:42,810 --> 00:54:46,270 Se pare că, dacă doriți un singur caracter, nu un șir de caractere, 1125 00:54:46,270 --> 00:54:47,610 puteți folosi doar un char. 1126 00:54:47,610 --> 00:54:52,350 >> Se pare că, dacă doriți un bool, o valoare booleană, numai adevărat sau fals, 1127 00:54:52,350 --> 00:54:56,840 grație bibliotecii CS50, ne-am a adăugat la C tipul de date bool, de asemenea. 1128 00:54:56,840 --> 00:54:59,180 Dar este prezenta, de asemenea, în multe alte limbi. 1129 00:54:59,180 --> 00:55:04,130 Și se pare că, uneori, nevoie de numere mai mari, apoi vin în mod implicit 1130 00:55:04,130 --> 00:55:05,210 cu Ints și plutește. 1131 00:55:05,210 --> 00:55:10,590 >> Și, de fapt, un dublu este un număr care nu utilizează 32 de biți, dar 64 de biți. 1132 00:55:10,590 --> 00:55:14,990 Și un lung lung este un număr care nu utilizează 32 de biți, dar 64 de biți, 1133 00:55:14,990 --> 00:55:19,190 respectiv, pentru virgulă mobilă valori și numere întregi, respectiv. 1134 00:55:19,190 --> 00:55:22,780 Așa că hai de fapt acum a se vedea acest lucru în acțiune. 1135 00:55:22,780 --> 00:55:26,150 >> Mă duc să merg mai departe aici și biciul unul alt program. 1136 00:55:26,150 --> 00:55:32,020 Aici, am de gând să merg mai departe și includ CS50.h. 1137 00:55:32,020 --> 00:55:34,910 Și lasă-mă să plec, includ standardul IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> Și veți observa ceva funky, se întâmplă aici. 1139 00:55:37,320 --> 00:55:40,592 Nu e de culoare de codificare lucruri în în același mod ca și a făcut-o mai înainte. 1140 00:55:40,592 --> 00:55:43,550 Și se pare, asta pentru că eu nu s-au dat lucrul un nume de fișier. 1141 00:55:43,550 --> 00:55:47,270 >> Mă duc să sun asta sizeof.c, și a lovit Salvare. 1142 00:55:47,270 --> 00:55:51,039 Și observați ce se întâmplă cu foarte mea cod alb pe care fundalul negru. 1143 00:55:51,039 --> 00:55:52,830 Acum, cel puțin acolo unele mov acolo. 1144 00:55:52,830 --> 00:55:54,490 Și este sintaxa evidențiată. 1145 00:55:54,490 --> 00:55:57,700 >> Asta pentru că, pur și simplu, am a spus IDE ce tip de fișier 1146 00:55:57,700 --> 00:56:01,060 este dându-i un nume, și în mod specific o extensie de fișier. 1147 00:56:01,060 --> 00:56:03,620 Acum, să mergem mai departe și de a face acest lucru. 1148 00:56:03,620 --> 00:56:08,910 Mă duc să merg mai departe și foarte pur și simplu imprima bool following-- 1149 00:56:08,910 --> 00:56:11,080 este de procente LU. 1150 00:56:11,080 --> 00:56:12,950 >> Vom reveni la că, în doar un moment. 1151 00:56:12,950 --> 00:56:15,840 Și apoi voi Dimensiunea de imprimare de bool. 1152 00:56:15,840 --> 00:56:18,170 Și acum, doar pentru a salva eu ceva timp, eu sunt 1153 00:56:18,170 --> 00:56:20,280 O să facă un întreg grămadă de acestea dintr-o dată. 1154 00:56:20,280 --> 00:56:24,620 Și, în special, voi schimba acest lucru la un char și char. 1155 00:56:24,620 --> 00:56:27,760 Acesta, am de gând să se schimbe la o dublă și o dublă. 1156 00:56:27,760 --> 00:56:31,440 >> Acesta, am de gând să se schimbe la un flotor și un plutitor. 1157 00:56:31,440 --> 00:56:35,670 Acesta, voi schimba la un int si un int. 1158 00:56:35,670 --> 00:56:38,660 Si asta, voi pentru a trece la o lungă lungă. 1159 00:56:38,660 --> 00:56:40,840 Și este încă luați o lungă perioadă de timp, mult timp lung. 1160 00:56:40,840 --> 00:56:44,572 >> Și apoi, în cele din urmă, i-am dat eu una prea multe, șir de caractere. 1161 00:56:44,572 --> 00:56:47,030 Se pare că, în C, există operatorul special numit 1162 00:56:47,030 --> 00:56:50,260 mărimea asta literalmente merge la, atunci când executați, 1163 00:56:50,260 --> 00:56:52,099 spune-ne dimensiunea fiecare dintre aceste variabile. 1164 00:56:52,099 --> 00:56:53,890 Si aceasta este o cale, acum, ne putem conecta înapoi 1165 00:56:53,890 --> 00:56:57,140 la discuția de săptămâna trecută de date și de reprezentare. 1166 00:56:57,140 --> 00:57:00,330 >> Lasă-mă să merg mai departe și compila Dimensiunea de marimea slash punct de. 1167 00:57:00,330 --> 00:57:01,210 Și să vedem. 1168 00:57:01,210 --> 00:57:05,210 Se pare că, în C, în special pe CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 în special pe sistem de operare Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 care este un sistem de operare pe 64 de biți sistem în acest caz, 1171 00:57:11,100 --> 00:57:14,189 o bool va utilizați un octet de spațiu. 1172 00:57:14,189 --> 00:57:16,480 Asta e modul în care se măsoară dimensiunea, nu în biți, dar în octeți. 1173 00:57:16,480 --> 00:57:18,690 Și amintesc că un octet este de opt biți. 1174 00:57:18,690 --> 00:57:22,030 Deci, un bool, chiar dacă punct de vedere tehnic au nevoie doar de 0 sau 1, 1175 00:57:22,030 --> 00:57:24,092 este un pic mai risipitor cum i-am pus în aplicare. 1176 00:57:24,092 --> 00:57:26,800 Este de fapt de gând să folosească un întreg byte-- astfel încât toate zerouri, sunt probabil 1177 00:57:26,800 --> 00:57:31,050 toate cele, sau ceva de genul asta, sau doar un singur 1 între opt biți. 1178 00:57:31,050 --> 00:57:34,962 >> Un char, între timp, folosit pentru un personaj ca un caracter ascii pe saptamana trecuta, 1179 00:57:34,962 --> 00:57:36,170 va fi un singur caracter. 1180 00:57:36,170 --> 00:57:42,340 Și că synchs cu noțiunea noastră de ea fiind nu mai mult de 256 de bits--, mai degrabă, 1181 00:57:42,340 --> 00:57:45,360 synchs cu ea nefiind mai mult de 8 biți, care 1182 00:57:45,360 --> 00:57:47,450 ne dă cât mai multe 256 de valori. 1183 00:57:47,450 --> 00:57:49,680 O dublă va fie de 8 octeți sau 64 de biți. 1184 00:57:49,680 --> 00:57:50,510 >> Un float este de 4. 1185 00:57:50,510 --> 00:57:51,690 Int este 4. 1186 00:57:51,690 --> 00:57:52,980 Un lung, lung este 8. 1187 00:57:52,980 --> 00:57:54,716 Și un șir de caractere este 8. 1188 00:57:54,716 --> 00:57:55,840 Dar nu vă faceți griji despre asta. 1189 00:57:55,840 --> 00:57:57,340 Vom merge să coaja înapoi acel strat. 1190 00:57:57,340 --> 00:57:59,940 Se pare, siruri de caractere poate să fie mai mare de 8 octeți. 1191 00:57:59,940 --> 00:58:02,310 >> Și, într-adevăr, ne-am scris siruri de caractere deja, hello world, 1192 00:58:02,310 --> 00:58:03,700 mai mult de 8 octeți. 1193 00:58:03,700 --> 00:58:06,270 Dar ne vom întoarce la că, în doar un moment. 1194 00:58:06,270 --> 00:58:09,690 Dar aici este ține departe următorul. 1195 00:58:09,690 --> 00:58:15,320 >> Orice computer are doar un finit cantitate de memorie și spațiu. 1196 00:58:15,320 --> 00:58:17,860 Puteți stoca doar atât de multe fișiere de pe Mac sau PC-ul. 1197 00:58:17,860 --> 00:58:23,030 Puteți stoca numai atât de multe programe în RAM care rulează la o dată, în mod necesar, chiar 1198 00:58:23,030 --> 00:58:26,360 cu memorie virtuală, deoarece aveți o cantitate finită de RAM. 1199 00:58:26,360 --> 00:58:28,990 >> Și doar pentru picture-- dacă n-ai deschis un laptop 1200 00:58:28,990 --> 00:58:31,300 sau comandate de memorie suplimentară pentru un computer, 1201 00:58:31,300 --> 00:58:33,670 s-ar putea să nu știu că în interiorul computerului 1202 00:58:33,670 --> 00:58:36,590 este ceva care arată un pic ca asta. 1203 00:58:36,590 --> 00:58:40,540 Deci, aceasta este doar o companie comună numită Crucial care face RAM pentru calculatoare. 1204 00:58:40,540 --> 00:58:43,620 Și RAM este în cazul în care programele trăiesc în timp ce acestea sunt difuzate. 1205 00:58:43,620 --> 00:58:46,630 >> Deci, pe fiecare Mac sau PC-ul, atunci când dublu faceți clic pe un program, și se deschide, 1206 00:58:46,630 --> 00:58:48,921 și deschide unele document Word sau asa ceva, 1207 00:58:48,921 --> 00:58:51,764 îl stochează temporar în RAM, deoarece memoria RAM este mai rapid 1208 00:58:51,764 --> 00:58:53,680 decât hard disk, sau discul în stare solidă. 1209 00:58:53,680 --> 00:58:56,600 Deci, e doar în cazul în care programele de du-te să trăiască când rulează, 1210 00:58:56,600 --> 00:58:58,060 sau atunci când sunt utilizate fișiere. 1211 00:58:58,060 --> 00:59:00,890 >> Deci, tu ai lucruri care arata cum ar fi acest lucru în interiorul laptop-ul, 1212 00:59:00,890 --> 00:59:03,320 sau lucruri ușor mai mari în interiorul desktop-ul tau. 1213 00:59:03,320 --> 00:59:07,440 Dar cheia este aveți doar o număr finit de aceste lucruri. 1214 00:59:07,440 --> 00:59:11,230 Și nu există decât o cantitate finită de hardware-ul așezat pe acest birou drept 1215 00:59:11,230 --> 00:59:11,730 aici. 1216 00:59:11,730 --> 00:59:15,920 >> Așa că, cu siguranță, nu putem stoca numere infinit lungi. 1217 00:59:15,920 --> 00:59:19,030 Și totuși, dacă te gândești înapoi la școală de grad, cât de multe cifre pot 1218 00:59:19,030 --> 00:59:21,400 aveți la dreapta dintr-un punct zecimal? 1219 00:59:21,400 --> 00:59:24,680 Pentru asta contează, cât de multe cifre pot trebuie la stânga unui punct zecimal? 1220 00:59:24,680 --> 00:59:26,300 Într-adevăr, infinit de multe. 1221 00:59:26,300 --> 00:59:30,840 >> Acum, noi oamenii doar s-ar putea Știi cum se pronunță milioane, 1222 00:59:30,840 --> 00:59:34,990 și miliarde, trilioane, și catrilion și quintillion. 1223 00:59:34,990 --> 00:59:39,370 Și mă împinge limitele mele understanding-- sau my-- am înțeles 1224 00:59:39,370 --> 00:59:41,110 numere, dar mea pronunția numerelor. 1225 00:59:41,110 --> 00:59:44,720 Dar ei pot obține infinit de mare, cu infinit mai multe cifre la stânga 1226 00:59:44,720 --> 00:59:47,050 sau la dreapta unui punct zecimal. 1227 00:59:47,050 --> 00:59:50,040 >> Dar, calculatoarele au doar o cantitate finită de memorie, 1228 00:59:50,040 --> 00:59:53,510 un număr finit de tranzistori, un număr finit de becuri din interior. 1229 00:59:53,510 --> 00:59:57,350 Ce se întâmplă atunci când tu a alerga afară de spațiu? 1230 00:59:57,350 --> 00:59:59,620 Cu alte cuvinte, dacă cred că înapoi la săptămâna trecută 1231 00:59:59,620 --> 01:00:03,160 când am vorbit despre numere ele însele fiind reprezentate în binar, 1232 01:00:03,160 --> 01:00:05,480 să presupunem că avem această valoare pe 8 biți aici. 1233 01:00:05,480 --> 01:00:08,290 >> Și avem șapte 1 și unul 0. 1234 01:00:08,290 --> 01:00:10,827 Și să presupunem că vrem pentru a adăuga 1 la această valoare. 1235 01:00:10,827 --> 01:00:12,410 Acesta este un număr foarte mare, chiar acum. 1236 01:00:12,410 --> 01:00:16,610 >> Acest lucru este 254, dacă îmi amintesc matematica din ultima săptămână dreapta. 1237 01:00:16,610 --> 01:00:19,480 Dar, ce se întâmplă dacă am schimba că extrema dreaptă 0 la 1? 1238 01:00:19,480 --> 01:00:22,800 Numărul întreg, de Desigur, devine opt 1 lui. 1239 01:00:22,800 --> 01:00:24,050 Deci, suntem încă bine. 1240 01:00:24,050 --> 01:00:27,204 >> Și aceasta reprezintă, probabil, 255, deși în funcție de context 1241 01:00:27,204 --> 01:00:29,120 ar putea reprezenta de fapt un număr negativ. 1242 01:00:29,120 --> 01:00:31,240 Dar mai mult pe altă dată. 1243 01:00:31,240 --> 01:00:34,220 Acest lucru se simte ca este vorba despre la fel de mare ca eu pot conta. 1244 01:00:34,220 --> 01:00:35,290 >> Acum, este doar 8 biți. 1245 01:00:35,290 --> 01:00:38,170 Și, Mac-ul meu, cu siguranță, are modul mai mult de 8 biți de memorie. 1246 01:00:38,170 --> 01:00:39,170 Dar are finit. 1247 01:00:39,170 --> 01:00:43,230 Prin urmare, același argument se aplică, chiar dacă am au mai multe dintre acestea pe ecran. 1248 01:00:43,230 --> 01:00:47,020 >> Dar ce se întâmplă dacă sunteți stocarea acestui număr, 255, 1249 01:00:47,020 --> 01:00:49,290 și doriți să conta un pic mai mare? 1250 01:00:49,290 --> 01:00:51,600 Vrei să mergi 255-256. 1251 01:00:51,600 --> 01:00:55,800 Problema, desigur, este că, dacă începe numărarea de la zero, cum ar fi săptămâna trecută, 1252 01:00:55,800 --> 01:00:59,670 nu poate conta la fel de mare ca 256, să nu mai vorbim 257, 1253 01:00:59,670 --> 01:01:02,584 să nu mai vorbim 258, m pentru că ceea ce se întâmplă atunci când adăugați un 1? 1254 01:01:02,584 --> 01:01:05,000 Dacă veți face școala clasa veche abordare, ai pus-o aici 1, 1255 01:01:05,000 --> 01:01:08,150 și apoi 1 plus 1 este 2, dar asta într-adevăr un zero, ai transporta 1, 1256 01:01:08,150 --> 01:01:09,695 transporta 1, transporta 1. 1257 01:01:09,695 --> 01:01:12,620 Toate aceste lucruri, aceste lui 1, du-te la zero. 1258 01:01:12,620 --> 01:01:17,820 Si ajungi, da, ca cineva a subliniat, un 1 de pe partea stanga. 1259 01:01:17,820 --> 01:01:22,540 Dar, tot ce poți de fapt, a se vedea și se potrivesc în memorie 1260 01:01:22,540 --> 01:01:27,960 este doar opt 0, care este de a spune la un moment dat, dacă tu, un calculator, 1261 01:01:27,960 --> 01:01:32,490 a încercat de numărare destul de mare în sus, tu ești O să-și încheie în jurul valorii, s-ar părea, 1262 01:01:32,490 --> 01:01:35,850 la zero, sau poate chiar negativ numere, care sunt chiar mai mici decât zero. 1263 01:01:35,850 --> 01:01:37,260 >> Si putem vedea un fel de acest lucru. 1264 01:01:37,260 --> 01:01:39,900 Lasă-mă să merg mai departe și scrie un adevărat program de rapid aici. 1265 01:01:39,900 --> 01:01:43,690 Lasă-mă să merg mai departe și scrie un program numit overflow. 1266 01:01:43,690 --> 01:01:49,980 Includ CS50.h, includ standardul IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Chiar am ratat meu sintaxa.Valorile. 1268 01:01:51,730 --> 01:01:54,440 Deci să salvăm acest lucru ca overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> Și acum int void-- principal și înainte de mult timp, ne vom 1270 01:01:57,084 --> 01:01:59,500 vin înapoi pentru a explica de ce vom păstra scris void main int. 1271 01:01:59,500 --> 01:02:02,080 Dar pentru acum, hai să facem ea, luând-l pentru a acordat. 1272 01:02:02,080 --> 01:02:06,200 Hai să mă dau un int, și inițializarea la 0. 1273 01:02:06,200 --> 01:02:11,716 >> Hai să facem atunci pentru int I a lua zero-- de fapt, să facem o buclă infinită 1274 01:02:11,716 --> 01:02:12,590 și să vedem ce se întâmplă. 1275 01:02:12,590 --> 01:02:22,440 În timp ce este adevărat, atunci să imprimați n este la sută i, backslash n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Dar, acum, să facem n plus 1 devine n. 1277 01:02:27,200 --> 01:02:29,660 >> Cu alte cuvinte, pe fiecare iterație a acestei bucle infinite, 1278 01:02:29,660 --> 01:02:32,550 Să luăm o valoare a lui n, și se adaugă 1 la ea, și apoi 1279 01:02:32,550 --> 01:02:34,350 stoca rezultatul înapoi în n pe partea stângă. 1280 01:02:34,350 --> 01:02:37,150 Și, de fapt, am văzut sintaxa ușor ca aceasta, pe scurt. 1281 01:02:37,150 --> 01:02:39,730 Un truc rece este în schimb de a scrie toate acestea afară, 1282 01:02:39,730 --> 01:02:42,770 poti spune de fapt un n plus este egal cu 1. 1283 01:02:42,770 --> 01:02:47,480 >> Sau, dacă într-adevăr doriți să fie fantezie, puteți spune n plus, plus, semi-colon. 1284 01:02:47,480 --> 01:02:50,130 Dar, acestea din urmă două sunt doar ceea ce am numi zahăr sintactic 1285 01:02:50,130 --> 01:02:50,790 pentru primul lucru. 1286 01:02:50,790 --> 01:02:53,456 >> Primul lucru este mai explicit, total bine, total corect. 1287 01:02:53,456 --> 01:02:55,470 Dar acest lucru este mai frecvent, voi spune. 1288 01:02:55,470 --> 01:02:57,210 Deci, vom face acest lucru pentru un moment. 1289 01:02:57,210 --> 01:03:01,685 >> Să ne face acum preaplin, care sună mai degrabă de rău augur, preaplin slash punct. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Hai să vedem, n Devine destul de mare. 1292 01:03:09,852 --> 01:03:11,310 Dar să ne gândim, cât de mare se poate obține n? 1293 01:03:11,310 --> 01:03:12,870 >> n este un întreg. 1294 01:03:12,870 --> 01:03:16,400 Am văzut un moment în urmă cu dimensiunea de exemplu, că un int este de patru octeți. 1295 01:03:16,400 --> 01:03:22,070 Știm din săptămâna trecută, patru octeți este 32 de biți, pentru că de 8 ori 4, e 32. 1296 01:03:22,070 --> 01:03:23,460 Asta va fi de 4 miliarde. 1297 01:03:23,460 --> 01:03:25,802 >> Și noi suntem de până la 800.000. 1298 01:03:25,802 --> 01:03:28,510 Acest lucru va dura pentru totdeauna la conta la fel de mare ca mine, eventual, pot. 1299 01:03:28,510 --> 01:03:30,635 Așa că am de gând să merg mai departe, așa cum s-ar putea înainte de mult timp, 1300 01:03:30,635 --> 01:03:34,910 și a lovit de control sincer C--, control C, o mulțime, în cazul în care controlul C, în general, 1301 01:03:34,910 --> 01:03:36,034 înseamnă a anula. 1302 01:03:36,034 --> 01:03:38,200 Din păcate, deoarece aceasta se execută în nor, 1303 01:03:38,200 --> 01:03:41,190 uneori, norul este scuipă lucruri atât de mult, 1304 01:03:41,190 --> 01:03:44,180 atât de mult de ieșire, va să ia un pic în timp ce pentru intrarea mea 1305 01:03:44,180 --> 01:03:45,630 pentru a ajunge la nor. 1306 01:03:45,630 --> 01:03:49,240 Deci, chiar dacă am lovit Controlul C acum câteva secunde, 1307 01:03:49,240 --> 01:03:53,110 acest lucru este cu siguranță partea efectul unei bucle infinite. 1308 01:03:53,110 --> 01:03:56,070 >> Și astfel, în astfel de cazuri, suntem O să părăsească fie. 1309 01:03:56,070 --> 01:03:59,050 Și, vom adăuga un alt fereastră de terminal aici 1310 01:03:59,050 --> 01:04:03,186 cu plus, care, desigur, nu cum ar fi că, din moment ce încă mai gândesc. 1311 01:04:03,186 --> 01:04:05,310 Și să mergem mai departe și să fie un pic mai rezonabil. 1312 01:04:05,310 --> 01:04:07,768 >> Mă duc să merg mai departe și de a face acest lucru numai de multe ori. un număr finit 1313 01:04:07,768 --> 01:04:10,047 Să folosim o buclă, pe care am făcut aluzie la mai devreme. 1314 01:04:10,047 --> 01:04:10,630 Sa o facem. 1315 01:04:10,630 --> 01:04:13,430 Dă-mi un alt int variabila i devine 0. 1316 01:04:13,430 --> 01:04:17,430 i este mai mică decât, să zicem, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 Și acum lasă-mă să merg mai departe și de imprimare out n este sută i, virgulă n. 1318 01:04:24,010 --> 01:04:27,547 Și apoi acest lucru este încă N- va dura pentru totdeauna. 1319 01:04:27,547 --> 01:04:28,130 Sa o facem. 1320 01:04:28,130 --> 01:04:30,620 >> n devine de n ori 2. 1321 01:04:30,620 --> 01:04:34,140 Sau am putea fi fantezie și de a face ori egal cu 2. 1322 01:04:34,140 --> 01:04:37,120 Dar, să zicem n este egal cu sine, ori 2. 1323 01:04:37,120 --> 01:04:39,321 Cu alte cuvinte, în această Noua versiune a programului, 1324 01:04:39,321 --> 01:04:41,820 Nu vreau să aștepte pentru totdeauna de la cum ar fi 800.000 până la 4 miliarde. 1325 01:04:41,820 --> 01:04:43,070 Să luăm doar terminăm cu asta. 1326 01:04:43,070 --> 01:04:44,920 >> Jocul va fi lăsat de fapt dublu n fiecare dată. 1327 01:04:44,920 --> 01:04:47,660 Ceea ce, amintesc, dublarea este cea vizavi de a avea, desigur. 1328 01:04:47,660 --> 01:04:50,035 Și, în timp ce săptămâna trecută avem ceva nou, și din nou, 1329 01:04:50,035 --> 01:04:52,200 și din nou, super rapid, dublarea siguranță va 1330 01:04:52,200 --> 01:04:58,080 du-ne de la 1 la cel mai mare posibil Valoarea pe care putem conta la cu un int. 1331 01:04:58,080 --> 01:04:59,750 >> Așa că hai să facem exact acest lucru. 1332 01:04:59,750 --> 01:05:01,720 Si vom reveni la acest lucru înainte de mult timp. 1333 01:05:01,720 --> 01:05:04,180 Dar acest lucru, din nou, este la fel ca blocul se repetă în Scratch. 1334 01:05:04,180 --> 01:05:05,600 Și veți utiliza acest lucru înainte de mult timp. 1335 01:05:05,600 --> 01:05:10,170 >> Acest lucru înseamnă că doar numărul de la zero până la, dar nu este egal, la 64. 1336 01:05:10,170 --> 01:05:14,285 Iar pe fiecare iterație a acestui buclă, continuați să incrementare i. 1337 01:05:14,285 --> 01:05:18,990 Asa ca i ++ - și acest construct general, pe linia 7 este doar o modalitate extrem de comună 1338 01:05:18,990 --> 01:05:22,290 repetarea unor linii de cod, unele mai multe ori. 1339 01:05:22,290 --> 01:05:23,362 Care linii de cod? 1340 01:05:23,362 --> 01:05:25,570 Aceste acolade, ca tine pot fi spicuite de acum, 1341 01:05:25,570 --> 01:05:26,780 înseamnă, efectuați următoarele. 1342 01:05:26,780 --> 01:05:29,510 >> Este în Scratch cum ar fi, atunci când are blocurile galbene 1343 01:05:29,510 --> 01:05:32,680 și alte culori, acest tip de îmbrățișa sau îmbrățișare alte blocuri. 1344 01:05:32,680 --> 01:05:34,750 Asta e ceea ce creț acele bretele sunt aici. 1345 01:05:34,750 --> 01:05:40,200 Așa că, dacă am sintaxa mea tine right-- se poate vedea simbolul morcov înseamnă C 1346 01:05:40,200 --> 01:05:42,706 asta de câte ori am fost încercând să rezolve această problemă. 1347 01:05:42,706 --> 01:05:45,330 Așa că haideți să scapi de unul cu totul, și închideți fereastra aia. 1348 01:05:45,330 --> 01:05:46,520 Iar noi vom folosi cea nouă. 1349 01:05:46,520 --> 01:05:51,980 Asigurați-vă de preaplin, slash dot preaplin, Enter, bine, 1350 01:05:51,980 --> 01:05:53,090 Se pare rău la început. 1351 01:05:53,090 --> 01:05:56,200 Dar, să derulați înapoi în timp, pentru că am făcut acest lucru de 64 de ori. 1352 01:05:56,200 --> 01:05:58,700 >> Și observați prima dată, n este 1. 1353 01:05:58,700 --> 01:06:03,110 A doua oara, n este 2, apoi 4, apoi 8, apoi 16. 1354 01:06:03,110 --> 01:06:09,450 Și se pare că, de îndată ce Am ajunge la aproximativ 1 miliard, 1355 01:06:09,450 --> 01:06:12,800 dacă am dubla din nou, că ar trebui să-mi dea 2 miliarde. 1356 01:06:12,800 --> 01:06:14,980 Dar, se pare, este chiar pe punctul de inflexiune. 1357 01:06:14,980 --> 01:06:18,930 >> Și așa se revarsă de fapt un int de la 1 miliard 1358 01:06:18,930 --> 01:06:23,514 la aproximativ 2 negativ miliarde de euro, pentru că un număr întreg, 1359 01:06:23,514 --> 01:06:25,430 spre deosebire de statisticile pe care le au fost presupunând săptămâna trecută, 1360 01:06:25,430 --> 01:06:28,397 poate fi atât pozitive, cât și negative în realitate, și într-un calculator. 1361 01:06:28,397 --> 01:06:30,730 Așa că cel puțin unul dintre cei biți este furat în mod eficient. 1362 01:06:30,730 --> 01:06:34,190 Așa că avem într-adevăr avem doar 31 de biți, sau 2 miliarde de valori posibile. 1363 01:06:34,190 --> 01:06:38,220 >> Dar, pentru moment, takeaway este destul de pur și simplu, oricare ar fi aceste numere sunt 1364 01:06:38,220 --> 01:06:42,280 și indiferent de matematica este, ceva rău se întâmplă în cele din urmă, 1365 01:06:42,280 --> 01:06:46,980 pentru că în cele din urmă pe care încercați să permuta biții de prea multe ori. 1366 01:06:46,980 --> 01:06:51,060 Iar tu du-te în mod eficient de toate 1 lui poate la toate 0 lui, sau poate 1367 01:06:51,060 --> 01:06:54,260 doar un alt model pe care-l în mod clar, în funcție de context, 1368 01:06:54,260 --> 01:06:56,342 poate fi interpretată ca un număr negativ. 1369 01:06:56,342 --> 01:06:59,300 Și așa s-ar părea cel mai înalt I poate conta în acest program special 1370 01:06:59,300 --> 01:07:01,210 este doar aproximativ 1 miliard. 1371 01:07:01,210 --> 01:07:02,760 Dar există o soluție parțială aici. 1372 01:07:02,760 --> 01:07:03,480 Știi ce? 1373 01:07:03,480 --> 01:07:07,600 >> Lasă-mă să se schimbe dintr-un int la o lungă lungă. 1374 01:07:07,600 --> 01:07:10,633 Și lasă-mă să merg mai departe aici și say-- voi avea 1375 01:07:10,633 --> 01:07:12,290 pentru a schimba acest lucru într-o lungă fără semn. 1376 01:07:12,290 --> 01:07:16,860 Sau, hai să vedem, eu nu mi amintesc. 1377 01:07:16,860 --> 01:07:19,920 >> Să mergem mai departe și să facă preaplin. 1378 01:07:19,920 --> 01:07:21,860 Nu, nu-i asta, LLD, vă mulțumesc. 1379 01:07:21,860 --> 01:07:23,430 Așa că, uneori, zăngănit poate fi de ajutor. 1380 01:07:23,430 --> 01:07:27,550 Nu-mi amintesc ce formatul Specificator a fost pentru o lungă lungă. 1381 01:07:27,550 --> 01:07:28,950 >> Dar, într-adevăr, zăngănit mi-a spus. 1382 01:07:28,950 --> 01:07:31,570 Verde este un fel de bun, încă înseamnă că a făcut o greșeală. 1383 01:07:31,570 --> 01:07:33,190 Se ghicitul că am vrut să spun LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Așa că lasă-mă să-l sfat, o lungă număr zecimal lung, cu excepția asta. 1385 01:07:38,750 --> 01:07:43,190 Și să-l rulați din nou, punct slash preaplin, Enter. 1386 01:07:43,190 --> 01:07:45,020 Și acum, ce e cool e asta. 1387 01:07:45,020 --> 01:07:49,140 >> În cazul în care defilează înapoi în timp, încă începe să numărând în același place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Observați, vom obține toate mod de până la 1 miliard. 1390 01:07:54,860 --> 01:07:57,070 Dar, atunci vom ajunge în siguranță la 2 miliarde. 1391 01:07:57,070 --> 01:08:01,300 >> Apoi vom ajunge la 4 miliarde de euro, apoi 8 miliarde de euro, 17 miliarde. 1392 01:08:01,300 --> 01:08:03,340 Si vom merge mai mari, și din ce in ce mai sus. 1393 01:08:03,340 --> 01:08:05,740 În cele din urmă, acest lucru, de asemenea, pauze. 1394 01:08:05,740 --> 01:08:09,350 >> În cele din urmă, cu o lungă lungă, care este valoarea de 64 de biți, nu 1395 01:08:09,350 --> 01:08:13,660 o valoare de 32 de biți, dacă numărul prea mare, în jurul valorii de 0 înfășurați. 1396 01:08:13,660 --> 01:08:16,410 Și, în acest caz, se întâmplă să se încheie cu un număr negativ. 1397 01:08:16,410 --> 01:08:17,550 >> Deci, aceasta este o problemă. 1398 01:08:17,550 --> 01:08:20,439 Și se pare că acest lucru problema nu este tot ceea ce arcane. 1399 01:08:20,439 --> 01:08:23,060 Chiar dacă am intenționat induse cu aceste greșeli, 1400 01:08:23,060 --> 01:08:26,149 se pare că vom vedea un fel de toate în jurul nostru, sau cel puțin unii dintre noi. 1401 01:08:26,149 --> 01:08:28,939 >> Deci, în Lego Star Wars, dacă v-ați jucat vreodată jocul, 1402 01:08:28,939 --> 01:08:33,830 se pare că vă puteți merge în jurul valorii de rupere lucrurile în lumea LEGO, 1403 01:08:33,830 --> 01:08:36,640 și monede de colectare, în esență. 1404 01:08:36,640 --> 01:08:39,200 Și, dacă v-ați jucat vreodată acest joc prea mult timp, 1405 01:08:39,200 --> 01:08:42,630 ca acest individ fără nume aici a făcut, numărul total 1406 01:08:42,630 --> 01:08:46,700 de monede pe care le pot colecta este, s-ar părea, 4 miliarde. 1407 01:08:46,700 --> 01:08:48,240 >> Acum, cu ea e de fapt rotunjit. 1408 01:08:48,240 --> 01:08:50,239 Așa că LEGO a încercat să să păstreze lucrurile ușor de utilizat. 1409 01:08:50,239 --> 01:08:53,779 Ei nu a făcut-o exact 2 32 putere, pe saptamana trecuta. 1410 01:08:53,779 --> 01:08:55,310 Dar, 4 miliarde de euro este un motiv. 1411 01:08:55,310 --> 01:08:58,979 Se pare că, pe baza acestor informații, că LEGO, și compania care 1412 01:08:58,979 --> 01:09:02,624 a făcut acest software-ul real, a decis că numărul maxim de monede 1413 01:09:02,624 --> 01:09:04,540 utilizatorul poate acumula este, într-adevăr, 4 miliarde de euro, 1414 01:09:04,540 --> 01:09:12,069 pentru că ei au ales în codul lor de a utiliza nu un lung lung, aparent, 1415 01:09:12,069 --> 01:09:16,140 ci doar un număr întreg, un nesemnat număr întreg, doar un număr întreg pozitiv, al cărui 1416 01:09:16,140 --> 01:09:18,089 Valoarea maximă este de aproximativ asta. 1417 01:09:18,089 --> 01:09:19,380 Ei bine, aici e încă una amuzantă. 1418 01:09:19,380 --> 01:09:23,500 Deci, în civilizația de joc, care unii dintre voi s-ar putea să fie familiarizat, cu 1419 01:09:23,500 --> 01:09:26,660 se pare că acum câțiva ani acolo a fost un bug în acest joc, prin care 1420 01:09:26,660 --> 01:09:28,750 dacă ai jucat rolul Gandhi în joc, 1421 01:09:28,750 --> 01:09:34,020 în loc să-i fie foarte pacifistă, în schimb a fost incredibil, incredibil 1422 01:09:34,020 --> 01:09:36,399 agresiv, în anumite circumstanțe. 1423 01:09:36,399 --> 01:09:40,529 În special, modul în care Civilization fapte este că, dacă, player-ul, 1424 01:09:40,529 --> 01:09:44,680 să adopte democrația, dvs scor agresivitate devine 1425 01:09:44,680 --> 01:09:48,130 decrementat cu doi, deci minus minus, iar apoi minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Deci ai scade 2 din recapitularea-ul real. 1427 01:09:50,569 --> 01:09:56,650 Din păcate, în cazul în care recapitularea este inițial 1, și se scade 2 din ea 1428 01:09:56,650 --> 01:09:59,050 după adoptarea democrației ca Gandhi aici s-ar putea 1429 01:09:59,050 --> 01:10:02,200 s-au făcut, pentru că el a fost foarte passive-- 1 pe scara de agresivitate. 1430 01:10:02,200 --> 01:10:04,830 Dar, dacă el adoptă democrația, atunci el merge de la 1 la 1 negativ. 1431 01:10:04,830 --> 01:10:11,470 >> Din nefericire, ei erau folosind numere fără semn, 1432 01:10:11,470 --> 01:10:15,400 ceea ce înseamnă că au tratat chiar negative Numerele ca și cum acestea au fost pozitive. 1433 01:10:15,400 --> 01:10:19,780 Și se pare că echivalentul pozitiv al negativ 1, 1434 01:10:19,780 --> 01:10:23,480 în programe de calculator tipic, este de 255. 1435 01:10:23,480 --> 01:10:27,250 Așa că, dacă Gandhi adoptă Și, prin urmare, democrația are 1436 01:10:27,250 --> 01:10:32,470 scorul său agresivitate a scăzut, este de fapt sub formă de rulouri în jurul valorii de 255 1437 01:10:32,470 --> 01:10:35,470 și-l face cel mai mult caracterul agresiv în joc. 1438 01:10:35,470 --> 01:10:36,930 Astfel încât să puteți Google pe acest lucru. 1439 01:10:36,930 --> 01:10:39,380 Și a fost, într-adevăr, o bug de programare accidentale, 1440 01:10:39,380 --> 01:10:43,010 dar care a intrat destul de lore de atunci. 1441 01:10:43,010 --> 01:10:44,360 >> Asta e tot distracție și drăguț. 1442 01:10:44,360 --> 01:10:47,760 Mai înfricoșător este atunci când real Dispozitivele din lumea reală, și nu jocuri, 1443 01:10:47,760 --> 01:10:48,820 au aceleași aceste bug-uri. 1444 01:10:48,820 --> 01:10:54,500 De fapt, doar un an în urmă un articol a venit despre Dreamliner Boeing 787. 1445 01:10:54,500 --> 01:10:56,850 >> Iar articolul la început scurt citește un pic arcane. 1446 01:10:56,850 --> 01:11:01,480 Dar a spus acest lucru, un software vulnerabilitate Boeing 1447 01:11:01,480 --> 01:11:04,790 Noul 787 are jet potențialul de a provoca piloților 1448 01:11:04,790 --> 01:11:07,220 să-și piardă controlul aeronava, eventual 1449 01:11:07,220 --> 01:11:11,750 în mijlocul zborului, oficialii FAA linii aeriene. avertizat recent 1450 01:11:11,750 --> 01:11:14,520 A fost determinarea că un model 787 1451 01:11:14,520 --> 01:11:19,770 avion care a fost alimentat în mod continuu timp de 248 de zile 1452 01:11:19,770 --> 01:11:24,880 poate pierde toate curent alternativ, AC, energie electrică datorită generatorului 1453 01:11:24,880 --> 01:11:28,892 unități de control, GCUs, simultan a intra în modul de siguranță eșuează. 1454 01:11:28,892 --> 01:11:29,850 E un fel de a pierde mine. 1455 01:11:29,850 --> 01:11:35,390 Dar, memo a declarat, OK, acum am înțeles, conditie a fost cauzată de un software 1456 01:11:35,390 --> 01:11:38,590 contracara internă controlul generatorului 1457 01:11:38,590 --> 01:11:44,860 unități care vor fi inundate după 248 de zile de curent continuu. 1458 01:11:44,860 --> 01:11:47,070 Publicam aceste observați pentru a preveni pierderea 1459 01:11:47,070 --> 01:11:49,300 tuturor AC electrice putere, ceea ce ar putea avea ca rezultat 1460 01:11:49,300 --> 01:11:50,980 în pierderea controlului asupra avionului. 1461 01:11:50,980 --> 01:11:55,380 >> Așa că, literalmente, există unele număr întreg, sau un anumit tip de date echivalente, 1462 01:11:55,380 --> 01:11:57,960 fiind utilizate în software într-un avion real 1463 01:11:57,960 --> 01:12:00,756 că, dacă vă păstrați avionul pe suficient de mult timp, care aparent 1464 01:12:00,756 --> 01:12:03,880 poate fi cazul dacă sunteți doar rulează le deconectezi în mod constant și niciodată 1465 01:12:03,880 --> 01:12:06,810 avionul, se pare, sau lăsând bateriile să moară, 1466 01:12:06,810 --> 01:12:09,840 va conta în cele din urmă în sus și în sus, și în sus, și în sus, și în sus și în sus. 1467 01:12:09,840 --> 01:12:12,150 >> Și, prin natura sa, o cantitate finită de memorie 1468 01:12:12,150 --> 01:12:15,880 se va revărsa, rulare înapoi la zero, sau o anumită valoare negativă, 1469 01:12:15,880 --> 01:12:19,920 un efect secundar al cărui este realitatea reală înfricoșător 1470 01:12:19,920 --> 01:12:23,970 că avionul ar putea avea nevoie să fie reinițializat, în mod eficient, 1471 01:12:23,970 --> 01:12:27,290 sau s-ar putea cădea, mai rău, așa cum zboară. 1472 01:12:27,290 --> 01:12:29,230 Deci, aceste tipuri de probleme sunt încă cu noi, 1473 01:12:29,230 --> 01:12:33,130 even-- aceasta a fost un articol în 2015, tot mai înfricoșător 1474 01:12:33,130 --> 01:12:36,100 atunci când nu neapărat să înțeleagă, aprecia, sau anticipa 1475 01:12:36,100 --> 01:12:38,640 aceste tipuri de erori. 1476 01:12:38,640 --> 01:12:42,030 >> Deci, se pare că există un alt lucru rău despre reprezentarea datelor. 1477 01:12:42,030 --> 01:12:47,080 Se pare că, chiar și flotoare sunt un fel de defecte, pentru că plutește, de asemenea, 1478 01:12:47,080 --> 01:12:51,440 Am propus sunt 32 de biți, sau poate, 64 dacă utilizați un dublu. 1479 01:12:51,440 --> 01:12:53,070 Dar asta e încă finit. 1480 01:12:53,070 --> 01:12:57,070 >> Și captura este că, dacă poți a pus un număr infinit de numere 1481 01:12:57,070 --> 01:12:59,460 după punctul zecimal, nu există nici o cale de 1482 01:12:59,460 --> 01:13:02,690 poate reprezenta tot posibilul Numerele pe care am fost învățați 1483 01:13:02,690 --> 01:13:04,990 în clasa școală poate exista în lume. 1484 01:13:04,990 --> 01:13:08,870 Un computer, în esență, trebuie să pentru a alege un subset al acestor numere 1485 01:13:08,870 --> 01:13:10,200 pentru a reprezenta cu exactitate. 1486 01:13:10,200 --> 01:13:12,450 >> Acum, computerul poate a rundă poate un pic, 1487 01:13:12,450 --> 01:13:17,900 și vă puteți permite aproximativ magazin orice număr pe care s-ar putea dori, eventual. 1488 01:13:17,900 --> 01:13:20,940 Dar, pur și simplu intuitiv, dacă tu au un număr finit de biți, 1489 01:13:20,940 --> 01:13:24,560 puteți să le permuta numai în atât de multe feluri finite. 1490 01:13:24,560 --> 01:13:26,570 Deci, tu nu poți, eventual, utilizați un număr finit 1491 01:13:26,570 --> 01:13:29,880 de permutare de biți, modele de zero-uri și altele, 1492 01:13:29,880 --> 01:13:32,940 pentru a reprezenta un infinit numărul de numere, 1493 01:13:32,940 --> 01:13:37,370 ceea ce sugerează că computerele ar putea foarte bine să ne mint uneori. 1494 01:13:37,370 --> 01:13:38,770 >> De fapt, hai să facem acest lucru. 1495 01:13:38,770 --> 01:13:41,239 Lasă-mă să mă întorc în IDE CS50. 1496 01:13:41,239 --> 01:13:43,030 Lasă-mă să merg mai departe și a crea un mic program 1497 01:13:43,030 --> 01:13:47,940 numita Imprecizia, pentru a arăta că calculatoarele sunt, într-adevăr, imprecis. 1498 01:13:47,940 --> 01:13:51,910 >> Și lasă-mă să merg mai departe și să înceapă cu o parte din acest cod de mai înainte, 1499 01:13:51,910 --> 01:13:53,830 iar acum face doar următoarele. 1500 01:13:53,830 --> 01:14:03,640 Lasă-mă să merg mai departe și fac printf, procente f, backslash n, 1 împărțit la 10. 1501 01:14:03,640 --> 01:14:07,430 Cu alte cuvinte, să se scufunde mai adanc la 1/10, cum ar fi 1 și împărțit la 10. 1502 01:14:07,430 --> 01:14:09,760 Cu siguranță, un calculator poate reprezenta 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Așa că hai să mergem mai departe și să facă imprecizie. 1504 01:14:13,620 --> 01:14:14,390 Sa vedem. 1505 01:14:14,390 --> 01:14:16,210 Formatul specifică de tip dublu. 1506 01:14:16,210 --> 01:14:18,160 Dar argumentul are tip int. 1507 01:14:18,160 --> 01:14:19,040 Ce se întâmplă? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, interesant, așa că este o Lecții învățate din mai înainte. 1509 01:14:21,970 --> 01:14:26,050 Spun că, hei, spectacol de calculator mi un flotor cu procente f. 1510 01:14:26,050 --> 01:14:28,200 Dar eu voi da-l 2 Ints. 1511 01:14:28,200 --> 01:14:31,120 Deci, se pare, eu pot repara acest lucru în câteva moduri. 1512 01:14:31,120 --> 01:14:38,430 >> Aș putea transforma doar unul în 1.0 și 10 în 10,0, ceea ce ar fi, într-adevăr, 1513 01:14:38,430 --> 01:14:42,390 au ca efect transformarea le în floats-- încă sperăm 1514 01:14:42,390 --> 01:14:43,180 același număr. 1515 01:14:43,180 --> 01:14:45,880 Sau se pare că e ceva vom vedea din nou înainte de mult timp. 1516 01:14:45,880 --> 01:14:47,170 Ai putea arunca numerele. 1517 01:14:47,170 --> 01:14:49,880 >> , Aveți posibilitatea să utilizați acest parentetic expresie, se poate spune, 1518 01:14:49,880 --> 01:14:52,560 hei, calculator, să ia acest lucru 10, pe care știu că este un int. 1519 01:14:52,560 --> 01:14:54,660 Dar, trata, te rog, ca și cum este un plutitor. 1520 01:14:54,660 --> 01:14:56,680 Dar acest lucru se simte inutil de complex. 1521 01:14:56,680 --> 01:14:59,040 >> Pentru scopurile noastre de astăzi, hai doar literalmente 1522 01:14:59,040 --> 01:15:02,700 Fă-i plutitoare valori punctuale cu un punct zecimal, cum ar fi acest lucru. 1523 01:15:02,700 --> 01:15:07,060 Lasă-mă să merg mai departe și să rulați din nou, face imprecizie, bun, slash dot 1524 01:15:07,060 --> 01:15:08,870 imprecizie, introduceți. 1525 01:15:08,870 --> 01:15:10,990 OK, ne arata bine. 1526 01:15:10,990 --> 01:15:18,194 >> 1 împărțit la 10, potrivit mea Mac aici, este, într-adevăr, 0.100000. 1527 01:15:18,194 --> 01:15:21,360 Acum, am fost învățat în școală clasa acolo ar trebui să fie un număr infinit de 0 lui. 1528 01:15:21,360 --> 01:15:23,151 Așa că hai să încercăm cel puțin pentru a vedea unele dintre acestea. 1529 01:15:23,151 --> 01:15:26,770 Se pare că printf este un pic încă mai arătoasă decât ne-am folosit. 1530 01:15:26,770 --> 01:15:30,890 Se pare ca nu trebuie să specificați doar la suta f, sau pur și simplu la sută i. 1531 01:15:30,890 --> 01:15:33,830 Puteți specifica, de fapt, unele opțiuni de control aici. 1532 01:15:33,830 --> 01:15:36,470 >> Mai exact, voi să spun, hei, printf, 1533 01:15:36,470 --> 01:15:39,660 de fapt, arată-mi 10 puncte zecimale. 1534 01:15:39,660 --> 01:15:40,820 Deci, se pare un pic ciudat. 1535 01:15:40,820 --> 01:15:42,845 Dar tu spui la sută, dot, cât de multe numere 1536 01:15:42,845 --> 01:15:44,970 doriți să vedeți după ce punctul zecimal, și apoi f 1537 01:15:44,970 --> 01:15:48,340 pentru plat, doar pentru că asta e ceea ce spune documentația. 1538 01:15:48,340 --> 01:15:50,080 Lasă-mă să merg mai departe și de a salva asta. 1539 01:15:50,080 --> 01:15:52,460 >> Și observați prea, eu sunt obtinerea obosit de lucruri le rescrie. 1540 01:15:52,460 --> 01:15:55,900 Deci, eu sunt doar setarea sus și săgeată în jos pe cheile mele aici. 1541 01:15:55,900 --> 01:15:58,710 Și, dacă mă lovesc mereu în sus, tu pot vedea toate comenzile 1542 01:15:58,710 --> 01:16:01,090 că am făcut, sau a făcut în mod incorect. 1543 01:16:01,090 --> 01:16:04,630 >> Si voi merge mai departe acum și nu folosesc de fapt că, aparent. 1544 01:16:04,630 --> 01:16:11,416 Asigurați-imprecizie, punct slash imprecision-- asa 1545 01:16:11,416 --> 01:16:13,290 ceea ce am fost învățat în școală clasa verifică. 1546 01:16:13,290 --> 01:16:19,010 Chiar dacă am imprima până la 10 zecimale plasează, într-adevăr, este 0.10000. 1547 01:16:19,010 --> 01:16:19,840 Dar știi ce? 1548 01:16:19,840 --> 01:16:21,150 >> Hai să luăm un pic lacom. 1549 01:16:21,150 --> 01:16:23,990 Hai să zicem, cum ar fi, arată-mi 55 puncte după zecimal. 1550 01:16:23,990 --> 01:16:26,160 Hai să luăm într-adevăr acest lucru programeze o tură. 1551 01:16:26,160 --> 01:16:31,170 Lasă-mă să-l remake-ul cu marca imprecizie, slash punct, imprecizie. 1552 01:16:31,170 --> 01:16:32,390 >> Si aici vom merge. 1553 01:16:32,390 --> 01:16:34,420 copilăria ta a fost o minciună. 1554 01:16:34,420 --> 01:16:48,410 Aparent, 1 împărțit la 10 este într-adevăr, 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Ce se întâmplă? 1556 01:16:49,740 --> 01:16:53,360 Ei bine, se pare că, în cazul în care un fel de uite destul de departe în activul suport 1557 01:16:53,360 --> 01:16:55,950 Reprezentarea acestei număr, de fapt, 1558 01:16:55,950 --> 01:17:00,400 nu este exact 1/10, sau 0,1 și un număr infinit de zerouri. 1559 01:17:00,400 --> 01:17:01,630 Acum, de ce e asta? 1560 01:17:01,630 --> 01:17:06,250 >> Ei bine, chiar dacă acest lucru este un simplu număr pentru noi, oamenii, 1 împărțit la 10, 1561 01:17:06,250 --> 01:17:10,910 este încă una infinit mai multe Numerele pe care ne-am putea gândi în sus. 1562 01:17:10,910 --> 01:17:14,490 Dar un calculator poate reprezenta numai multe numere, astfel un număr finit. 1563 01:17:14,490 --> 01:17:18,710 Și astfel, în mod eficient, ceea ce calculator ne arată este cel mai apropiat ei 1564 01:17:18,710 --> 01:17:22,940 aproximație la numărul vrem să credem este 1/10, 1565 01:17:22,940 --> 01:17:27,760 sau într-adevăr 0.10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Mai degrabă, însă, acest lucru este cât mai aproape se poate obține. 1567 01:17:30,425 --> 01:17:32,300 Și, într-adevăr, dacă te uiți sub capota, 1568 01:17:32,300 --> 01:17:37,050 așa cum suntem aici prin căutarea 55 cifre după zecimal, 1569 01:17:37,050 --> 01:17:39,990 vom vedea de fapt, acea realitate. 1570 01:17:39,990 --> 01:17:42,610 Acum, ca o parte, dacă ai văzut vreodată movie-- 1571 01:17:42,610 --> 01:17:45,780 cele mai multe dintre voi, probabil, haven't-- dar acum Superman 3 câțiva ani, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor efectul de levier, în esență, această realitate în compania sa pentru a fura o mulțime 1573 01:17:49,500 --> 01:17:53,500 din fracțiuni și fracțiuni de mărunțiș, deoarece company-- după cum îmi amintesc, 1574 01:17:53,500 --> 01:17:57,210 a fost o while-- a fost în esență a aruncat departe ceva care nu se potrivea 1575 01:17:57,210 --> 01:17:58,790 în noțiunea de cenți. 1576 01:17:58,790 --> 01:18:01,480 >> Dar, dacă adăugați toate cuvintele acestea ,, numere mici, mici, mici, din nou, 1577 01:18:01,480 --> 01:18:04,960 și din nou, și din nou, aveți posibilitatea, ca în cazul său, face o sumă bună de bani. 1578 01:18:04,960 --> 01:18:08,010 >> Aceeași idee a fost furat de o mai recent, dar încă acum mai în vârstă 1579 01:18:08,010 --> 01:18:10,500 film, numit Office Space, în cazul în care cei din acel film, 1580 01:18:10,500 --> 01:18:13,501 a făcut același lucru, înșurubată-l complet, sa încheiat cu prea mult 1581 01:18:13,501 --> 01:18:14,666 bani în contul lor bancar. 1582 01:18:14,666 --> 01:18:15,800 A fost foarte suspicios. 1583 01:18:15,800 --> 01:18:19,290 Dar, la sfârșitul zilei, imprecizie este tot în jurul nostru. 1584 01:18:19,290 --> 01:18:22,240 >> Și asta, de asemenea, poate fi frighteningly cazul. 1585 01:18:22,240 --> 01:18:25,590 Se pare că, Superman 3 și Office Space deoparte, acolo 1586 01:18:25,590 --> 01:18:28,460 pot fi unele foarte reale ramificații mondiale 1587 01:18:28,460 --> 01:18:32,290 a realităților imprecise Reprezentarea datelor 1588 01:18:32,290 --> 01:18:34,770 că, chiar și noi, oamenii, la această zi, nu neapărat 1589 01:18:34,770 --> 01:18:38,230 să înțeleagă la fel de bine cum ar trebui, sau amintiți-vă la fel de des cum ar trebui. 1590 01:18:38,230 --> 01:18:42,950 Și, într-adevăr, următorul clip este dintr-o privire la o lume foarte reală 1591 01:18:42,950 --> 01:18:47,730 ramificații de ceea ce se întâmplă dacă nu apreciază că imprecizia 1592 01:18:47,730 --> 01:18:50,065 se poate întâmpla în reprezentarea numerelor. 1593 01:18:50,065 --> 01:18:51,300 >> [REDARE VIDEO] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Toți am ajuns să accepte problemele de multe ori frustrant 1595 01:18:55,620 --> 01:19:00,310 du-te cu them-- bug-uri, viruși, și defectele software, 1596 01:19:00,310 --> 01:19:03,130 pentru prețuri mici la plata cheltuielilor pentru comoditatea. 1597 01:19:03,130 --> 01:19:07,800 Dar, în high tech și de mare viteză aplicatii de program spațial militar și, 1598 01:19:07,800 --> 01:19:12,800 cea mai mică problemă poate să fie mărite în caz de dezastre. 1599 01:19:12,800 --> 01:19:18,900 >> În data de 4 iunie 1996, oamenii de știință pregătite pentru a lansa un fără pilot Ariane 5 rachete. 1600 01:19:18,900 --> 01:19:21,220 Acesta a fost realizarea științifică sateliți concepute 1601 01:19:21,220 --> 01:19:24,600 pentru a stabili precis modul în care interacționează câmpul magnetic al Pământului 1602 01:19:24,600 --> 01:19:27,410 cu vânturi solare. 1603 01:19:27,410 --> 01:19:30,800 Racheta a fost construit pentru Agenția Spațială Europeană, 1604 01:19:30,800 --> 01:19:34,370 și a ridicat off de la facilitatea de pe coasta Guyanei Franceze. 1605 01:19:34,370 --> 01:19:37,540 >> -la Aproximativ 37 de secunde de la zborul, ei mai întâi 1606 01:19:37,540 --> 01:19:39,270 ceva ce a observat a fost merge bine. 1607 01:19:39,270 --> 01:19:42,250 Duzele au fost pivotarea în un mod în care într-adevăr nu ar trebui. 1608 01:19:42,250 --> 01:19:46,580 În jur de 40 de secunde în zbor, în mod clar, vehiculul era în pericol. 1609 01:19:46,580 --> 01:19:48,850 >> Și atunci au făcut o decizie să-l distrugă. 1610 01:19:48,850 --> 01:19:52,780 Agentul de siguranță gama, cu curaj extraordinar, apăsat butonul, 1611 01:19:52,780 --> 01:19:58,150 a explodat racheta, înainte de a putea deveni un pericol pentru siguranța publică. 1612 01:19:58,150 --> 01:20:01,060 >> -acest A fost de fată călătorie a Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 Și distrugerea ei a luat loc din cauza unui defect 1614 01:20:03,960 --> 01:20:05,822 încorporate în software-ul rachetei. 1615 01:20:05,822 --> 01:20:08,280 -ORAȘUL Problema pe Ariane a fost că a existat un număr care 1616 01:20:08,280 --> 01:20:10,600 necesară 64 de biți pentru a exprima. 1617 01:20:10,600 --> 01:20:13,590 Și au vrut să convertească l la un număr de 16 biți. 1618 01:20:13,590 --> 01:20:15,610 Ei au presupus că Numărul nu a fost niciodată de gând 1619 01:20:15,610 --> 01:20:20,980 să fie foarte mare, că majoritatea celor cifre într-un număr de 64 de biți au fost zerouri. 1620 01:20:20,980 --> 01:20:22,440 S-au înșelat. 1621 01:20:22,440 --> 01:20:25,060 >> -ORAȘUL Incapacitatea unuia program software pentru a accepta 1622 01:20:25,060 --> 01:20:29,510 tipul de număr generat de altul a fost la originea eșecului. 1623 01:20:29,510 --> 01:20:34,350 Dezvoltarea de software a devenit un o parte foarte costisitoare de noi tehnologii. 1624 01:20:34,350 --> 01:20:38,140 Racheta Ariane au fost foarte de succes, atât de mult a software-ului 1625 01:20:38,140 --> 01:20:41,550 creat pentru ea a fost, de asemenea, utilizat în Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -ORAȘUL Problemă de bază a fost că Ariane 5 a fost mai rapid, accelerat mai repede. 1627 01:20:47,940 --> 01:20:51,450 Și software-ul nu a avut a reprezentat pentru asta. 1628 01:20:51,450 --> 01:20:55,060 >> -ORAȘUL Distrugerea rachetei a fost un dezastru financiar imens, 1629 01:20:55,060 --> 01:20:58,790 toate din cauza unei erori de software minut. 1630 01:20:58,790 --> 01:21:01,210 Dar acest lucru nu a fost primul timp probleme de conversie a datelor 1631 01:21:01,210 --> 01:21:04,820 a afectat tehnologia modernă de rachete. 1632 01:21:04,820 --> 01:21:08,050 >> -În 1991, odată cu începutul din primul război din Golf, 1633 01:21:08,050 --> 01:21:10,570 Patriot Missile experimentat un fel asemănător 1634 01:21:10,570 --> 01:21:12,800 de problema numărul de conversie. 1635 01:21:12,800 --> 01:21:16,090 Și, ca urmare, 28 de persoane, 28 de soldați americani, 1636 01:21:16,090 --> 01:21:19,080 au fost uciși, și despre altele 100 răniți, 1637 01:21:19,080 --> 01:21:22,780 când Patriot, care trebuia pentru a proteja împotriva scuds de intrare, 1638 01:21:22,780 --> 01:21:25,830 nu a reușit să foc o rachetă. 1639 01:21:25,830 --> 01:21:31,670 >> -Când Irakul a invadat Kuweitul, și America a lansat Desert Storm, la începutul anului 1991, 1640 01:21:31,670 --> 01:21:35,780 Baterii Patriot pentru rachete au fost dislocate pentru a proteja Arabia Saudită și Israel 1641 01:21:35,780 --> 01:21:39,230 de la atacurile irakiene cu rachete Scud. 1642 01:21:39,230 --> 01:21:43,810 Patriot este un mediu-range din SUA suprafața de sistem de aer, fabricat 1643 01:21:43,810 --> 01:21:45,770 de către compania Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -ORAȘUL Dimensiunea separatorului Patriot în sine este de aproximativ 20 de picioare lungi de aproximativ. 1645 01:21:52,340 --> 01:21:55,230 Si cantareste aproximativ 2.000 de lire sterline. 1646 01:21:55,230 --> 01:21:59,320 Si transporta un focos de aproximativ, Cred că e cam 150 de lire. 1647 01:21:59,320 --> 01:22:03,930 Iar focosul în sine este un exploziv de mare, care 1648 01:22:03,930 --> 01:22:07,330 are fragmente în jurul ei. 1649 01:22:07,330 --> 01:22:11,680 Carcasa este focosul proiectat să acționeze ca alice mari. 1650 01:22:11,680 --> 01:22:14,110 >> -ORAȘUL Rachete sunt transportate patru per container, 1651 01:22:14,110 --> 01:22:17,130 și sunt transportate printr-o semi-remorcă. 1652 01:22:17,130 --> 01:22:24,930 >> -Sistemul Patriot anti-rachetă merge înapoi cel puțin 20 de ani. 1653 01:22:24,930 --> 01:22:28,420 Acesta a fost proiectat inițial ca o rachetă de apărare aeriană 1654 01:22:28,420 --> 01:22:30,720 pentru a trage în jos avioane inamice. 1655 01:22:30,720 --> 01:22:34,500 În primul război din Golf, când acel război a venit de-a lungul, 1656 01:22:34,500 --> 01:22:39,745 Armata a vrut să-l folosească pentru a trage în jos scuds, nu avioane. 1657 01:22:39,745 --> 01:22:43,620 >> Irakian Air Force a fost nu atât de mult de o problemă. 1658 01:22:43,620 --> 01:22:46,670 Dar armata era îngrijorat cu privire la scuds. 1659 01:22:46,670 --> 01:22:50,170 Așa că au încercat să upgrade-Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Un inamic rachetă călătoresc la Mach 5 1661 01:22:52,800 --> 01:22:55,830 a fost de gând să fie suficient de provocatoare. 1662 01:22:55,830 --> 01:22:58,490 Dar când Patriot a fost grăbit în serviciu, 1663 01:22:58,490 --> 01:23:02,860 Armata nu a fost conștient de modificarea irakiene care a făcut 1664 01:23:02,860 --> 01:23:05,930 scuds lor aproape imposibil de a lovi. 1665 01:23:05,930 --> 01:23:10,740 >> -Ce Sa întâmplat este că scuds au venit au fost instabile. 1666 01:23:10,740 --> 01:23:11,692 Ei au fost clatina. 1667 01:23:11,692 --> 01:23:14,910 Motivul pentru aceasta a fost irakieni, în ordine 1668 01:23:14,910 --> 01:23:18,280 pentru a obține 600 de kilometri dintr-un kilometru 300 1669 01:23:18,280 --> 01:23:21,700 gama de rachete, a luat în greutate din focosul din față. 1670 01:23:21,700 --> 01:23:23,390 Ei au făcut focos brichetă. 1671 01:23:23,390 --> 01:23:27,330 >> Deci, acum Patriot este încercând să vină la Scud. 1672 01:23:27,330 --> 01:23:30,230 Și cele mai multe din timp, majoritatea covârșitoare a timpului, 1673 01:23:30,230 --> 01:23:32,940 ar acoperi doar de către Scud. 1674 01:23:32,940 --> 01:23:37,260 Odată ce operatorii de sisteme Patriot a realizat Patriot ratat ținta, 1675 01:23:37,260 --> 01:23:41,690 au detonat focos Patrioților pentru a evita posibilele accidente dacă aceasta 1676 01:23:41,690 --> 01:23:44,570 s-a lăsat să cadă la pământ. 1677 01:23:44,570 --> 01:23:48,790 >> Asta a fost ceea ce a văzut cei mai mulți oameni, aceste mingi de foc mari pe cer, 1678 01:23:48,790 --> 01:23:54,550 și înțeleasă greșit ca interceptări ale focoase Scud. 1679 01:23:54,550 --> 01:23:56,630 >> -Deși În noapte Cer, Patriots a apărut 1680 01:23:56,630 --> 01:24:00,370 pentru a fi cu succes distrugerea Scuds, la Dhahran, 1681 01:24:00,370 --> 01:24:03,360 ar putea exista nici o greșeală despre performanțele sale. 1682 01:24:03,360 --> 01:24:07,970 Acolo, sistem radar Patrioților pierdut urma unui Scud de intrare, 1683 01:24:07,970 --> 01:24:10,721 și niciodată nu a lansat din cauza la un defect de software. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 A fost mai întâi israelienii care au descoperit că mai lung sistemul a fost pornit, 1686 01:24:18,940 --> 01:24:22,690 cu atât mai mare diferența de timp a devenit, datorită unui ceas încorporat 1687 01:24:22,690 --> 01:24:24,810 în calculatorul sistemului. 1688 01:24:24,810 --> 01:24:28,210 >> -aproximativ Cu două săptămâni înainte de tragedia din Dhahran, 1689 01:24:28,210 --> 01:24:30,770 israelienii au raportat la Departamentul de Apărare 1690 01:24:30,770 --> 01:24:32,590 că sistemul a fost pierde timp. 1691 01:24:32,590 --> 01:24:35,360 După aproximativ opt ore sau de rulare, au observat că sistemul 1692 01:24:35,360 --> 01:24:37,720 a devenit considerabil mai puțin precise. 1693 01:24:37,720 --> 01:24:41,900 Departamentul de Apărare a răspuns prin spune tuturor bateriilor Patriot 1694 01:24:41,900 --> 01:24:44,950 să nu părăsească sistemele pe o perioadă lungă de timp. 1695 01:24:44,950 --> 01:24:49,160 Ei nu au spus ce o lungă perioadă de timp asta-- opt ore, 10 ore, 1.000 de ore. 1696 01:24:49,160 --> 01:24:51,360 Nimeni nu știa. 1697 01:24:51,360 --> 01:24:53,380 >> -ORAȘUL Acumulator Patriot staționate la cazarmă 1698 01:24:53,380 --> 01:24:58,350 la Dhahran și interne sale eronate ceas a fost pe mai mult de 100 de ore 1699 01:24:58,350 --> 01:25:01,670 în noaptea de 25 februarie. 1700 01:25:01,670 --> 01:25:05,917 >> -se Urmarite timp cu o precizie de aproximativ o zecime de secundă. 1701 01:25:05,917 --> 01:25:08,000 Acum, o zecime de secundă este un număr interesant, 1702 01:25:08,000 --> 01:25:11,920 deoarece nu poate fi exprimat în binar exact, care 1703 01:25:11,920 --> 01:25:16,820 înseamnă că nu poate fi exprimată exact în orice calculator digital modern. 1704 01:25:16,820 --> 01:25:18,540 E greu de crezut. 1705 01:25:18,540 --> 01:25:21,210 >> Dar, utilizați acest lucru ca un exemplu. 1706 01:25:21,210 --> 01:25:23,540 Să luăm treilea numărul unu. 1707 01:25:23,540 --> 01:25:27,350 O treime nu poate fi exprimată în zecimal exact. 1708 01:25:27,350 --> 01:25:32,080 O treime este 0.333 se întâmplă pentru infinit. 1709 01:25:32,080 --> 01:25:36,480 >> Nu există nici o modalitate de a face acest lucru cu precizia absolută în zecimal. 1710 01:25:36,480 --> 01:25:39,560 Asta e exact genul de problemă care sa întâmplat în Patriot. 1711 01:25:39,560 --> 01:25:44,100 Cu cât sistemul a fugit, mai rău eroarea de timp a devenit. 1712 01:25:44,100 --> 01:25:48,890 >> -după 100 de ore de funcționare, eroare în timp a fost doar aproximativ o treime 1713 01:25:48,890 --> 01:25:50,600 dintr-o secundă. 1714 01:25:50,600 --> 01:25:54,210 Dar, în ceea ce privește direcționarea în funcție de o rachetă călătoresc la Mach 5, 1715 01:25:54,210 --> 01:25:58,710 a rezultat într-o urmărire eroare de peste 600 de metri. 1716 01:25:58,710 --> 01:26:02,120 Ar fi o eroare fatală pentru soldații cu privire la ce 1717 01:26:02,120 --> 01:26:08,940 sa întâmplat este o lansare a fost Scud detectate de sateliți de avertizare timpurie 1718 01:26:08,940 --> 01:26:12,860 și ei știau că era Scud venind în direcția lor generală. 1719 01:26:12,860 --> 01:26:15,320 Ei nu au știut unde vine. 1720 01:26:15,320 --> 01:26:18,250 >> -A Fost acum la radar componentă a sistemului Patriot 1721 01:26:18,250 --> 01:26:23,190 apărarea Dhahran pentru a localiza și menține urmări rachete inamice primite. 1722 01:26:23,190 --> 01:26:24,609 >> -ORAȘUL Radar a fost foarte inteligent. 1723 01:26:24,609 --> 01:26:26,650 S-ar urmări de fapt poziția Scud, 1724 01:26:26,650 --> 01:26:30,350 și apoi prezice unde, probabil, ar fi data viitoare când radarul trimis 1725 01:26:30,350 --> 01:26:31,420 un puls afară. 1726 01:26:31,420 --> 01:26:33,110 Acest lucru a fost numit o poartă interval. 1727 01:26:33,110 --> 01:26:37,660 >> -Apoi, O dată pe Patriot decide suficient timp are 1728 01:26:37,660 --> 01:26:42,450 a trecut pentru a merge înapoi și să verificați următorul locație pentru acest obiect detectat, 1729 01:26:42,450 --> 01:26:43,600 merge înapoi. 1730 01:26:43,600 --> 01:26:48,650 Deci, atunci când s-au întors la greșit loc, se vede atunci nici un obiect. 1731 01:26:48,650 --> 01:26:52,160 Și se decide că nu a existat nici o obiect, a fost o detectare falsă, 1732 01:26:52,160 --> 01:26:53,930 și picături pista. 1733 01:26:53,930 --> 01:26:57,030 >> -ORAȘUL De intrare Scud a dispărut de pe ecranul radar. 1734 01:26:57,030 --> 01:27:00,260 Si secunde mai târziu, ea trântit în barăci. 1735 01:27:00,260 --> 01:27:06,150 Scud a ucis 28, și a fost ultimul unul a tras în timpul primului război din Golf. 1736 01:27:06,150 --> 01:27:11,960 >> Tragic, software-ul actualizat a sosit la Dhahran în ziua următoare. 1737 01:27:11,960 --> 01:27:14,930 Scaparea de software a avut fost fixat, de închidere 1738 01:27:14,930 --> 01:27:19,806 un capitol în tulbure Istoria rachetelor Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [REDARE VIDEO] 1740 01:27:20,729 --> 01:27:23,520 David J. MALAN: Deci asta este tot la spun că aceste probleme de depășire 1741 01:27:23,520 --> 01:27:25,860 și imprecizia sunt prea reale. 1742 01:27:25,860 --> 01:27:26,920 Deci, cum am ajuns aici? 1743 01:27:26,920 --> 01:27:28,895 Am început cu doar vorbim despre printf. 1744 01:27:28,895 --> 01:27:31,270 Din nou, această funcție care imprimă ceva pe ecran, 1745 01:27:31,270 --> 01:27:33,450 și am introdus ulterior alte câteva funcții 1746 01:27:33,450 --> 01:27:34,945 din așa-numita biblioteca CS50 lui. 1747 01:27:34,945 --> 01:27:36,910 Și vom continua să a se vedea acestea în timp util. 1748 01:27:36,910 --> 01:27:40,760 Iar noi, în special, folosit șir get, și de a lua int, iar acum primi, de asemenea, float, 1749 01:27:40,760 --> 01:27:44,410 și totuși alții încă mai vor vom întâlni și ne folosesc înainte de mult timp. 1750 01:27:44,410 --> 01:27:47,220 >> Dar, uneori, au am văzut deja o necesitate 1751 01:27:47,220 --> 01:27:50,520 pentru a stoca ce mână acele funcții înapoi? 1752 01:27:50,520 --> 01:27:52,920 Ne-au întors un șir de mână, sau un int sau float. 1753 01:27:52,920 --> 01:27:56,070 Și, uneori, trebuie să punem asta string, sau int sau float, undeva. 1754 01:27:56,070 --> 01:28:00,100 >> Și pentru a stoca aceste lucruri, amintesc doar cum ar fi în Scratch, avem variabile. 1755 01:28:00,100 --> 01:28:03,260 Dar, spre deosebire de zero, în C avem tipuri reale 1756 01:28:03,260 --> 01:28:05,530 de date variables-- tipuri, mai multe generally-- 1757 01:28:05,530 --> 01:28:08,640 printre ei, un șir de caractere, un int, un float, iar aceste încă altele. 1758 01:28:08,640 --> 01:28:12,321 >> Așa că atunci când vom declara variabile în C, va trebui să declare tipurile noastre de date. 1759 01:28:12,321 --> 01:28:14,820 Acest lucru nu este ceva ce vom trebuie să facă mai târziu în semestrul 1760 01:28:14,820 --> 01:28:16,810 așa cum tranziția spre alte limbi. 1761 01:28:16,810 --> 01:28:19,610 Dar, pentru moment, avem nevoie pentru a priori în avans, 1762 01:28:19,610 --> 01:28:24,370 explica la calculator ce tip variable vrem să ne dea. 1763 01:28:24,370 --> 01:28:27,290 >> Acum, între timp, pentru a imprima aceste tipuri de tipuri de date, 1764 01:28:27,290 --> 01:28:29,570 trebuie să spunem printf ce să se aștepte. 1765 01:28:29,570 --> 01:28:32,450 Si am vazut la suta pentru siruri de caractere, și i la sută pentru numere întregi, 1766 01:28:32,450 --> 01:28:33,790 și alte câteva deja. 1767 01:28:33,790 --> 01:28:37,237 Iar acestea sunt pur și simplu cerințe pentru prezentarea vizuală 1768 01:28:37,237 --> 01:28:38,070 din aceste informații. 1769 01:28:38,070 --> 01:28:42,080 >> Și fiecare dintre acestea pot fi de fapt parametrizat sau optimizat într-un fel, 1770 01:28:42,080 --> 01:28:45,370 dacă doriți să continue controlul tipul de ieșire pe care le obține. 1771 01:28:45,370 --> 01:28:49,604 Și, de fapt, se pare că nu numai este acolo backslash n pentru o nouă linie. 1772 01:28:49,604 --> 01:28:52,520 Mai e ceva numit backslash r pentru un retur de car, care 1773 01:28:52,520 --> 01:28:54,360 este mai asemănător cu un mașină de scris școală veche, 1774 01:28:54,360 --> 01:28:57,690 și, de asemenea, pentru Windows utilizate de mai mulți ani. 1775 01:28:57,690 --> 01:28:59,690 >> Nu e t backslash pentru file. 1776 01:28:59,690 --> 01:29:03,170 Se pare că, că, dacă doriți să dublu citat în interiorul unui șir de caractere, 1777 01:29:03,170 --> 01:29:05,000 amintesc că am utilizat dublu citat dublu 1778 01:29:05,000 --> 01:29:07,900 citat din stânga și din dreapta capetele corzilor noastre până acum. 1779 01:29:07,900 --> 01:29:09,420 Asta ar părea să confunde lucrurile. 1780 01:29:09,420 --> 01:29:12,503 >> În cazul în care doriți să puneți un citat dublu mijlocul unui string-- și, într-adevăr, 1781 01:29:12,503 --> 01:29:13,670 este confuz pentru a vedea. 1782 01:29:13,670 --> 01:29:17,120 Și așa va trebui să scape, astfel încât să vorbesc, un citat dublu cu ceva 1783 01:29:17,120 --> 01:29:18,860 cum ar fi, literalmente, backslash-ul dublu citat. 1784 01:29:18,860 --> 01:29:20,230 Și, există alte câteva încă. 1785 01:29:20,230 --> 01:29:24,540 Si vom vedea mai multe dintre în utilizarea reală înainte de mult timp. 1786 01:29:24,540 --> 01:29:27,930 >> Așa că hai acum tranziția de la date, și reprezentare, 1787 01:29:27,930 --> 01:29:30,820 și operatori matematici, toate din care ne-a dat niște clădiri 1788 01:29:30,820 --> 01:29:32,070 blocuri cu care să se joace. 1789 01:29:32,070 --> 01:29:34,481 Dar acum, hai de fapt, da ne restul vocabularului 1790 01:29:34,481 --> 01:29:36,230 că am avut deja săptămâna trecută cu Scratch 1791 01:29:36,230 --> 01:29:39,350 de a lua o privire la alte constructe în C-- nu toate dintre ele. 1792 01:29:39,350 --> 01:29:41,680 Dar ideile pe care le suntem pe cale de a se vedea într-adevăr doar 1793 01:29:41,680 --> 01:29:45,610 pentru a sublinia traducerea din o singură limbă, Scratch, la alta, C. 1794 01:29:45,610 --> 01:29:48,470 >> Și-a lungul timpului, vom ridica mai multe instrumente pentru ajutorul setului de instrumente, 1795 01:29:48,470 --> 01:29:49,820 ca să spunem așa, sintactic. 1796 01:29:49,820 --> 01:29:54,190 Și într-adevăr, veți vedea că ideile sunt acum destul de familiare de săptămâna trecută. 1797 01:29:54,190 --> 01:29:55,200 Așa că hai să facem acest lucru. 1798 01:29:55,200 --> 01:29:58,870 >> Hai să mergem mai departe și biciul un program de care folosește de fapt, unele expresii, 1799 01:29:58,870 --> 01:30:00,720 o expresie booleană. 1800 01:30:00,720 --> 01:30:02,810 Lasă-mă să plec mai departe aici și de a crea un nou fișier. 1801 01:30:02,810 --> 01:30:06,090 O să sun acest condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Lasă-mă să merg mai departe și includ biblioteca CS50. 1803 01:30:09,350 --> 01:30:12,640 Și lasă-mă să merg mai departe și să includă standardul IO.h pentru funcțiile noastre, 1804 01:30:12,640 --> 01:30:14,690 și printf, și mai mult, respectiv. 1805 01:30:14,690 --> 01:30:18,900 Permiteți-mi să mă dai de boilerplate void main int, a cărui explicație ne vom 1806 01:30:18,900 --> 01:30:20,360 vin înapoi în viitor. 1807 01:30:20,360 --> 01:30:23,820 >> Acum, lasă-mă să merg mai departe și eu un int prin int get. 1808 01:30:23,820 --> 01:30:25,970 Atunci lasă-mă să merg mai departe și fac acest lucru. 1809 01:30:25,970 --> 01:30:30,150 Vreau să spun că dacă i este less-- să distincția între pozitiv, negativ, 1810 01:30:30,150 --> 01:30:31,260 sau valori zero. 1811 01:30:31,260 --> 01:30:36,630 >> Așa că, dacă i este mai mică decât zero, permiteți-mi au doar acest program spune pur și simplu, 1812 01:30:36,630 --> 01:30:42,370 negativ, backslash n, altfel în cazul în care i este mai mare decât zero. 1813 01:30:42,370 --> 01:30:47,030 Acum eu sunt, desigur, va spune printf pozitiv, backslash n. 1814 01:30:47,030 --> 01:30:50,690 Și apoi altceva if-- am putut face acest lucru. 1815 01:30:50,690 --> 01:30:53,410 >> Aș putea face dacă i este egal cu 0. 1816 01:30:53,410 --> 01:30:55,840 Dar mi-ar fi a face la cel puțin o greșeală deja. 1817 01:30:55,840 --> 01:30:59,480 Să ne amintim că semnul egal este nu este egal, așa cum noi oamenii știu. 1818 01:30:59,480 --> 01:31:01,010 >> Dar este operatorul de atribuire. 1819 01:31:01,010 --> 01:31:05,640 Si noi nu vrem să ia 0 de pe dreapta și pune-l în i pe partea stângă. 1820 01:31:05,640 --> 01:31:11,810 Deci, pentru a evita această confuzie, sau probabil, utilizarea abuzivă a semnului egal, 1821 01:31:11,810 --> 01:31:14,740 oamenii au decis în urmă cu câțiva ani că, în multe limbaje de programare 1822 01:31:14,740 --> 01:31:18,000 atunci când doriți să verificați pentru egalitate între stânga și dreapta, 1823 01:31:18,000 --> 01:31:19,635 tu de fapt, utilizați este egal la egal la egal. 1824 01:31:19,635 --> 01:31:21,010 Deci ai lovit semnul egal de două ori. 1825 01:31:21,010 --> 01:31:25,600 Atunci când doriți să atribuiți din dreapta la stânga, utilizați un singur semn egal. 1826 01:31:25,600 --> 01:31:29,360 Așa că am putea face astea-- altceva dacă i este egal este egala cu zero. 1827 01:31:29,360 --> 01:31:31,710 >> atunci am putea merge și Deschide bretele mele buclat, 1828 01:31:31,710 --> 01:31:36,087 și spune, printf 0, backslash n, făcut. 1829 01:31:36,087 --> 01:31:38,170 Dar, amintiți-vă cum acestea furci în drum pot lucra. 1830 01:31:38,170 --> 01:31:39,836 Și, într-adevăr, trebuie doar să se gândească la logica. 1831 01:31:39,836 --> 01:31:41,510 i este un număr. 1832 01:31:41,510 --> 01:31:43,320 Este un număr întreg, în mod specific. 1833 01:31:43,320 --> 01:31:48,600 Și asta înseamnă că va fi mai puțin decât 0 sau mai mare decât 0, sau 0. 1834 01:31:48,600 --> 01:31:51,600 Deci, există un fel de acest lucru caz implicit implicite. 1835 01:31:51,600 --> 01:31:54,920 >> Și așa am putea, la fel ca Zgârietură, dispensa cu else if, 1836 01:31:54,920 --> 01:31:55,747 și doar spun altceva. 1837 01:31:55,747 --> 01:31:57,830 În mod logic, dacă vă programator știu că există doar 1838 01:31:57,830 --> 01:32:01,635 trei găleți în care scenariu poate fall-- primul, 1839 01:32:01,635 --> 01:32:03,510 al doilea sau al treilea în acest case-- nu 1840 01:32:03,510 --> 01:32:07,100 deranja adăugarea suplimentară de precizie și logica suplimentară acolo. 1841 01:32:07,100 --> 01:32:09,690 Doar du-te mai departe cu caz implicit aici de altceva. 1842 01:32:09,690 --> 01:32:11,950 >> Acum, să mergem mai departe după salvarea acestei, face 1843 01:32:11,950 --> 01:32:15,760 Condiții dot slash conditions-- nu o interfață de utilizator mare, 1844 01:32:15,760 --> 01:32:18,914 pentru că nu sunt fapt care a determinat utilizator, așa cum am menționat mai devreme. 1845 01:32:18,914 --> 01:32:19,580 Dar asta e bine. 1846 01:32:19,580 --> 01:32:20,454 O să-l păstrați simplu. 1847 01:32:20,454 --> 01:32:21,890 Să încercăm numărul 42. 1848 01:32:21,890 --> 01:32:23,240 Și asta e pozitiv. 1849 01:32:23,240 --> 01:32:26,120 Să încercăm numărul negativ 42, negativ. 1850 01:32:26,120 --> 01:32:28,244 >> Să încercăm valoarea 0. 1851 01:32:28,244 --> 01:32:29,160 Și, într-adevăr, ea funcționează. 1852 01:32:29,160 --> 01:32:33,900 Acum, veți vedea cu probleme înainte lungi, de testare lucruri de trei ori, 1853 01:32:33,900 --> 01:32:34,980 probabil, nu este suficient. 1854 01:32:34,980 --> 01:32:37,438 probabil că doriți să testați unele numere mai mari, unele mai mici 1855 01:32:37,438 --> 01:32:40,520 numere, unele cazuri de colt, ca vom veni să le descrie. 1856 01:32:40,520 --> 01:32:42,500 >> Dar pentru moment, aceasta este o Programul destul de simplu. 1857 01:32:42,500 --> 01:32:45,160 Și eu sunt destul de sigur că, în mod logic, că aceasta se încadrează în trei cazuri. 1858 01:32:45,160 --> 01:32:49,360 Și, într-adevăr, chiar dacă ne-am axat pe potențialele dezavantaje 1859 01:32:49,360 --> 01:32:53,480 de imprecizie și de preaplin, în realitate, în cazul în care multe dintre problemele lui CS50, 1860 01:32:53,480 --> 01:32:56,000 noi nu vom face griji despre, tot timpul, 1861 01:32:56,000 --> 01:32:59,050 aceste probleme de depășire și imprecizie, pentru că, de fapt, în C, 1862 01:32:59,050 --> 01:33:01,889 nu e de fapt, tot ceea ce ușor pentru a evita aceste lucruri. 1863 01:33:01,889 --> 01:33:04,180 Dacă doriți ca să conta în sus mai mare, și mai mare, și mai mare, 1864 01:33:04,180 --> 01:33:07,510 se pare că există tehnici pe care le se poate utiliza, de multe ori care implică lucruri numite 1865 01:33:07,510 --> 01:33:11,240 biblioteci, colecții de cod, care alte persoane au scris pe care le puteți utiliza, 1866 01:33:11,240 --> 01:33:13,910 și alte limbi, cum ar fi Java și altele, de fapt, 1867 01:33:13,910 --> 01:33:15,800 face mult mai ușor pentru a conta chiar mai mare. 1868 01:33:15,800 --> 01:33:19,810 Așa că într-adevăr este unele dintre aceste pericole o funcție de limba pe care o utilizați. 1869 01:33:19,810 --> 01:33:22,710 Și, în săptămânile următoare, ne vom a se vedea cât de periculos C într-adevăr 1870 01:33:22,710 --> 01:33:24,950 poate fi, dacă nu-l utilizați în mod corespunzător. 1871 01:33:24,950 --> 01:33:27,610 Dar, de acolo, și cu Python, și JavaScript, va 1872 01:33:27,610 --> 01:33:32,620 noi strat pe unele protectii suplimentare, și a alerga mai puține din aceste riscuri. 1873 01:33:32,620 --> 01:33:35,820 >> Așa că hai să facem un pic mai mult logica interesantă în programul nostru. 1874 01:33:35,820 --> 01:33:39,110 Așa că lasă-mă să merg mai departe și de a crea un program numit logică 1875 01:33:39,110 --> 01:33:43,804 doar ca sa ma pot juca cu unele logica reală, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Voi doar să copiați și lipiți unele cod de la asa mai devreme mă întorc 1877 01:33:46,870 --> 01:33:49,950 la acest frumos punct de plecare. 1878 01:33:49,950 --> 01:33:53,980 >> Dați-mi voie de data asta fac C. char Sunt O să-i dea un nume de C 1879 01:33:53,980 --> 01:33:58,510 doar pentru că este convențională, obține un caracter de utilizator. 1880 01:33:58,510 --> 01:34:00,730 Și să pretinzi Sunt de punere în aplicare parte 1881 01:34:00,730 --> 01:34:04,130 din acel program Rm Remove Programul înainte de care a determinat utilizatorul 1882 01:34:04,130 --> 01:34:05,400 pentru a elimina un fișier. 1883 01:34:05,400 --> 01:34:06,750 Cum am putea face acest lucru? 1884 01:34:06,750 --> 01:34:11,090 >> Vreau să spun, dacă C este egal cu este egal, citat unquote, 1885 01:34:11,090 --> 01:34:16,304 y, atunci am de gând să-și asume că utilizatorul a ales da. 1886 01:34:16,304 --> 01:34:17,470 Mă duc pentru a imprima da. 1887 01:34:17,470 --> 01:34:19,440 Dacă ar fi scris, de fapt programul de ștergere, 1888 01:34:19,440 --> 01:34:21,420 am putea elimina fișierul cu mai multe linii de cod. 1889 01:34:21,420 --> 01:34:22,461 Dar vom păstra simplu. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c este egal cu egal cu N- iar acum aici, voi spune, 1892 01:34:31,250 --> 01:34:32,980 utilizatorul trebuie să fi însemnat nr. 1893 01:34:32,980 --> 01:34:34,360 Și apoi altceva, știi ce? 1894 01:34:34,360 --> 01:34:36,200 Nu știu ce altceva utilizatorul va introduce. 1895 01:34:36,200 --> 01:34:38,533 Așa că am de gând doar să spun că că este o eroare, oricare ar fi 1896 01:34:38,533 --> 01:34:40,070 el sau ea de fapt tastat. 1897 01:34:40,070 --> 01:34:41,180 >> Deci, ce se întâmplă aici? 1898 01:34:41,180 --> 01:34:44,530 Există o diferență fundamentală față de ceea ce am făcut în trecut. 1899 01:34:44,530 --> 01:34:49,300 ghilimele duble, ghilimele duble, dublu citate, și, cu toate acestea, ghilimele simple, 1900 01:34:49,300 --> 01:34:50,170 ghilimele simple. 1901 01:34:50,170 --> 01:34:52,860 Se pare ca în C, că, atunci când pe care doriți să scrie un șir de caractere, 1902 01:34:52,860 --> 01:34:56,680 nu folosiți ghilimele duble, la fel cum ne-am fost folosind tot acest timp cu printf. 1903 01:34:56,680 --> 01:35:02,030 >> Dar, dacă doriți să se ocupe cu doar un cu un singur caracter, o așa-numită char, 1904 01:35:02,030 --> 01:35:03,780 atunci va folosi de fapt ghilimele simple. 1905 01:35:03,780 --> 01:35:05,450 Aceia dintre voi care ați programat înainte de a, nu s-ar putea avea 1906 01:35:05,450 --> 01:35:07,850 a trebuit să vă faceți griji cu privire la acest lucru distincție în anumite limbi. 1907 01:35:07,850 --> 01:35:09,450 În C, nu contează. 1908 01:35:09,450 --> 01:35:12,560 Și așa când am un char si vreau pentru a compara acel char folosind egali 1909 01:35:12,560 --> 01:35:18,350 este egală cu o anumită literă cum ar fi y sau n, fac eu, într-adevăr, trebuie să aibă ghilimele simple. 1910 01:35:18,350 --> 01:35:19,770 >> Acum, să mergem mai departe și de a face acest lucru. 1911 01:35:19,770 --> 01:35:26,180 Hai să mergem mai departe și fac dot logice slash logice. 1912 01:35:26,180 --> 01:35:27,305 Și acum am fost întrebat în prealabil. 1913 01:35:27,305 --> 01:35:30,638 Așa că, probabil, o mai bună experiență de utilizare s-ar spune de fapt, mi ce să fac aici. 1914 01:35:30,638 --> 01:35:33,030 Dar, voi doar orbește spun y pentru da, OK, frumos. 1915 01:35:33,030 --> 01:35:35,780 >> Hai să-l rulați din nou, n pentru nici, frumos. 1916 01:35:35,780 --> 01:35:39,610 Să presupunem ca și anumite persoane pe care le cunosc, capace de blocare a cheia este prea des. 1917 01:35:39,610 --> 01:35:43,740 Așa că am făcut capital de Y, introduceți, eroare. 1918 01:35:43,740 --> 01:35:46,130 OK, nu e exact ceea ce mă așteptam. 1919 01:35:46,130 --> 01:35:48,170 Într-adevăr, computerul este de a face literalmente ceea ce 1920 01:35:48,170 --> 01:35:51,794 Am spus să do-- verifica litere mici y și litere mici n. 1921 01:35:51,794 --> 01:35:53,960 Acest lucru nu se simte ca bine experiență de utilizator, totuși. 1922 01:35:53,960 --> 01:35:59,010 Lasă-mă să solicite și să accepte fie minuscule sau majuscule. 1923 01:35:59,010 --> 01:36:02,090 Deci, se pare, s-ar putea dori să spună ceva de genul în Scratch, 1924 01:36:02,090 --> 01:36:08,150 cum ar fi literalmente sau C este egal cu este egal cu capitalul unic y citat. 1925 01:36:08,150 --> 01:36:11,400 Se pare că, C nu are acest cuvânt cheie sau literal. 1926 01:36:11,400 --> 01:36:12,880 >> Dar are două bare verticale. 1927 01:36:12,880 --> 01:36:15,463 Trebuie să-țineți apăsată tasta Shift de obicei, dacă utilizați o tastatură din SUA, 1928 01:36:15,463 --> 01:36:18,910 și a lovit bara verticală Tasta de mai sus cheia de întoarcere. 1929 01:36:18,910 --> 01:36:22,410 Dar această bară verticală bară verticală înseamnă sau. 1930 01:36:22,410 --> 01:36:26,220 >> În cazul în care, în schimb, ne-am dorit să spunem și, la fel ca în Scratch, 1931 01:36:26,220 --> 01:36:28,180 am putea face ampersand ampersand. 1932 01:36:28,180 --> 01:36:31,330 Nu are nici un sens logic aici, pentru că un om ar putea, eventual, nu 1933 01:36:31,330 --> 01:36:37,110 au tastat atât y și y litere mici și capitalul Y ca același caracter. 1934 01:36:37,110 --> 01:36:39,470 Acest lucru sau este ceea ce ne propunem aici. 1935 01:36:39,470 --> 01:36:46,280 >> Deci, dacă am face acest lucru în ambele locuri, sau c este egal cu capitalul N egalează, acum rulați din nou, 1936 01:36:46,280 --> 01:36:49,390 face logic, logic rulați din nou. 1937 01:36:49,390 --> 01:36:51,200 Acum, eu pot tip y. 1938 01:36:51,200 --> 01:36:53,920 Și eu pot face din nou cu capitalul Y sau N. Capital 1939 01:36:53,920 --> 01:36:56,630 Și aș putea adăuga în plus combinații încă. 1940 01:36:56,630 --> 01:36:58,810 >> Deci, aceasta este o logică în măsura în care programul acum 1941 01:36:58,810 --> 01:37:01,940 Verific în mod logic această valoare sau această valoare. 1942 01:37:01,940 --> 01:37:06,420 Si eu nu trebuie, în mod necesar, veni cu încă două sau altceva ar fi dacă ar fi dacă. 1943 01:37:06,420 --> 01:37:09,960 Pot combina de fapt, unele dintre cele mai logica legate împreună în acest fel. 1944 01:37:09,960 --> 01:37:11,950 Deci, acest lucru ar fi mai bine proiectat decât pur și simplu 1945 01:37:11,950 --> 01:37:17,490 spunând dacă C este egal cu litere mici y, print da, altfel daca c este egal cu capitalul Y, 1946 01:37:17,490 --> 01:37:20,074 print da, altceva în cazul în care c este egal cu lower-- cu alte cuvinte, 1947 01:37:20,074 --> 01:37:21,990 nu trebuie să aibă tot mai multe ramuri. 1948 01:37:21,990 --> 01:37:28,840 Puteți combina unele dintre echivalentul ramuri în mod logic, ca în acest fel. 1949 01:37:28,840 --> 01:37:34,150 >> Așa că hai să aruncăm o privire la doar unul ingredient final un construct final 1950 01:37:34,150 --> 01:37:34,847 că C permite. 1951 01:37:34,847 --> 01:37:36,930 Iar noi vom veni în în viitor pentru alții încă. 1952 01:37:36,930 --> 01:37:41,400 Și apoi vom încheia prin căutarea la care nu corectitudinea code-- 1953 01:37:41,400 --> 01:37:46,070 obtinerea de cod pentru work-- dar design-ul de cod, și planta acele semințe de timpuriu. 1954 01:37:46,070 --> 01:37:51,337 >> Așa că lasă-mă să merg mai departe și deschide un fișier nou aici. 1955 01:37:51,337 --> 01:37:51,920 Știi ce? 1956 01:37:51,920 --> 01:37:54,450 Am de gând să re-pună în aplicare că același program, 1957 01:37:54,450 --> 01:37:55,940 dar folosind o construcție diferită. 1958 01:37:55,940 --> 01:38:00,110 >> Așa că lasă-mă repede da eu acces pentru a include CS50.h 1959 01:38:00,110 --> 01:38:04,150 pentru biblioteca CS50, standardul Io.h pentru printf. 1960 01:38:04,150 --> 01:38:06,510 Dă-mi void main int. 1961 01:38:06,510 --> 01:38:09,310 Și apoi aici, să mă să merg mai departe și fac acest lucru. 1962 01:38:09,310 --> 01:38:12,010 >> Char c devine obține char, la fel ca înainte. 1963 01:38:12,010 --> 01:38:16,770 Si eu voi folosi un nou construct now-- trece, pe ce personaj? 1964 01:38:16,770 --> 01:38:19,820 Așa că comutatorul este un fel de Comutarea unei piese de tren. 1965 01:38:19,820 --> 01:38:22,070 Sau, într-adevăr, este un fel de în cazul în care un altul, dacă altceva în cazul în care, 1966 01:38:22,070 --> 01:38:23,980 dar scrise oarecum diferit. 1967 01:38:23,980 --> 01:38:25,490 >> Un comutator arata ca acest lucru. 1968 01:38:25,490 --> 01:38:29,060 Ai comutator, și apoi ce caracter sau numărul pe care doriți să se uite la, 1969 01:38:29,060 --> 01:38:32,000 apoi unele acolade ca în Zero, spun doar fac aceste lucruri. 1970 01:38:32,000 --> 01:38:33,480 Și, atunci aveți diferite cazuri. 1971 01:38:33,480 --> 01:38:34,830 >> Nu mai folosești dacă și altceva. 1972 01:38:34,830 --> 01:38:37,050 Utilizați literalmente caz cuvântul. 1973 01:38:37,050 --> 01:38:38,790 Și v-ar spune ceva de genul asta. 1974 01:38:38,790 --> 01:38:43,820 >> Deci, în cazul unei litere mici y, sau în cazul unui capital Y, 1975 01:38:43,820 --> 01:38:47,350 mergeți mai departe și imprima da. 1976 01:38:47,350 --> 01:38:49,020 Și apoi ieși din comutator. 1977 01:38:49,020 --> 01:38:49,580 Asta e. 1978 01:38:49,580 --> 01:38:50,880 Au fost efectuate. 1979 01:38:50,880 --> 01:38:57,270 >> Dacă este altfel, ca să spunem așa, caz n inferior, sau de capital N, 1980 01:38:57,270 --> 01:39:02,560 apoi mergeți mai departe și de imprimare afară nu, și apoi se rupe. 1981 01:39:02,560 --> 01:39:08,022 Else-- și acest tip de este default indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 și doar pentru o bună măsură, deși în mod logic, această pauză nu este necesară 1983 01:39:10,980 --> 01:39:12,896 pentru că suntem la sfârșitul anului a comutatorului, oricum, 1984 01:39:12,896 --> 01:39:14,520 Sunt acum de rupere a comutatorului. 1985 01:39:14,520 --> 01:39:16,280 Deci, acest lucru pare un pic diferit. 1986 01:39:16,280 --> 01:39:18,272 >> Dar, în mod logic, este de fapt echivalent. 1987 01:39:18,272 --> 01:39:19,980 Și de ce ai folosi una peste alta? 1988 01:39:19,980 --> 01:39:23,220 Uneori, doar o preferință personală, uneori estetica, 1989 01:39:23,220 --> 01:39:25,420 dacă am arunca o privire la acest Acum, e ceva 1990 01:39:25,420 --> 01:39:27,510 pentru a spune pentru lizibilitatea acestui cod. 1991 01:39:27,510 --> 01:39:30,690 Vreau să spun, nu contează faptul că această Codul este nou pentru mulți dintre noi în cameră. 1992 01:39:30,690 --> 01:39:33,515 >> Dar este doar un fel de e destul. 1993 01:39:33,515 --> 01:39:37,760 Tu vezi cu litere mici y, capitalul Y, caz n inferior, capitalul N implicit, 1994 01:39:37,760 --> 01:39:40,150 ea doar un fel de salturi la tine într-un mod 1995 01:39:40,150 --> 01:39:42,200 că, fără îndoială, poate exemplul anterior 1996 01:39:42,200 --> 01:39:45,780 cu, și IdS bare verticale, iar IdS altceva, nu s-ar putea avea. 1997 01:39:45,780 --> 01:39:51,600 Deci, acest lucru este într-adevăr o chestiune de personal alegere, într-adevăr, sau lizibilitatea, 1998 01:39:51,600 --> 01:39:52,360 din cod. 1999 01:39:52,360 --> 01:39:58,230 >> Dar, în ceea ce privește funcționalitatea, permiteți-mi mergeți mai departe și să facă un comutator, bară oblică punct 2000 01:39:58,230 --> 01:40:05,830 comutator, iar acum tastați în y litere mici, de capital Y, litere mici n, capitalul N, 2001 01:40:05,830 --> 01:40:09,250 David, încercați din nou pentru că asta nu un singur caracter. 2002 01:40:09,250 --> 01:40:12,050 Hai să facem x, eroare, cum era de așteptat. 2003 01:40:12,050 --> 01:40:15,640 Și, logically-- și acest lucru este ceva Aș încuraja în general-- chiar 2004 01:40:15,640 --> 01:40:17,790 deși suntem doar zgârierea Suprafața unora dintre aceste caracteristici. 2005 01:40:17,790 --> 01:40:20,560 >> Si s-ar putea să nu fie evident atunci când stai jos te la tastatură, 2006 01:40:20,560 --> 01:40:21,370 Cum funcţionează asta? 2007 01:40:21,370 --> 01:40:22,240 Ce ar face asta? 2008 01:40:22,240 --> 01:40:25,630 Lucru frumos despre care au un laptop, sau desktop sau de acces 2009 01:40:25,630 --> 01:40:29,290 la un calculator cu un compilator, și cu un editor de cod de genul asta, 2010 01:40:29,290 --> 01:40:32,990 este aproape iti poti răspunde întotdeauna aceste întrebări pentru tine doar incercand. 2011 01:40:32,990 --> 01:40:36,570 >> De exemplu, în cazul în care retorice întrebare la îndemână au fost, 2012 01:40:36,570 --> 01:40:39,540 Ce se întâmplă dacă uitați declarațiile dumneavoastră pauză? 2013 01:40:39,540 --> 01:40:41,400 Ceea ce este de fapt un foarte frecvente lucru de făcut, 2014 01:40:41,400 --> 01:40:43,540 deoarece nu arata cum ar fi într-adevăr nevoie de ele. 2015 01:40:43,540 --> 01:40:46,790 Ei nu completează cu adevărat tău crezut ca o paranteza sau ondulat 2016 01:40:46,790 --> 01:40:47,714 bretele face. 2017 01:40:47,714 --> 01:40:49,630 Să mergem mai departe și recompilați codul și a vedea. 2018 01:40:49,630 --> 01:40:53,690 Deci, asigurați-comutator, comutator bară oblică punct. 2019 01:40:53,690 --> 01:40:56,435 Hai să tastați în litere mici y, caz de sus, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Așa că am tastat y. 2022 01:41:00,700 --> 01:41:04,420 >> Programul a spus da, nu, eroare, ca și cum a fost schimbarea mintea ei. 2023 01:41:04,420 --> 01:41:09,280 Dar e cam fost, pentru că ceea ce se întâmplă cu un comutator este primul caz în care 2024 01:41:09,280 --> 01:41:13,899 potrivire înseamnă că, în esență, hei calculator, executa tot codul de sub el. 2025 01:41:13,899 --> 01:41:16,690 Și, dacă nu spui pauză, sau nu spun pauză, sau nu spun pauză, 2026 01:41:16,690 --> 01:41:19,540 calculatorul va sufla prin toate aceste linii 2027 01:41:19,540 --> 01:41:22,779 și să execute toate acestea, până se ajunge la asta acoladă. 2028 01:41:22,779 --> 01:41:24,320 Așa că frânele sunt, într-adevăr, este necesar. 2029 01:41:24,320 --> 01:41:27,120 Dar, o livrata acasa aici este, atunci când în îndoială, încercați ceva. 2030 01:41:27,120 --> 01:41:29,510 Poate salva codul în primul rând, sau salvați-l într-un fișier suplimentar 2031 01:41:29,510 --> 01:41:32,930 dacă sunteți într-adevăr îngrijorat încurc și având pentru a recupera 2032 01:41:32,930 --> 01:41:34,430 munca pe care o știi este de lucru. 2033 01:41:34,430 --> 01:41:35,410 >> Dar, încercați lucruri. 2034 01:41:35,410 --> 01:41:38,074 Si nu fie la fel de frică, probabil, a ceea ce s-ar putea face computerul, 2035 01:41:38,074 --> 01:41:39,490 sau că s-ar putea rupe ceva. 2036 01:41:39,490 --> 01:41:42,790 Puteți oricând să reveniți înapoi într-o anumită versiune anterioară. 2037 01:41:42,790 --> 01:41:45,640 >> Așa că hai să închei căutarea la proiectarea codului. 2038 01:41:45,640 --> 01:41:49,020 Avem această capacitate acum de a scrie condiții, și bucle de scriere, 2039 01:41:49,020 --> 01:41:50,850 și variabile, și funcțiile de apelare. 2040 01:41:50,850 --> 01:41:54,590 Așa că, sincer, suntem un fel de la spate unde am fost acum o săptămână cu Scratch, 2041 01:41:54,590 --> 01:42:00,120 deși cu un text mai puțin convingătoare mediu decât zero permite acest lucru. 2042 01:42:00,120 --> 01:42:03,990 >> Dar, observați cât de repede ne-am dobândit că vocabularul, chiar dacă este 2043 01:42:03,990 --> 01:42:07,570 O să ia ceva timp să se scufunde în, astfel încât să putem folosi acum acest vocabular 2044 01:42:07,570 --> 01:42:10,320 pentru a scrie mai multe programe interesante. 2045 01:42:10,320 --> 01:42:12,940 Și să facem un pas copil față de faptul că, după cum urmează. 2046 01:42:12,940 --> 01:42:14,890 Lasă-mă să merg mai departe și a crea un fișier nou aici. 2047 01:42:14,890 --> 01:42:17,750 >> Mă duc să sun acest prototype.c, și să introducă 2048 01:42:17,750 --> 01:42:20,954 pentru prima dată, capacitatea pentru a face propriile funcții. 2049 01:42:20,954 --> 01:42:22,870 Unii dintre voi s-ar putea avea făcut acest lucru cu zgârieturi, 2050 01:42:22,870 --> 01:42:25,430 prin care vă puteți crea blocuri personalizate proprii în Scratch, 2051 01:42:25,430 --> 01:42:27,892 și apoi glisați-le în loc ori de câte ori doriți în C. 2052 01:42:27,892 --> 01:42:30,100 Și, în cele mai multe de programare limbi, puteți face exact 2053 01:42:30,100 --> 01:42:33,580 that-- face propriile funcții, în cazul în care acestea nu există deja. 2054 01:42:33,580 --> 01:42:38,660 >> Astfel, de exemplu, lasă-mă să merg mai departe și includ CS50.h, și includ 2055 01:42:38,660 --> 01:42:43,110 standard de IO.h, void main int. 2056 01:42:43,110 --> 01:42:46,020 Și acum avem un placeholder gata de plecare. 2057 01:42:46,020 --> 01:42:48,550 Am păstra de imprimare lucrurile cum ar fi numele oamenilor de azi. 2058 01:42:48,550 --> 01:42:51,910 Si asta se simte like-- nu ar fi frumos dacă există 2059 01:42:51,910 --> 01:42:53,936 au fost o funcție numită nume de imprimare? 2060 01:42:53,936 --> 01:42:55,060 Nu trebuie să utilizați printf. 2061 01:42:55,060 --> 01:42:56,976 Nu trebuie să-și amintească toate codurile de format. 2062 01:42:56,976 --> 01:43:00,050 De ce nu, sau de ce nu a făcut cineva înaintea mea, 2063 01:43:00,050 --> 01:43:02,980 a crea o funcție numită de imprimare nume, că dat un nume, 2064 01:43:02,980 --> 01:43:03,980 pur și simplu se imprimă afară? 2065 01:43:03,980 --> 01:43:08,700 >> Cu alte cuvinte, dacă eu spun, hei, calculator, da-mi un șir de caractere 2066 01:43:08,700 --> 01:43:11,870 prin solicitarea utilizatorului pentru o astfel, prin intermediul funcției șir get CS50 lui. 2067 01:43:11,870 --> 01:43:15,090 Hei, computer, a pus acel șir în variabila in partea stanga, 2068 01:43:15,090 --> 01:43:16,150 si suna-l e. 2069 01:43:16,150 --> 01:43:22,150 Și apoi, hei calculator, mergeți mai departe și imprima numele persoanei, făcut. 2070 01:43:22,150 --> 01:43:26,240 >> Acum, ar fi frumos, pentru că acest program, numit pe bună dreptate, 2071 01:43:26,240 --> 01:43:29,170 îmi spune ce ar trebui sa faca prin intermediul numelor celor ale funcției lui. 2072 01:43:29,170 --> 01:43:32,930 Lasă-mă să merg și să facă prototip, Enter. 2073 01:43:32,930 --> 01:43:34,930 Și, din păcate, acest lucru nu se întâmplă să zboare. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, linia 7, caracter 5, eroare, declarația implicită 2075 01:43:39,430 --> 01:43:42,960 a funcției nume de imprimare este nevalid în C99, C99 2076 01:43:42,960 --> 01:43:45,130 ceea ce înseamnă o versiune de C care a ieșit în 1999. 2077 01:43:45,130 --> 01:43:45,730 Asta e tot. 2078 01:43:45,730 --> 01:43:48,780 >> Deci, eu nu știu ce toate acestea înseamnă încă. 2079 01:43:48,780 --> 01:43:50,810 Dar eu recunosc eroare în roșu. 2080 01:43:50,810 --> 01:43:51,770 Asta e destul de evident. 2081 01:43:51,770 --> 01:43:53,769 >> Și se pare că, cu caracterul verde aici, 2082 01:43:53,769 --> 01:43:57,520 problema este cu numele de imprimare, deschis Paranteză s, Paranteză aproape, semi-colon. 2083 01:43:57,520 --> 01:44:01,800 Dar, declarația implicită a Funcția le-am văzut pe scurt mai devreme. 2084 01:44:01,800 --> 01:44:04,880 Acest lucru înseamnă, pur și simplu, că zăngănit nu știe ce vreau să spun. 2085 01:44:04,880 --> 01:44:09,000 >> Am folosit un cuvânt de vocabular că este nu a văzut sau a fost predat inainte. 2086 01:44:09,000 --> 01:44:11,950 Așa că am nevoie să-l învețe ceea ce înseamnă această funcție. 2087 01:44:11,950 --> 01:44:13,590 Așa că am de gând să merg mai departe și de a face asta. 2088 01:44:13,590 --> 01:44:17,970 >> Mă duc să merg mai departe și să pună în aplicare mea funcție proprie numită Print Name. 2089 01:44:17,970 --> 01:44:24,720 Si eu voi spune, după cum urmează, că face acest lucru, printf, salut, la sută 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, numele, semi-colon. 2091 01:44:27,760 --> 01:44:29,250 Deci ce am făcut? 2092 01:44:29,250 --> 01:44:31,325 >> Deci, se pare, la pune în aplicare propria funcție, 2093 01:44:31,325 --> 01:44:33,845 am un fel de a împrumuta unele dintre aceeași structură ca principală 2094 01:44:33,845 --> 01:44:35,720 că am fost doar de la sine, și eu 2095 01:44:35,720 --> 01:44:37,730 știu doar să copiați și să lipirea destul de mult ceea ce 2096 01:44:37,730 --> 01:44:39,170 Am scris în trecut. 2097 01:44:39,170 --> 01:44:40,570 Dar observați modelul aici. 2098 01:44:40,570 --> 01:44:43,750 Int, principal, nu apare, vom tachineze în afară înainte de mult timp ce asta înseamnă, de fapt. 2099 01:44:43,750 --> 01:44:46,160 >> Dar pentru ziua de azi, doar observă paralelismul. 2100 01:44:46,160 --> 01:44:48,210 , Numele de imprimare nu apare, string name, deci nu există 2101 01:44:48,210 --> 01:44:50,310 un cuvânt cheie violet, care vom incepe 2102 01:44:50,310 --> 01:44:54,067 apelarea unui tip de întoarcere, numele funcția, și apoi de intrare. 2103 01:44:54,067 --> 01:44:56,400 Așa că, de fapt, putem distila acest fel de săptămâna trecută 2104 01:44:56,400 --> 01:44:59,030 ca, acesta este numele sau Algoritmul de cod suntem 2105 01:44:59,030 --> 01:45:00,761 merge la write-- algoritmul care stau la baza 2106 01:45:00,761 --> 01:45:02,010 codul pe care îl vom scrie. 2107 01:45:02,010 --> 01:45:03,180 >> Aceasta este intrarea sa. 2108 01:45:03,180 --> 01:45:04,670 Aceasta este producția sa. 2109 01:45:04,670 --> 01:45:08,730 Această funcție, numele de imprimare, este proiectat pentru a lua un șir de caractere numit nume, 2110 01:45:08,730 --> 01:45:11,350 sau orice altceva, ca intrare, și apoi anulate. 2111 01:45:11,350 --> 01:45:13,904 Ea nu se întoarce nimic, cum ar obține șir sau pentru a obține o face int. 2112 01:45:13,904 --> 01:45:15,570 Așa că o să-mi dai ceva înapoi. 2113 01:45:15,570 --> 01:45:17,960 Doar că va avea un efect secundar, ca să spunem așa, 2114 01:45:17,960 --> 01:45:19,570 de a imprima numele unei persoane. 2115 01:45:19,570 --> 01:45:22,260 Așa că observați, linia 7, I poate apela numele de imprimare. 2116 01:45:22,260 --> 01:45:25,920 Linia 10, eu pot defini sau să pună în aplicare numele de imprimare. 2117 01:45:25,920 --> 01:45:28,450 Dar, din păcate, asta nu e suficient. 2118 01:45:28,450 --> 01:45:31,230 >> Lasă-mă să merg mai departe și recompilați acest lucru după salvare. 2119 01:45:31,230 --> 01:45:33,910 Hei, acum, l-am făcut mai rău, s-ar părea. 2120 01:45:33,910 --> 01:45:37,027 asemenea declarație implicită Numele funcției de imprimare este nevalid. 2121 01:45:37,027 --> 01:45:38,360 Și, din nou, există mai multe erori. 2122 01:45:38,360 --> 01:45:41,430 Dar, așa cum am avertizat mai devreme, chiar dacă te copleșit, 2123 01:45:41,430 --> 01:45:44,850 sau un pic trist pentru a vedea atât de mulți erori, se concentreze doar pe primul 2124 01:45:44,850 --> 01:45:47,500 inițial, pentru că s-ar putea pur și simplu au avut un efect în cascadă. 2125 01:45:47,500 --> 01:45:51,970 Deci C, sau zăngănit mai precis, încă nu recunoaște numele de imprimare. 2126 01:45:51,970 --> 01:45:54,580 >> Si asta pentru ca zăngănit, prin design, este un fel de prost. 2127 01:45:54,580 --> 01:45:56,280 Face doar ceea ce le spune să facă. 2128 01:45:56,280 --> 01:46:00,950 Și face acest lucru doar în ordinea în care îi spun să facă. 2129 01:46:00,950 --> 01:46:05,270 >> Așa că am definit în principal pe linia patru, așa cum ne-am făcut destul de des. 2130 01:46:05,270 --> 01:46:07,980 Am definit numele de imprimare pe linia 10. 2131 01:46:07,980 --> 01:46:11,793 Dar eu încerc să folosesc numele de imprimare pe linia șapte. 2132 01:46:11,793 --> 01:46:13,670 >> E prea devreme, nu există încă. 2133 01:46:13,670 --> 01:46:19,150 Așa că am putea fi inteligent, și să fie ca, OK, așa că hai să se joace de-a lungul, 2134 01:46:19,150 --> 01:46:23,680 și pentru a muta numele de imprimare în sus aici, și re-compila. 2135 01:46:23,680 --> 01:46:24,550 O Doamne. 2136 01:46:24,550 --> 01:46:25,260 A mers. 2137 01:46:25,260 --> 01:46:26,670 Era la fel de simplu ca asta. 2138 01:46:26,670 --> 01:46:28,120 >> Dar logica este exact asta. 2139 01:46:28,120 --> 01:46:30,870 Trebuie să-i învețe zăngănit ce este prin definirea funcției mai întâi. 2140 01:46:30,870 --> 01:46:31,920 Apoi îl puteți folosi. 2141 01:46:31,920 --> 01:46:33,940 Dar, sincer, acest lucru se simte ca o pantă alunecoasă. 2142 01:46:33,940 --> 01:46:35,773 >> Așa că de fiecare dată când am alerga într-o problemă, eu sunt doar 2143 01:46:35,773 --> 01:46:39,450 va evidenția și copiați codul Am scris, taie-l și lipiți-l aici. 2144 01:46:39,450 --> 01:46:41,370 Și, în mod sigur, am putea născoci unele scenarii 2145 01:46:41,370 --> 01:46:43,286 în cazul în care o funcție s-ar putea nevoie pentru a apela un alt. 2146 01:46:43,286 --> 01:46:46,030 Si pur si simplu nu se poate pune în fiecare Funcția mai presus de orice. 2147 01:46:46,030 --> 01:46:47,930 >> Deci, se pare că nu există o soluție mai bună. 2148 01:46:47,930 --> 01:46:50,100 Noi putem lăsa acest lucru să fie. 2149 01:46:50,100 --> 01:46:53,677 Si, sincer, este în general frumos, și convenabil, și design bun 2150 01:46:53,677 --> 01:46:56,760 pentru a pune principală întâi, pentru că, din nou, principal la fel ca atunci când steagul verde a făcut clic, 2151 01:46:56,760 --> 01:46:59,027 adică funcția pe care este executat în mod implicit. 2152 01:46:59,027 --> 01:47:01,110 Așa că s-ar putea la fel de bine pus l în partea de sus a fișierului 2153 01:47:01,110 --> 01:47:03,560 astfel încât, atunci când sau orice alt om se uită la fișierul 2154 01:47:03,560 --> 01:47:06,360 Știi ce se întâmplă doar prin citirea principală întâi. 2155 01:47:06,360 --> 01:47:15,360 Deci, se pare, putem spune zăngănit în mod proactiv, hei, zăngănit, pe linia de patru, 2156 01:47:15,360 --> 01:47:17,940 Eu promit să pună în aplicare o funcție numită de imprimare 2157 01:47:17,940 --> 01:47:22,600 Numele care ia un nume de coarde numit ca intrare, și se întoarce nimic, nule. 2158 01:47:22,600 --> 01:47:24,770 Și eu voi ajunge în jurul valorii de la de punere în aplicare mai târziu. 2159 01:47:24,770 --> 01:47:25,680 >> Aici vine Main. 2160 01:47:25,680 --> 01:47:29,130 Principala acum pe linia 9 poate utiliza Imprimare Nume deoarece zăngănit 2161 01:47:29,130 --> 01:47:32,600 este încrederea că, în cele din urmă, se va întâlni definiția 2162 01:47:32,600 --> 01:47:34,880 a punerii în aplicare a Print Name. 2163 01:47:34,880 --> 01:47:37,390 Deci, după ce salvați fișierul meu, să mă să merg mai departe și să facă prototip, 2164 01:47:37,390 --> 01:47:38,498 arată bine de data asta. 2165 01:47:38,498 --> 01:47:43,470 Dot slash, prototip, lasă-mă mergeți mai departe și tastați un nume. 2166 01:47:43,470 --> 01:47:48,440 David, salut David, Zamila, salut Zamila, și, într-adevăr, acum funcționează. 2167 01:47:48,440 --> 01:47:52,200 >> Așa că ingredientul de aici este că ne-am a făcut o funcție de comandă, cum ar fi un obicei 2168 01:47:52,200 --> 01:47:54,219 Bloc zgârietură noi o chemare. 2169 01:47:54,219 --> 01:47:57,010 Dar, spre deosebire de zero în cazul în care puteți doar crea și începe să-l utilizați, 2170 01:47:57,010 --> 01:47:59,330 acum trebuie să fim un puțin mai pedant, 2171 01:47:59,330 --> 01:48:03,410 și de fapt, tren zăngănit să folosească, sau să-l aștepte. 2172 01:48:03,410 --> 01:48:09,140 Acum, ca o parte, de ce tot acest timp au am fost pur și simplu orbește pe credință, inclusiv 2173 01:48:09,140 --> 01:48:12,170 CS50.h, inclusiv standardul IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Ei bine, se pare, printre alte câteva lucruri, 2175 01:48:15,190 --> 01:48:18,550 tot ceea ce este în acele dot h fișiere, care se întâmplă să fie fișiere. 2176 01:48:18,550 --> 01:48:20,460 Sunt antet fișiere, ca să spunem așa. 2177 01:48:20,460 --> 01:48:23,270 Sunt încă scrise în C. Dar acestea sunt un alt tip de fișier. 2178 01:48:23,270 --> 01:48:28,690 >> Pentru moment, se poate presupune destul de mult că tot ceea ce este în interiorul CS50.h 2179 01:48:28,690 --> 01:48:33,360 este unele-garnituri, cum ar fi acest lucru, nu pentru funcțiile numite Print Nume, 2180 01:48:33,360 --> 01:48:36,840 dar pentru Get String, Get Float, și alte câteva. 2181 01:48:36,840 --> 01:48:41,510 Și acolo sunt prototipuri similare, una garnituri, în interiorul IO.h standardului 2182 01:48:41,510 --> 01:48:46,241 pentru printf, care este acum în propria mea funcție de imprimare Nume. 2183 01:48:46,241 --> 01:48:49,490 Deci, cu alte cuvinte, în tot acest timp ne-am tocmai a fost orbește copierea și lipirea 2184 01:48:49,490 --> 01:48:51,780 includ acest lucru, includ că, ce se întâmplă? 2185 01:48:51,780 --> 01:48:55,310 Acestea sunt doar un fel de indicii la zăngăni cu privire la ce funcții 2186 01:48:55,310 --> 01:49:00,170 sunt, într-adevăr, puse în aplicare, doar în altă parte, în diferite fișiere 2187 01:49:00,170 --> 01:49:02,440 în altă parte asupra sistemului. 2188 01:49:02,440 --> 01:49:05,160 >> Prin urmare, am implementat numele de imprimare. 2189 01:49:05,160 --> 01:49:07,910 Ea are acest efect secundar al imprimarea ceva pe ecran. 2190 01:49:07,910 --> 01:49:10,170 Dar nu face de fapt Dă-mi ceva înapoi. 2191 01:49:10,170 --> 01:49:12,200 Cum vom merge despre punerea în aplicare a unui program care 2192 01:49:12,200 --> 01:49:14,510 nu dă-mi ceva înapoi? 2193 01:49:14,510 --> 01:49:15,580 >> Ei bine, să încercăm. 2194 01:49:15,580 --> 01:49:21,360 Lasă-mă să merg mai departe și să pună în aplicare un fișier numit return.c 2195 01:49:21,360 --> 01:49:24,530 astfel încât să putem demonstra cum ceva cum ar fi Get String, sau Get Int, 2196 01:49:24,530 --> 01:49:27,340 este de fapt revenirea ceva înapoi la utilizator. 2197 01:49:27,340 --> 01:49:29,840 Să mergem mai departe și să definească void main int. 2198 01:49:29,840 --> 01:49:33,230 >> Și, din nou, în viitor, vom explica ce acel int și acel gol 2199 01:49:33,230 --> 01:49:34,090 este de fapt face. 2200 01:49:34,090 --> 01:49:35,840 Dar pentru ziua de azi, vom ia-o serios. 2201 01:49:35,840 --> 01:49:39,970 Mă duc să merg mai departe și printf, pentru o bună experiență de utilizator, x este. 2202 01:49:39,970 --> 01:49:44,360 Și apoi am de gând să aștepte pentru utilizator pentru a-mi da x cu int get. 2203 01:49:44,360 --> 01:49:48,459 >> Și apoi am de gând să merg mai departe și imprima x la pătrat. 2204 01:49:48,459 --> 01:49:50,500 Așa că, atunci când ai doar un tastatură, oameni frecvent 2205 01:49:50,500 --> 01:49:52,600 utilizați morcov mic Simbolul de pe tastatură 2206 01:49:52,600 --> 01:49:55,330 să reprezinte la puterea a, sau exponent al. 2207 01:49:55,330 --> 01:49:58,960 Deci x la patrat este prezent eu. 2208 01:49:58,960 --> 01:50:00,660 >> Și acum voi face asta. 2209 01:50:00,660 --> 01:50:03,940 Aș putea doar do-- ce e x la pătrat? x pătrat este x ori x. 2210 01:50:03,940 --> 01:50:06,690 >> Si am facut asta unii timp în urmă deja astăzi. 2211 01:50:06,690 --> 01:50:08,730 Acest lucru nu se simte ca tot atât de mult progres. 2212 01:50:08,730 --> 01:50:09,570 Știi ce? 2213 01:50:09,570 --> 01:50:13,100 Hai să impulsioneze o parte din această idee din ultima dată de abstracție. 2214 01:50:13,100 --> 01:50:16,080 >> Nu s-ar fi frumos dacă există o funcție numită 2215 01:50:16,080 --> 01:50:18,460 pătrat care face exact asta? 2216 01:50:18,460 --> 01:50:20,640 Încă, la sfârșitul fișierului zi, face acelasi matematica. 2217 01:50:20,640 --> 01:50:22,410 Dar, hai abstract departe ideea de a lua 2218 01:50:22,410 --> 01:50:25,280 un singur număr înmulțit cu o alta, si doar da un nume, 2219 01:50:25,280 --> 01:50:27,360 cum ar fi pătrat această valoare. 2220 01:50:27,360 --> 01:50:29,560 >> Și, cu alte cuvinte, în C, să creeze o funcție 2221 01:50:29,560 --> 01:50:32,660 numita pătrat care face exact asta. 2222 01:50:32,660 --> 01:50:34,600 Va fi numit pătrat. 2223 01:50:34,600 --> 01:50:35,790 Se va lua un int. 2224 01:50:35,790 --> 01:50:37,820 Și vom doar va suna-l n, în mod implicit. 2225 01:50:37,820 --> 01:50:39,403 >> Dar am putea numi orice vrem. 2226 01:50:39,403 --> 01:50:42,900 Și, tot ceea ce va face, literalmente, este întoarcere 2227 01:50:42,900 --> 01:50:45,810 rezultatul de n ori n. 2228 01:50:45,810 --> 01:50:48,980 Dar, pentru că este întoarcere ceva, care 2229 01:50:48,980 --> 01:50:53,690 este cuvântul cheie în purpuriu ne-am niciodată văzut înainte, eu, pe linia 11, 2230 01:50:53,690 --> 01:50:55,410 nu se poate spune pur și simplu anulate de data asta. 2231 01:50:55,410 --> 01:51:01,320 >> Nule, în exemplul tocmai am văzut mai degrabă numele de imprimare, pur și simplu înseamnă, 2232 01:51:01,320 --> 01:51:02,190 Fă ceva. 2233 01:51:02,190 --> 01:51:04,170 Dar, nu-mi dai ceva înapoi. 2234 01:51:04,170 --> 01:51:06,790 În acest caz, eu vreau pentru a reveni n n ori, 2235 01:51:06,790 --> 01:51:08,460 sau orice altceva care este, acel număr. 2236 01:51:08,460 --> 01:51:12,460 >> Deci, eu nu pot spune, hei, calculator, Mă întorc nimic, nul. 2237 01:51:12,460 --> 01:51:16,166 O să se întoarcă, prin natura sa, un int. 2238 01:51:16,166 --> 01:51:17,790 Și astfel, asta e tot ce se întâmplă aici. 2239 01:51:17,790 --> 01:51:20,070 >> Intrare la pătrat va fi un int. 2240 01:51:20,070 --> 01:51:24,760 Și, astfel încât să putem folosi, trebuie să au un nume, N. Se va ieșire 2241 01:51:24,760 --> 01:51:26,240 un int care nu are nevoie de un nume. 2242 01:51:26,240 --> 01:51:29,590 O putem lăsa principal, sau cine este folosind-mi amintesc această valoare, dacă 2243 01:51:29,590 --> 01:51:31,120 doresc cu propria variabilă. 2244 01:51:31,120 --> 01:51:33,230 >> Și, din nou, singurul nou cuvinte cheie aici este de retur. 2245 01:51:33,230 --> 01:51:34,480 Si eu fac doar niște matematică. 2246 01:51:34,480 --> 01:51:41,825 Dacă aș fi dorit cu adevărat să fie inutilă, Aș putea spune produsul int devine de n ori n. 2247 01:51:41,825 --> 01:51:44,170 >> Și apoi am putea spune, returna produsul. 2248 01:51:44,170 --> 01:51:47,360 Dar, din nou, la punctul meu mai devreme de acest lucru pur și simplu nu este design-- bun 2249 01:51:47,360 --> 01:51:50,060 cum ar fi, de ce introduce un nume, un simbol, cum ar fi produs, 2250 01:51:50,060 --> 01:51:51,570 pur și simplu să-l returneze imediat? 2251 01:51:51,570 --> 01:51:53,670 Este un pic mai curat, un pic mai strâns, așa 2252 01:51:53,670 --> 01:51:59,380 să vorbească, doar pentru a spune întoarcerea de n ori n, a scăpa de această linie cu totul. 2253 01:51:59,380 --> 01:52:02,860 >> Și este doar mai puțin de cod pentru a citi, mai puține șanse de greșeli. 2254 01:52:02,860 --> 01:52:05,180 Și să vedem dacă acest lucru de fapt, funcționează acum. 2255 01:52:05,180 --> 01:52:09,380 Acum, am de gând să merg înainte și să facă retur. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, declarația implicită a funcției. 2257 01:52:11,460 --> 01:52:14,080 Am făcut această greșeală înainte de a, nu e mare. 2258 01:52:14,080 --> 01:52:18,950 Lasă-mă să tastați, sau evidențiați și copia, exact aceeasi functie prototip, 2259 01:52:18,950 --> 01:52:21,342 sau semnătura, a funcției de aici. 2260 01:52:21,342 --> 01:52:22,800 Sau aș putea mișca întreaga funcție. 2261 01:52:22,800 --> 01:52:23,841 >> Dar asta e un pic leneș. 2262 01:52:23,841 --> 01:52:24,870 Așa că nu vom face asta. 2263 01:52:24,870 --> 01:52:27,960 Acum, lasă-mă să fac întoarcere din nou, punct de întoarcere bară oblică. 2264 01:52:27,960 --> 01:52:32,790 >> x este 2. x la patrat este 4. x este 3 x patrat este de 9. 2265 01:52:32,790 --> 01:52:35,300 Iar funcția pare acum să fie de lucru. 2266 01:52:35,300 --> 01:52:36,550 Deci, ce este diferența aici? 2267 01:52:36,550 --> 01:52:42,520 Am o funcție care se numește pătrat, în acest caz, pe care am pus într-o intrare. 2268 01:52:42,520 --> 01:52:43,830 Iar eu mă întorc o ieșire. 2269 01:52:43,830 --> 01:52:46,210 Și totuși, mai înainte, în cazul în care Am deschis celălalt exemplu 2270 01:52:46,210 --> 01:52:51,640 din anterioare, care a fost numit prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Am avut numele de imprimare, care a revenit nule, ca să spunem așa, 2272 01:52:54,770 --> 01:52:58,730 Sau returnat nimic, și pur și simplu a avut un efect secundar. 2273 01:52:58,730 --> 01:53:00,230 >> Deci, ce se întâmplă aici? 2274 01:53:00,230 --> 01:53:03,520 Ei bine, ia în considerare funcția obține șir doar pentru un moment. 2275 01:53:03,520 --> 01:53:06,570 Am fost folosind funcția obține șir în felul următor. 2276 01:53:06,570 --> 01:53:10,464 >> Am avut o funcție de a obține șir de caractere, cum ar fi includ CS50.h, 2277 01:53:10,464 --> 01:53:16,624 includ standardul IO.h, int principal, void. 2278 01:53:16,624 --> 01:53:18,790 Și apoi de fiecare dată când am numit string get pana acum, 2279 01:53:18,790 --> 01:53:23,260 Am spus ceva de genul, șir de caractere s devine obține șir, pentru că get string-- 2280 01:53:23,260 --> 01:53:27,880 Să numim acest șir get get.c-- se returnează un șir de caractere pe care le pot apoi 2281 01:53:27,880 --> 01:53:32,050 utilizați, și spune, salut, virgulă, procente s, backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Deci, acesta este același exemplu, într-adevăr, că am avut mai devreme. 2283 01:53:35,660 --> 01:53:37,920 Așa că obține șir returnează o valoare. 2284 01:53:37,920 --> 01:53:41,260 Dar un moment în urmă, șir de imprimare nu returnează o valoare. 2285 01:53:41,260 --> 01:53:42,721 Ea pur și simplu are un efect secundar. 2286 01:53:42,721 --> 01:53:44,220 Deci, aceasta este o diferență fundamentală. 2287 01:53:44,220 --> 01:53:46,710 Ne-am văzut diferit tipuri de funcții acum, 2288 01:53:46,710 --> 01:53:49,490 unii dintre care s-au întors valori, dintre care unele nu. 2289 01:53:49,490 --> 01:53:51,890 Deci, poate că e șir de caractere, sau int sau float. 2290 01:53:51,890 --> 01:53:53,480 Sau poate e doar nule. 2291 01:53:53,480 --> 01:53:55,710 >> Iar diferența este că aceste funcții care 2292 01:53:55,710 --> 01:53:59,940 obține date și să returneze o valoare sunt de fapt aducând ceva înapoi la masă, 2293 01:53:59,940 --> 01:54:01,110 ca sa zicem asa. 2294 01:54:01,110 --> 01:54:03,710 Așa că hai să mergem mai departe și uita-te la un set final 2295 01:54:03,710 --> 01:54:09,129 de exemple care dă un sens, acum, de cum am putea, într-adevăr, mai bine abstract, 2296 01:54:09,129 --> 01:54:11,670 și mai bine, și mai bine, sau mai mult, și mai mult, și mai mult, în ordine 2297 01:54:11,670 --> 01:54:13,810 pentru a scrie, în cele din urmă, codul de mai bine. 2298 01:54:13,810 --> 01:54:16,860 Hai să mergem mai departe, și în spiritul Scratch, procedați în felul următor. 2299 01:54:16,860 --> 01:54:21,700 >> Lasă-mă să merg mai departe și să includă CS50.h și standardul IO.h. 2300 01:54:21,700 --> 01:54:24,010 Lasă-mă să merg mai departe și eu un int, principal, nule. 2301 01:54:24,010 --> 01:54:27,380 Și lasă-mă să merg mai departe, numesc acest cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> Și lasă-mă să merg mai departe și doar cum ar fi zero, imprima tuse / n. 2303 01:54:35,510 --> 01:54:37,170 Și vreau să fac acest lucru de trei ori. 2304 01:54:37,170 --> 01:54:39,670 Deci, eu sunt, desigur, doar merge pentru a copia și lipi de trei ori. 2305 01:54:39,670 --> 01:54:46,440 Sunt acum de gând să facă tuse tuse slash dot. 2306 01:54:46,440 --> 01:54:50,120 Hai să mă dau mai mult spațiu aici, Enter, tuse, tuse, tuse. 2307 01:54:50,120 --> 01:54:53,970 >> Nu există, în mod evident, deja oportunitate de îmbunătățire. 2308 01:54:53,970 --> 01:54:55,679 Am copiat și inserat de câteva ori astăzi. 2309 01:54:55,679 --> 01:54:58,261 Dar asta a fost doar așa că nu am trebuie să tastați cât mai multe caractere. 2310 01:54:58,261 --> 01:55:00,250 Tot ceea ce a schimbat aceste linii de cod sunt. 2311 01:55:00,250 --> 01:55:04,240 >> Aceste trei linii sunt identice, care se simte leneș și într-adevăr este, 2312 01:55:04,240 --> 01:55:07,110 și nu este, probabil, abordarea corectă. 2313 01:55:07,110 --> 01:55:11,029 Deci, cu ce ingredient am putea îmbunătăți acest cod? 2314 01:55:11,029 --> 01:55:12,570 Noi nu trebuie să copiați și inserați codul. 2315 01:55:12,570 --> 01:55:15,070 >> Si, intr-adevar, orice moment în care simți te copierea și lipirea, 2316 01:55:15,070 --> 01:55:17,700 și nici măcar schimbarea codului, cotele sunt că există o cale mai bună. 2317 01:55:17,700 --> 01:55:19,470 Și, într-adevăr, există. 2318 01:55:19,470 --> 01:55:22,510 Lasă-mă să merg mai departe și de a face o buclă, chiar dacă sintaxa nu s-ar putea 2319 01:55:22,510 --> 01:55:24,570 vin natural încă. 2320 01:55:24,570 --> 01:55:29,494 >> Fa acest lucru de trei ori, pur și simplu prin a face following-- 2321 01:55:29,494 --> 01:55:31,160 și se întâmplă să știu acest lucru din practică. 2322 01:55:31,160 --> 01:55:32,810 Dar avem un număr de exemple acum. 2323 01:55:32,810 --> 01:55:34,950 Și veți vedea on-line mai multe referințe încă. 2324 01:55:34,950 --> 01:55:37,790 >> Aceasta este sintaxa pe linia 6, că la fel ca Scratch care se repetă 2325 01:55:37,790 --> 01:55:40,090 bloc, se repetă următoarele trei ori. 2326 01:55:40,090 --> 01:55:41,340 Este un pic magic acum. 2327 01:55:41,340 --> 01:55:43,050 Dar acest lucru va primi mai mult, și mai familiare. 2328 01:55:43,050 --> 01:55:45,050 >> Și se va repeta linia opt de trei ori, 2329 01:55:45,050 --> 01:55:52,390 astfel că, dacă am re-compila make-tuse, dot slash tuse, tuse, tuse, tuse. 2330 01:55:52,390 --> 01:55:54,030 Acesta funcționează în continuare în același mod. 2331 01:55:54,030 --> 01:55:55,550 Deci asta e tot fin și bun. 2332 01:55:55,550 --> 01:55:58,200 Dar asta nu e foarte captată. 2333 01:55:58,200 --> 01:55:59,371 >> Este perfect corect. 2334 01:55:59,371 --> 01:56:01,370 Dar se simte ca acolo ar putea fi o oportunitate, 2335 01:56:01,370 --> 01:56:03,750 ca și în lumea Zero, la fel de pornire 2336 01:56:03,750 --> 01:56:07,530 pentru a adăuga unele semantica aici, astfel încât Nu am doar o bucla, 2337 01:56:07,530 --> 01:56:09,867 și o funcție care spune tuse, sau nu tuse. 2338 01:56:09,867 --> 01:56:10,450 Știi ce? 2339 01:56:10,450 --> 01:56:12,620 Lasă-mă să încerc să fie putin mai rece decât atât, 2340 01:56:12,620 --> 01:56:16,090 și de fapt, a scrie o funcție care are unele efecte secundare, o numesc tuse. 2341 01:56:16,090 --> 01:56:20,830 >> Și este nevoie de nici o intrare, și returnează nici o valoare ca ieșire. 2342 01:56:20,830 --> 01:56:22,680 Dar știi ce face? 2343 01:56:22,680 --> 01:56:29,370 Ea face astea-- printf, citat unquote, tuse. 2344 01:56:29,370 --> 01:56:32,380 >> Și acum aici, mă duc pentru a merge mai departe și pentru int 2345 01:56:32,380 --> 01:56:36,070 i devine zero i mai mic de 3, i, plus, plus. 2346 01:56:36,070 --> 01:56:39,770 Am de gând să nu fac printf, care este fără îndoială, un nivel scăzut de implementare 2347 01:56:39,770 --> 01:56:40,270 detaliu. 2348 01:56:40,270 --> 01:56:41,353 Nu-mi pasă cum de tuse. 2349 01:56:41,353 --> 01:56:43,240 Vreau doar să utilizați funcția de tuse. 2350 01:56:43,240 --> 01:56:44,840 Si eu doar o să sun tuse. 2351 01:56:44,840 --> 01:56:46,204 >> Acum, observați dihotomia. 2352 01:56:46,204 --> 01:56:49,370 Atunci când apelați o funcție, dacă nu doresc să-i dea intrările, total bine. 2353 01:56:49,370 --> 01:56:51,780 Doar face Paranteză deschise, close Paranteză, și ați terminat. 2354 01:56:51,780 --> 01:56:56,271 >> Atunci când definiți o funcție sau să declare prototipul unei funcții, a 2355 01:56:56,271 --> 01:56:58,770 dacă știi dinainte că nu e va lua orice argumente, 2356 01:56:58,770 --> 01:57:01,170 spun nule în acele paranteze acolo. 2357 01:57:01,170 --> 01:57:05,660 Și asta face sigur că nu va abuza în mod accidental. 2358 01:57:05,660 --> 01:57:07,020 Lasă-mă să merg mai departe și să facă tuse. 2359 01:57:07,020 --> 01:57:08,540 Și, desigur, am făcut o greșeală. 2360 01:57:08,540 --> 01:57:10,410 >> La naiba, e că Declarația implicită. 2361 01:57:10,410 --> 01:57:11,325 Dar asta e bine. 2362 01:57:11,325 --> 01:57:12,590 Este un remediu simplu. 2363 01:57:12,590 --> 01:57:18,240 Am nevoie doar de prototip mai sus în fișierul meu decât eu sunt de fapt, folosind. 2364 01:57:18,240 --> 01:57:20,070 >> Deci, acum lasă-mă să fac din nou tuse, frumos. 2365 01:57:20,070 --> 01:57:20,790 Acum, funcționează. 2366 01:57:20,790 --> 01:57:22,930 Asigurați-tuse, tuse, tuse, tuse. 2367 01:57:22,930 --> 01:57:25,930 Așa că s-ar putea crede că suntem într-adevăr doar puțin peste inginerie această problemă. 2368 01:57:25,930 --> 01:57:26,763 Si, intr-adevar, suntem. 2369 01:57:26,763 --> 01:57:28,870 Acest lucru nu este un bun candidat al unui program 2370 01:57:28,870 --> 01:57:31,930 in acest moment restructurează, și de a face ceea ce-i 2371 01:57:31,930 --> 01:57:35,645 numita descompunere ierarhică, în cazul în care vă luați un cod, și apoi 2372 01:57:35,645 --> 01:57:38,790 vă factor de fel de lucruri, asa ca să-i atribuie mai multe semantica lor, 2373 01:57:38,790 --> 01:57:40,930 și refolosirea-l în cele din urmă pe termen mai lung. 2374 01:57:40,930 --> 01:57:43,490 Dar este o piatră de temelie spre programe mai sofisticate 2375 01:57:43,490 --> 01:57:45,600 că vom începe scris, înainte de mult timp că 2376 01:57:45,600 --> 01:57:50,090 ne permite să avem vocabularul cu care să scrie cod mai bine. 2377 01:57:50,090 --> 01:57:52,920 Și, într-adevăr, să vedem dacă ne nu se poate generaliza această continuare. 2378 01:57:52,920 --> 01:57:57,984 >> Se pare un pic șchiop că eu, principal, Trebuie să vă faceți griji cu privire la acest lucru darn pentru bucla, 2379 01:57:57,984 --> 01:57:59,400 si de asteptare tuse din nou și din nou. 2380 01:57:59,400 --> 01:58:03,050 De ce nu pot spune doar tuse, vă rugăm să tuse de trei ori? 2381 01:58:03,050 --> 01:58:08,170 Cu alte cuvinte, de ce nu pot doar da de intrare pentru tuse și de a face acest lucru? 2382 01:58:08,170 --> 01:58:11,270 >> De ce nu pot doar să spun, în tuse principală de trei ori. 2383 01:58:11,270 --> 01:58:13,150 Și acum, acest lucru este un fel de magic. 2384 01:58:13,150 --> 01:58:14,540 Este foarte iterativ aici. 2385 01:58:14,540 --> 01:58:15,940 Și este, într-adevăr, un pas copil. 2386 01:58:15,940 --> 01:58:19,250 >> Dar, pur și simplu abilitatea de a spune pe linia opt, tuse de trei ori, 2387 01:58:19,250 --> 01:58:20,730 este doar atât de mult mai ușor de citit. 2388 01:58:20,730 --> 01:58:24,210 Și, în plus, nu trebuie să știu sau de îngrijire cum este pus în aplicare tuse. 2389 01:58:24,210 --> 01:58:26,460 Și, într-adevăr, mai târziu, în pe termen lung și pentru proiectele finale, 2390 01:58:26,460 --> 01:58:29,150 dacă ați aborda un proiect cu un coleg sau doi colegi, 2391 01:58:29,150 --> 01:58:32,370 vei realiza că vei trebuie, sau doriți să, împărțiți munca. 2392 01:58:32,370 --> 01:58:34,650 >> Si tu vei dori să decidă în avans, care va face ceea ce, 2393 01:58:34,650 --> 01:58:35,483 și în care piesele? 2394 01:58:35,483 --> 01:58:37,520 Si n-ar fi frumos în cazul în care, de exemplu, 2395 01:58:37,520 --> 01:58:40,100 se ocupa de scris principal, făcut. 2396 01:58:40,100 --> 01:58:43,470 Iar colegul tău de cameră, sau ta partener mai general, 2397 01:58:43,470 --> 01:58:45,230 are grijă de punere în aplicare a tusei. 2398 01:58:45,230 --> 01:58:49,540 >> Iar această divizare, acestea pereți de abstracție, 2399 01:58:49,540 --> 01:58:52,310 sau straturi de abstractizare dacă va, sunt super puternice, 2400 01:58:52,310 --> 01:58:55,480 deoarece în special pentru a mari, mai multe programe și sisteme complexe, 2401 01:58:55,480 --> 01:59:00,070 ea permite mai multor persoane să construiască lucruri împreună, și în cele din urmă 2402 01:59:00,070 --> 01:59:02,680 cusatura munca lor împreună în acest fel. 2403 01:59:02,680 --> 01:59:05,332 Dar, desigur, noi Trebuie să se stabilească acum tuse. 2404 01:59:05,332 --> 01:59:07,290 Trebuie să ne spunem tuse că, hei, știi ce? 2405 01:59:07,290 --> 01:59:11,230 Vei avea nevoie pentru a lua o input-- deci nu nule, dar int si acum. 2406 01:59:11,230 --> 01:59:15,170 Să mergem mai departe și a pus în tuse int. i devine zero. 2407 01:59:15,170 --> 01:59:16,890 >> i este mai mic de cât de multe ori. 2408 01:59:16,890 --> 01:59:18,550 Am spus trei înainte. 2409 01:59:18,550 --> 01:59:20,420 Dar asta nu e ceea ce vreau. 2410 01:59:20,420 --> 01:59:25,520 Vreau ca tuse să fie generalizate la sprijini orice număr de iterații. 2411 01:59:25,520 --> 01:59:28,800 >> Așa că, într-adevăr, este n că vreau, indiferent de utilizator îmi spune. 2412 01:59:28,800 --> 01:59:31,620 Acum, eu pot merge mai departe și spune tuse de imprimare. 2413 01:59:31,620 --> 01:59:34,750 Și nu contează ce număr utilizatorul trece în, 2414 01:59:34,750 --> 01:59:36,890 Voi repeta asta de multe ori. 2415 01:59:36,890 --> 01:59:39,160 >> Astfel, la sfârșitul zilei, Programul este identic. 2416 01:59:39,160 --> 01:59:42,820 Dar, observați toate aceste lucruri ar putea fi chiar și într-un alt fișier. 2417 01:59:42,820 --> 01:59:45,620 Într-adevăr, eu nu știu la cele mai moment, modul în care printf este pus în aplicare. 2418 01:59:45,620 --> 01:59:47,980 >> Nu știu în acest moment cum obține șir de caractere, sau pentru a obține int sau pentru a obține float 2419 01:59:47,980 --> 01:59:48,646 sunt puse în aplicare. 2420 01:59:48,646 --> 01:59:50,930 Si eu nu vreau să a le vedea pe ecran. 2421 01:59:50,930 --> 01:59:55,320 Așa cum este, eu încep să se concentreze asupra programul meu, nu aceste funcții. 2422 01:59:55,320 --> 01:59:59,070 >> Și așa, într-adevăr, de îndată ce vă incepe un cod ca acest factoring afară, 2423 01:59:59,070 --> 02:00:01,397 am putea muta chiar tuse într-un fișier separat? 2424 02:00:01,397 --> 02:00:02,730 Altcineva ar putea pune în aplicare. 2425 02:00:02,730 --> 02:00:06,810 Și tu și programul să devină foarte frumos, și foarte ușor de citit, 2426 02:00:06,810 --> 02:00:10,830 fără îndoială, într-adevăr patru program de linie dreapta si acolo. 2427 02:00:10,830 --> 02:00:13,510 >> Așa că hai să mergem mai departe acum și să facă o schimbare mai. 2428 02:00:13,510 --> 02:00:16,180 Observați că prototipul meu trebuie să se schimbe în sus de sus. 2429 02:00:16,180 --> 02:00:18,390 Deci să-mi repar asa Eu nu primesc tipat la. 2430 02:00:18,390 --> 02:00:22,580 >> Asigurați-vă tuse, permiteți-mi să executați tuse o dată mai mult, încă mai face același lucru. 2431 02:00:22,580 --> 02:00:26,010 Dar acum, observați avem un ingredient pentru o versiune finală. 2432 02:00:26,010 --> 02:00:26,940 Știi ce? 2433 02:00:26,940 --> 02:00:29,040 Nu vreau să tuse doar, în mod necesar. 2434 02:00:29,040 --> 02:00:30,802 Vreau să am ceva mai general. 2435 02:00:30,802 --> 02:00:31,510 Deci, tu ce știi? 2436 02:00:31,510 --> 02:00:32,450 Vreau să fac acest lucru. 2437 02:00:32,450 --> 02:00:37,140 Vreau să am, la fel ca zero nu, un bloc să zicem, dar nu doar 2438 02:00:37,140 --> 02:00:38,680 spune ceva unele de mai multe ori. 2439 02:00:38,680 --> 02:00:41,510 Vreau să spun un șir de caractere foarte specific. 2440 02:00:41,510 --> 02:00:43,850 Și, de aceea, eu nu fac doresc să spun doar tuse. 2441 02:00:43,850 --> 02:00:47,660 Vreau să spun orice șir este trecut în. 2442 02:00:47,660 --> 02:00:49,960 >> Așa că observați, am generalizat acest lucru, astfel încât acum 2443 02:00:49,960 --> 02:00:53,110 să zicem se simte ca un nume bun pentru acest lucru, cum ar fi zero, 2444 02:00:53,110 --> 02:00:55,530 ia două argumente, spre deosebire de zero. 2445 02:00:55,530 --> 02:00:56,570 Una dintre ele este un șir de caractere. 2446 02:00:56,570 --> 02:00:57,300 Una dintre ele este un int. 2447 02:00:57,300 --> 02:00:58,130 >> Și aș putea să le schimba. 2448 02:00:58,130 --> 02:01:00,713 Am doar un fel de ca ideea de spun șirul întâi, și apoi 2449 02:01:00,713 --> 02:01:01,940 De câte ori mai târziu. 2450 02:01:01,940 --> 02:01:03,970 Nule înseamnă încă nu se întoarce nimic. 2451 02:01:03,970 --> 02:01:06,428 Acestea sunt doar partea vizuala efecte, cum ar fi cu [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 un efect secundar verbal de țipete. 2453 02:01:08,240 --> 02:01:12,630 Încă mai are ceva de n ori, 0 până la, dar nu este egal cu n. 2454 02:01:12,630 --> 02:01:14,540 Acest lucru înseamnă că n total de ori. 2455 02:01:14,540 --> 02:01:16,540 Și apoi imprimați doar afară oricare ar fi acel șir este. 2456 02:01:16,540 --> 02:01:19,060 Așa că am generalizat într-adevăr această linie de cod. 2457 02:01:19,060 --> 02:01:22,460 Deci, acum, cum pot pune în aplicare funcția de tuse? 2458 02:01:22,460 --> 02:01:25,520 >> Pot face nule tuse. 2459 02:01:25,520 --> 02:01:28,501 Si eu pot lua în continuare în modul în care de multe ori doriți să tuse. 2460 02:01:28,501 --> 02:01:29,250 Dar știi ce? 2461 02:01:29,250 --> 02:01:31,240 Pot să punt acum să spun. 2462 02:01:31,240 --> 02:01:36,540 >> Pot să sun spune împreună cu cuvânt tuse, trecând în n. 2463 02:01:36,540 --> 02:01:40,410 Și, dacă vreau să pună în aplicare, de asemenea, doar pentru distracție, o funcție de strănut, 2464 02:01:40,410 --> 02:01:42,290 Pot să strănute unele de mai multe ori. 2465 02:01:42,290 --> 02:01:47,300 Și eu pot păstra refolosirii n, deoarece observă că, în acest context m sau domeniu de aplicare 2466 02:01:47,300 --> 02:01:49,470 există numai în această funcție. 2467 02:01:49,470 --> 02:01:52,767 >> Și n, în acest context, numai există în această funcție aici. 2468 02:01:52,767 --> 02:01:54,600 Așa că ne vom întoarce la aceste aspecte legate de domeniul de aplicare. 2469 02:01:54,600 --> 02:02:01,160 Si aici, eu doar o să spun, achoo, și apoi de n ori, semi-colon. 2470 02:02:01,160 --> 02:02:04,340 >> Și acum, am nevoie doar să împrumute aceste funcții semnături aici. 2471 02:02:04,340 --> 02:02:06,290 Așa că tusea este corectă. 2472 02:02:06,290 --> 02:02:10,090 strănut nule este corectă acum. 2473 02:02:10,090 --> 02:02:12,390 >> Si mai am nevoie doar să spun. 2474 02:02:12,390 --> 02:02:18,990 Așa că am de gând să spun, să zicem șir de caractere s, int n, semi-colon. 2475 02:02:18,990 --> 02:02:22,010 Așa că am supra-proiectând heck din acest program. 2476 02:02:22,010 --> 02:02:23,760 >> Și acest lucru nu înseamnă neapărat acest lucru este 2477 02:02:23,760 --> 02:02:26,343 ceea ce ar trebui să faci atunci când scrieți chiar și cele mai simple programe. 2478 02:02:26,343 --> 02:02:29,280 Ia-ceva care este în mod evident într-adevăr simplu, într-adevăr scurt, 2479 02:02:29,280 --> 02:02:31,800 și re-l pună în aplicare folosind prea mult cod. 2480 02:02:31,800 --> 02:02:34,560 Dar, veți vedea de fapt, și în timp privi înapoi la aceste exemple, 2481 02:02:34,560 --> 02:02:38,610 și își dau seama, oh, acestea sunt etapele am luat pentru a generaliza, de fapt, 2482 02:02:38,610 --> 02:02:40,797 la factorul ceva, până la sfârșitul zilei 2483 02:02:40,797 --> 02:02:42,380 codul meu este de fapt destul de rezonabil. 2484 02:02:42,380 --> 02:02:45,960 Pentru că dacă vreau să tuse trei ori, apoi trage pe nas de trei ori, 2485 02:02:45,960 --> 02:02:50,420 Sunt pur și simplu o să rulați din nou acest lucru, program de a face tuse, și a alerga tuse. 2486 02:02:50,420 --> 02:02:53,620 Si am trei tușește și trei stranuta. 2487 02:02:53,620 --> 02:02:55,990 >> Si deci aceasta este o bază paradigmă, dacă va fi, 2488 02:02:55,990 --> 02:03:00,110 pentru modul în care am putea merge despre punerea în aplicare a unui program de fapt. 2489 02:03:00,110 --> 02:03:03,220 Dar, hai să vedem acum ce este am făcut tot acest timp, 2490 02:03:03,220 --> 02:03:06,940 și ce unele dintre piesele finale sunt în spatele acestei comenzi simple. 2491 02:03:06,940 --> 02:03:09,620 La sfârșitul zilei, ne-am fost folosind zăngănit ca compilator nostru. 2492 02:03:09,620 --> 02:03:11,494 Ne-am scris sursa cod, aceasta conversie 2493 02:03:11,494 --> 02:03:12,820 prin zăngănit în cod mașină. 2494 02:03:12,820 --> 02:03:15,540 >> Și am folosit face doar pentru a facilita intrarile de la tastatura noastre, astfel 2495 02:03:15,540 --> 02:03:20,740 că noi nu trebuie să ne amintim aceste incantatii de zăngănit în sine. 2496 02:03:20,740 --> 02:03:22,640 Dar ceea ce este de a face de fapt face? 2497 02:03:22,640 --> 02:03:24,750 Și, la rândul său, ceea ce este Zăngăni face de fapt? 2498 02:03:24,750 --> 02:03:28,790 >> Se pare, deși am simplificat discuția de astăzi prin a spune, 2499 02:03:28,790 --> 02:03:33,090 luați codul sursă, să-l dați ca intrare la un compilator, care vă oferă 2500 02:03:33,090 --> 02:03:35,750 Producția de mașini cod, se pare că nu există 2501 02:03:35,750 --> 02:03:37,420 câțiva pași diferite în interiorul acolo. 2502 02:03:37,420 --> 02:03:41,940 Și compilării se întâmplă să fie umbrela pe termen lung pentru o întreagă grămadă de pași. 2503 02:03:41,940 --> 02:03:43,970 Dar, hai să șicana asta foarte repede. 2504 02:03:43,970 --> 02:03:48,070 >> Se pare că ne-am făcut mai multe lucruri de fiecare dată când am rula un program, 2505 02:03:48,070 --> 02:03:50,990 sau de fiecare dată când am compila un program de astăzi. 2506 02:03:50,990 --> 02:03:55,020 Deci preprocesare se referă la astea-- ceva într-un program de C, 2507 02:03:55,020 --> 02:03:58,720 după cum vom vedea din nou și din nou, care începe cu acest simbol hash, 2508 02:03:58,720 --> 02:04:03,320 sau simbolul hashtag aici, înseamnă este o directivă preprocesor. 2509 02:04:03,320 --> 02:04:07,330 Asta înseamnă că, în acest caz, hei calculator, face ceva cu acest fișier 2510 02:04:07,330 --> 02:04:09,430 înainte de a compila de fapt propriul meu cod. 2511 02:04:09,430 --> 02:04:15,220 >> În acest caz, hash includ este, în esență, modul de a spune lui C, 2512 02:04:15,220 --> 02:04:19,325 hei calculator, du-te conținutul din CS50.h și lipiți-le aici. 2513 02:04:19,325 --> 02:04:22,170 Hei calculator, adu conținutul standardului IO.h, 2514 02:04:22,170 --> 02:04:24,690 ori de câte ori este pe hard disk, lipiți-l aici. 2515 02:04:24,690 --> 02:04:27,390 Așa că aceste lucruri se întâmplă în primul rând în timpul preprocesare. 2516 02:04:27,390 --> 02:04:28,880 >> Și zăngănit face toate astea pentru noi. 2517 02:04:28,880 --> 02:04:30,510 Și se face acest lucru darn rapid, tu nici măcar nu 2518 02:04:30,510 --> 02:04:32,000 a se vedea patru lucruri distincte se întâmplă. 2519 02:04:32,000 --> 02:04:34,100 Dar asta e prima astfel de pas. 2520 02:04:34,100 --> 02:04:35,560 >> Ce se întâmplă de fapt în continuare? 2521 02:04:35,560 --> 02:04:38,320 Ei bine, următorul oficial pas este compilarea. 2522 02:04:38,320 --> 02:04:40,385 Și se pare că compilarea unui program de 2523 02:04:40,385 --> 02:04:44,060 înseamnă punct de vedere tehnic merge de la codul sursă, lucrurile pe care le-am 2524 02:04:44,060 --> 02:04:47,890 a fost scris astăzi, la ceva numitul cod de asamblare, ceva 2525 02:04:47,890 --> 02:04:49,260 care arată un pic diferit. 2526 02:04:49,260 --> 02:04:51,050 >> Și, de fapt, putem vedea acest lucru foarte repede. 2527 02:04:51,050 --> 02:04:53,890 Lasă-mă să merg de fapt în IDE meu. 2528 02:04:53,890 --> 02:04:58,050 Lasă-mă să merg mai departe și hello.c deschis, care este primul program, cu care noi 2529 02:04:58,050 --> 02:04:59,120 a început astăzi. 2530 02:04:59,120 --> 02:05:04,130 Și lasă-mă să merg mai departe și a alerga un zăngănit putin diferit, zăngănit-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 care este, de fapt va da-mi un alt hello.s fișier. 2532 02:05:07,720 --> 02:05:10,330 >> Și probabil nu vom din nou, a se vedea acest tip de cod. 2533 02:05:10,330 --> 02:05:13,030 Dacă ați avea un nivel mai scăzut clasa de sisteme cum ar fi CS61, 2534 02:05:13,030 --> 02:05:14,920 veți vedea mult mai mult de acest tip de cod. 2535 02:05:14,920 --> 02:05:17,020 Dar acest lucru este limbaj de asamblare. 2536 02:05:17,020 --> 02:05:22,050 Aceasta este X86 limbaj de asamblare că procesorul care stau la baza 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE de fapt o înțelege. 2538 02:05:24,460 --> 02:05:27,060 >> Și criptic așa cum o face uite, este ceva 2539 02:05:27,060 --> 02:05:29,180 computerul înțelege destul de bine. 2540 02:05:29,180 --> 02:05:30,790 Sub q, aceasta este o scădere. 2541 02:05:30,790 --> 02:05:31,660 Nu există mișcări. 2542 02:05:31,660 --> 02:05:35,730 >> Au sunat de funcții aici, x Oring, o mișcare, un program, o poziție favorabilă, 2543 02:05:35,730 --> 02:05:36,430 O întoarcere. 2544 02:05:36,430 --> 02:05:38,850 Așa că există unele foarte instrucțiuni de nivel scăzut 2545 02:05:38,850 --> 02:05:41,280 că procesoarele să înțeleagă că Am făcut aluzie la mai devreme. 2546 02:05:41,280 --> 02:05:43,100 Asta este ceea ce Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Exista modele de zero-uri și cele care 2548 02:05:45,030 --> 02:05:51,800 harta acestora formulată după arcanely, dar oarecum bine numit, instrucțiuni, 2549 02:05:51,800 --> 02:05:52,780 ca sa zicem asa. 2550 02:05:52,780 --> 02:05:54,780 Asta este ceea ce se întâmplă atunci când compilarea codul. 2551 02:05:54,780 --> 02:05:58,560 Primești asamblare limba din ea, care 2552 02:05:58,560 --> 02:06:04,680 reprezintă al treilea pas este de a asambla că codul de asamblare în, în cele din urmă, 2553 02:06:04,680 --> 02:06:09,080 masina de zero-uri code-- și cele, nu, textul pe care tocmai l-am văzut acum un moment. 2554 02:06:09,080 --> 02:06:13,370 >> Așa că pre-procesare nu găsi că și înlocuiți, și alte câteva lucruri. 2555 02:06:13,370 --> 02:06:16,430 Compilarea ia sursa ta cod de la C, codul sursă 2556 02:06:16,430 --> 02:06:18,980 pe care am scris, de asamblare cod care tocmai ne-am aruncat o privire. 2557 02:06:18,980 --> 02:06:22,170 Asamblare reușește ca asamblarea cod și cele zerouri 2558 02:06:22,170 --> 02:06:24,680 că procesorul într-adevăr va înțeleagă, la sfârșitul zilei. 2559 02:06:24,680 --> 02:06:27,630 Și legarea este ultimul pas acest lucru se întâmplă pentru us-- din nou, 2560 02:06:27,630 --> 02:06:29,830 atât de repede nici măcar nu notice-- care spune, 2561 02:06:29,830 --> 02:06:32,460 hei calculator, să ia toate zerouri și cele care 2562 02:06:32,460 --> 02:06:36,750 a rezultat din compilarea codului lui David, și funcția sa principală în acest caz. 2563 02:06:36,750 --> 02:06:39,160 >> Și hei calculator, du-te toate zero-uri și cele 2564 02:06:39,160 --> 02:06:42,180 că personalul CS50 a scris în interiorul bibliotecii CS50. 2565 02:06:42,180 --> 02:06:43,440 Se amestecă cele cu cel al lui David. 2566 02:06:43,440 --> 02:06:46,648 Și hei calculator, du-te cu toate tipurile de zerouri și cele pe care altcineva a scris ani 2567 02:06:46,648 --> 02:06:47,470 în urmă pentru printf. 2568 02:06:47,470 --> 02:06:49,880 Și adăugați cei în Toată chestia asta, așa că ne-am 2569 02:06:49,880 --> 02:06:52,870 recuperează zerouri și cele mei, zero-uri și cei ai personalului CS50 lui, 2570 02:06:52,870 --> 02:06:55,370 zerouri printf și cele, și orice altceva pe care îl utilizăm. 2571 02:06:55,370 --> 02:07:00,410 >> Toti isi vor combinate împreună într-un singur program numit, în acest caz, salut. 2572 02:07:00,410 --> 02:07:03,141 Așa că de acum înainte, vom face doar utilizați compilarea cuvântul. 2573 02:07:03,141 --> 02:07:06,390 Și vom lua de la sine înțeles că, atunci când noi spunem, compila programul, aceasta înseamnă, 2574 02:07:06,390 --> 02:07:08,849 hei face pre-procesare, asamblarea și conectarea. 2575 02:07:08,849 --> 02:07:11,890 Dar, de fapt, există unele chestii suculente se întâmplă acolo sub capota. 2576 02:07:11,890 --> 02:07:13,723 Și, mai ales dacă obține curios ceva timp, 2577 02:07:13,723 --> 02:07:15,900 puteți începe poking în jurul valorii de la acest nivel inferior. 2578 02:07:15,900 --> 02:07:19,660 Dar, pentru moment, dau seama că printre takeaways pentru ziua de azi 2579 02:07:19,660 --> 02:07:23,420 sunt destul de simplu începutul unui proces, 2580 02:07:23,420 --> 02:07:26,700 de a obține confortabil cu ceva ca lumea bună. 2581 02:07:26,700 --> 02:07:29,575 Intr-adevar, cele mai multe din ceea ce am făcut astăzi cu siguranță nu se va scufunda în super-rapid. 2582 02:07:29,575 --> 02:07:31,491 Și va dura ceva timp, și unele practici. 2583 02:07:31,491 --> 02:07:33,864 Și cote sunt, vă va sorta din care doriți să lovească tastatura 2584 02:07:33,864 --> 02:07:34,780 sau tipa la ecran. 2585 02:07:34,780 --> 02:07:35,880 Si toate astea e în regulă. 2586 02:07:35,880 --> 02:07:38,320 Cu toate că, probabil, încearcă să nu fă-o în bibliotecă atât de mult. 2587 02:07:38,320 --> 02:07:40,820 >> Și, în cele din urmă, veți să fie în măsură, deși, pentru a începe 2588 02:07:40,820 --> 02:07:44,580 văzând modele, atât în ​​cod bun pe care le-ați scris și în greșeli 2589 02:07:44,580 --> 02:07:45,370 pe care le-ați făcut. 2590 02:07:45,370 --> 02:07:48,965 Și, la fel ca procesul de devenind un TF sau o CA este ca, 2591 02:07:48,965 --> 02:07:51,590 veți începe pentru a obține o mai bună și mai bine la a vedea aceste modele, 2592 02:07:51,590 --> 02:07:53,774 și doar rezolvarea ta propriile probleme în cele din urmă. 2593 02:07:53,774 --> 02:07:56,940 Între timp, vor exista o multime dintre noi pentru a împrumuta sprijin, și veți obține 2594 02:07:56,940 --> 02:07:57,481 prin asta. 2595 02:07:57,481 --> 02:07:59,450 Și în a scrie-up-uri pentru toate problemele 2596 02:07:59,450 --> 02:08:01,366 vei fi ghidat prin toate comenzile 2597 02:08:01,366 --> 02:08:05,330 că știu cu siguranță de la o mulțime de practică până acum, 2598 02:08:05,330 --> 02:08:07,380 dar ar fi putut să zboare deasupra capului pentru acum. 2599 02:08:07,380 --> 02:08:08,580 Și asta e total bine. 2600 02:08:08,580 --> 02:08:11,230 >> Dar, în cele din urmă, vei pentru a începe să vadă modele de emerge. 2601 02:08:11,230 --> 02:08:14,260 Și odată ce ai trecut cele de mai detalii stupide, cum ar fi paranteze, 2602 02:08:14,260 --> 02:08:16,710 și acolade și virgulele, și lucrurile, sincer, 2603 02:08:16,710 --> 02:08:19,360 care nu este deloc intelectual interesant. 2604 02:08:19,360 --> 02:08:22,690 Și nu este obiectivul luând orice clasă introductivă. 2605 02:08:22,690 --> 02:08:24,410 Este ideile care vor să conteze. 2606 02:08:24,410 --> 02:08:26,659 >> Este buclele, și Condițiile și funcțiile, 2607 02:08:26,659 --> 02:08:30,552 și mai puternic captarea, și factoring de cod, 2608 02:08:30,552 --> 02:08:33,510 și design bun, și bun stil, și în cele din urmă corectitudinea 2609 02:08:33,510 --> 02:08:37,330 a codului, care este în cele din urmă va conta cel mai mult. 2610 02:08:37,330 --> 02:08:40,925 Așa că săptămâna viitoare, vom lua aceste idei pe care le-am văzut pentru prima dată în Scratch 2611 02:08:40,925 --> 02:08:42,800 și s-au tradus acum C. Și vom începe 2612 02:08:42,800 --> 02:08:45,740 să introducă prima dintre cele domenii din lumea reala curs lui. 2613 02:08:45,740 --> 02:08:50,140 >> Ne vom concentra asupra lumii de securitate, și mai precis criptografie, 2614 02:08:50,140 --> 02:08:51,980 arta de codare a informațiilor. 2615 02:08:51,980 --> 02:08:54,000 Și printre primii te probleme de tine 2616 02:08:54,000 --> 02:08:56,840 va ajunge să scrie dincolo juca cu unele din sintaxa 2617 02:08:56,840 --> 02:08:59,880 și rezolvarea unor logice probleme, în cele din urmă înainte de mult timp, 2618 02:08:59,880 --> 02:09:03,960 este de fapt pentru a încăierare, sau cripta, și în cele din urmă decripta informații. 2619 02:09:03,960 --> 02:09:06,470 Si tot ce am făcut astăzi, va destul de scăzută 2620 02:09:06,470 --> 02:09:09,190 nivel, este pur și simplu va permite ne să ia una, și una, 2621 02:09:09,190 --> 02:09:13,550 și încă un pas spre mai sus scris încă codul cel mai interesant. 2622 02:09:13,550 --> 02:09:15,050 >> Cu atât mai mult pe săptămâna viitoare. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [REDARE VIDEO] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Ce poți să-mi spui despre ultima dată când l-ai văzut? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 Ce pot să spun, într-adevăr? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Adică, a fost ca oricare alt repetiție pre-producție, 2631 02:09:35,340 --> 02:09:40,510 cu excepția era ceva, a spus el la sfârșit, care a ramas cu mine. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -acest A fost CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> Asta e toată lumea tăiat, mare de locuri de muncă la repetiții. 2636 02:09:52,190 --> 02:09:53,070 >> prânzul -Asta? 2637 02:09:53,070 --> 02:09:54,986 >> Da, tu și eu pot apuca un sandwich într-un pic. 2638 02:09:54,986 --> 02:09:58,380 Lasă-mă doar cu interogheze David foarte repede. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END REDARE]