1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Secțiunea 4] [mai puțin confortabilă] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Universitatea Harvard] 3 00:00:04,000 --> 00:00:07,000 [Acest lucru este CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> În regulă, bine ai venit înapoi la secțiunea. 5 00:00:10,000 --> 00:00:13,000 În secțiunea din această săptămână vom face o serie de lucruri. 6 00:00:13,000 --> 00:00:17,000 Mergem să setați mai întâi problema recapitulare 2, 7 00:00:17,000 --> 00:00:20,000 care este un set problema Cezar și Vigenere. 8 00:00:20,000 --> 00:00:23,000 Și apoi vom arunca cu capul în Quiz comentariu 0 9 00:00:23,000 --> 00:00:26,000 și petrece un pic de timp recapping ceea ce am vorbit despre 10 00:00:26,000 --> 00:00:30,000 în fiecare din cele prelegeri până acum, și vom face, de asemenea, câteva probleme 11 00:00:30,000 --> 00:00:32,000 la concursuri anului precedent. 12 00:00:32,000 --> 00:00:36,000 În acest fel voi avea o bună modalitate de a se pregăti pentru asta. 13 00:00:36,000 --> 00:00:40,000 >> Pentru a începe, am pornit o pereche de soluții bune 14 00:00:40,000 --> 00:00:45,000 pentru setul de problema anterioară, problema Set 2, în acest spațiu. 15 00:00:45,000 --> 00:00:48,000 Dacă voi lovi toate aceste link-ul, 16 00:00:48,000 --> 00:00:53,000 și dacă faceți clic pe numele meu și faceți clic pe prima mea revizuire 17 00:00:53,000 --> 00:00:56,000 veți vedea caesar.c, care este exact ceea ce caut eu la. 18 00:00:56,000 --> 00:01:00,000 Hai să vorbim despre asta foarte repede. 19 00:01:00,000 --> 00:01:02,000 Aceasta este doar o soluție de probă. 20 00:01:02,000 --> 00:01:05,000 Acest lucru nu este neapărat soluția perfectă. 21 00:01:05,000 --> 00:01:08,000 Există multe moduri diferite de a scrie acest lucru, 22 00:01:08,000 --> 00:01:10,000 dar există câteva lucruri pe care am vrut să subliniez 23 00:01:10,000 --> 00:01:13,000 că am văzut cum am fost triat, greseli comune pe care cred că 24 00:01:13,000 --> 00:01:18,000 această soluție face o treabă foarte bună de manipulare. 25 00:01:18,000 --> 00:01:22,000 >> Prima are un fel de comentariu antet în partea de sus. 26 00:01:22,000 --> 00:01:25,000 Pe liniile 1 până la 7 veți vedea detaliile, 27 00:01:25,000 --> 00:01:28,000 exact ceea ce acest program este de a face. 28 00:01:28,000 --> 00:01:32,000 O bună practică standard, atunci când scrii cod C 29 00:01:32,000 --> 00:01:35,000 indiferent dacă programul dumneavoastră este conținută într-un singur fișier sau 30 00:01:35,000 --> 00:01:38,000 fie că este vorba împărțită pe mai multe fișiere este de a avea un fel de 31 00:01:38,000 --> 00:01:40,000 orientarea comentariu în partea de sus. 32 00:01:40,000 --> 00:01:43,000 Acest lucru este, de asemenea, pentru persoanele care ies și să scrie cod în lumea reală. 33 00:01:43,000 --> 00:01:47,000 Acest lucru este în cazul în care vor pune informatii de copyright. 34 00:01:47,000 --> 00:01:50,000 Mai jos sunt include #. 35 00:01:50,000 --> 00:01:55,000 Pe linia 16 e un # define, pe care ne vom întoarce la doar un pic. 36 00:01:55,000 --> 00:01:59,000 Și apoi, o dată funcția începe, începe o dată principale, 37 00:01:59,000 --> 00:02:03,000 pentru că acest program a fost toate cuprinse într-o singură funcție 38 00:02:03,000 --> 00:02:09,000 Primul lucru care se întâmplă și acest lucru este foarte idiomatice și tipic al unui program C 39 00:02:09,000 --> 00:02:14,000 care să ia în linia de comandă argumente-este că imediat verifică 40 00:02:14,000 --> 00:02:18,000 >> pentru numărul de argument, argc. 41 00:02:18,000 --> 00:02:24,000 Chiar aici vedem că acest program se așteaptă la 2 argumente exact. 42 00:02:24,000 --> 00:02:27,000 Amintiți-vă că nu există argument în primul rând că e una specială 43 00:02:27,000 --> 00:02:29,000 asta e întotdeauna numele programului care a fost executați, 44 00:02:29,000 --> 00:02:31,000 numele fișierului executabil. 45 00:02:31,000 --> 00:02:36,000 Și deci ce acest lucru nu este împiedică utilizatorul să ruleze programul de 46 00:02:36,000 --> 00:02:42,000 cu argumente mai mult sau mai puține. 47 00:02:42,000 --> 00:02:44,000 Motivul pentru care doriți să verificați pentru acest lucru imediat, deoarece este 48 00:02:44,000 --> 00:02:52,000 nu putem accesa de fapt, această matrice argv chiar aici fiabil 49 00:02:52,000 --> 00:02:55,000 până când ne-am verificat pentru a vedea cât de mare este. 50 00:02:55,000 --> 00:02:58,000 >> Una dintre cele mai comune erori am văzut a fost oamenii ar merge imediat în 51 00:02:58,000 --> 00:03:01,000 si apuca argv [1]. 52 00:03:01,000 --> 00:03:06,000 Ei ar apuca argumentul-cheie din matrice și nu o să-mi verific pe el, 53 00:03:06,000 --> 00:03:11,000 si apoi le-ar face testul pentru argc, precum și următorul test, 54 00:03:11,000 --> 00:03:16,000 indiferent dacă sunt sau nu primul argument a fost într-adevăr un număr întreg, în același timp, 55 00:03:16,000 --> 00:03:20,000 și că nu funcționează pentru că, în cazul în care nu există argumente furnizate 56 00:03:20,000 --> 00:03:26,000 vei fi hapsân un argument care nu este acolo sau încercarea de a apuca unul care nu este acolo. 57 00:03:26,000 --> 00:03:29,000 >> Un alt lucru important pe care ar trebui să observați faptul că este 58 00:03:29,000 --> 00:03:32,000 vrei mereu să imprime un fel de mesaj de eroare este utill 59 00:03:32,000 --> 00:03:34,000 a utilizatorului să le orienteze. 60 00:03:34,000 --> 00:03:37,000 Sunt sigur că ați toate programele pe termen în cazul în care dintr-o dată se avariază, 61 00:03:37,000 --> 00:03:41,000 și veți obține acest dialog pic ridicol că apare și spune 62 00:03:41,000 --> 00:03:44,000 ceva oribil criptic și poate vă oferă un cod de eroare sau ceva de genul asta 63 00:03:44,000 --> 00:03:47,000 care nu face nici un sens. 64 00:03:47,000 --> 00:03:50,000 Acest lucru este în cazul în care doriți cu adevărat să ofere ceva de ajutor 65 00:03:50,000 --> 00:03:54,000 și direcționate către utilizator, astfel că, atunci când l-au alerga ei merg "Oh," fata de palmier. 66 00:03:54,000 --> 00:03:58,000 "Eu știu exact ce să fac eu știu cum să se stabilească acest lucru.". 67 00:03:58,000 --> 00:04:01,000 >> Dacă nu se imprimă un mesaj, apoi va ajunge de fapt, 68 00:04:01,000 --> 00:04:04,000 lăsând utilizatorul să meargă examina codul sursă 69 00:04:04,000 --> 00:04:07,000 să dau seama ce a mers prost. 70 00:04:07,000 --> 00:04:11,000 Există, de asemenea, unele momente pe care le veți folosi diferite coduri de eroare. 71 00:04:11,000 --> 00:04:14,000 Aici am folosit doar o să spun că a fost o eroare, 72 00:04:14,000 --> 00:04:16,000 A apărut o eroare, nu a fost o eroare. 73 00:04:16,000 --> 00:04:20,000 Programe mai mari, de multe ori programele care sunt numite de către alte programe, 74 00:04:20,000 --> 00:04:25,000 va returna un fel de coduri de eroare speciale în diferite scenarii 75 00:04:25,000 --> 00:04:28,000 de a comunica programatic ceea ce ar fi altfel 76 00:04:28,000 --> 00:04:32,000 utilizați doar un mesaj frumos engleză pentru. 77 00:04:32,000 --> 00:04:35,000 Mișto. 78 00:04:35,000 --> 00:04:37,000 Așa cum vom lucra în jos, puteți vedea vom trage afară cheie. 79 00:04:37,000 --> 00:04:40,000 Am testa pentru a vedea dacă se potrivește cheia. 80 00:04:40,000 --> 00:04:42,000 Primim un mesaj de la utilizatorul. 81 00:04:42,000 --> 00:04:46,000 Motivul pentru care o facem în acest do-while și acest lucru este ceva care ne va acoperi 82 00:04:46,000 --> 00:04:50,000 într-un pic, dar se pare că, dacă tastați controlul D 83 00:04:50,000 --> 00:04:54,000 atunci când vei ajunge ca getString promptă pe terminalul 84 00:04:54,000 --> 00:04:59,000 ce de fapt nu este acesta trimite un caracter special 85 00:04:59,000 --> 00:05:01,000 la program. 86 00:05:01,000 --> 00:05:05,000 Se numește ELF sau sfârșitul fișierului de caracter. 87 00:05:05,000 --> 00:05:08,000 Și în acest caz, șirul mesajul nostru va fi nulă, 88 00:05:08,000 --> 00:05:14,000 deci acest lucru nu a fost ceva ne-am cazat la problema stabilit. 89 00:05:14,000 --> 00:05:17,000 >> Dar, așa cum am merge mai departe, acum că am început să vorbim despre pointeri 90 00:05:17,000 --> 00:05:21,000 și alocarea dinamică a memoriei pe heap, 91 00:05:21,000 --> 00:05:25,000 verificarea nul ori de câte ori aveți o funcție care ar putea 92 00:05:25,000 --> 00:05:30,000 intoarce null ca valoare este ceva pe care veți dori să obțineți în obiceiul de a face. 93 00:05:30,000 --> 00:05:33,000 Acest lucru este în primul rând aici pentru ilustrare. 94 00:05:33,000 --> 00:05:36,000 Dar când te văd getString în viitor, 95 00:05:36,000 --> 00:05:41,000 astfel de problema pe Set 4, veți dori să păstrați în vedere acest lucru. 96 00:05:41,000 --> 00:05:44,000 Din nou, acest lucru nu este o problemă pentru problema Set 3 ori, deoarece nu am l-au acoperit încă. 97 00:05:44,000 --> 00:05:53,000 În cele din urmă, ajungem la prezenta parte în cazul în care vom ajunge la bucla de criptare principală, 98 00:05:53,000 --> 00:05:57,000 și există o serie de lucruri se întâmplă pe aici. 99 00:05:57,000 --> 00:06:02,000 În primul rând, am repeta peste șirul întregul mesaj în sine. 100 00:06:02,000 --> 00:06:07,000 Aici ne-am păstrat apel strlen în stare, 101 00:06:07,000 --> 00:06:12,000 care un număr dintre voi au subliniat nu este o modalitate foarte bună de a merge. 102 00:06:12,000 --> 00:06:15,000 Se pare, în acest caz, nu este, de asemenea, o mare, 103 00:06:15,000 --> 00:06:20,000 în parte pentru că suntem modificarea conținutul mesajului în sine 104 00:06:20,000 --> 00:06:27,000 în interiorul pentru bucla, deci, dacă avem un mesaj care este de 10 caractere, 105 00:06:27,000 --> 00:06:32,000 prima dată când am începe ca pentru bucla strlen va reveni ce? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Dar dacă vom modifica, atunci mesajul, spune vom modifica caracterul său cincea, 108 00:06:40,000 --> 00:06:46,000 și ne arunca intr-un \ 0 caracter în locul 5, 109 00:06:46,000 --> 00:06:49,000 pe o repetare ulterioară strlen (mesaj) nu va returna ceea ce a făcut 110 00:06:49,000 --> 00:06:52,000 prima dată am reiterat, 111 00:06:52,000 --> 00:06:56,000 dar va reveni în locul 5, deoarece am aruncat în terminator nul, 112 00:06:56,000 --> 00:06:59,000 și lungimea string este definită 113 00:06:59,000 --> 00:07:03,000 de poziția pe care \ 0. 114 00:07:03,000 --> 00:07:09,000 În acest caz, aceasta este o modalitate foarte bună de a merge pentru că noi îl modificarea în loc. 115 00:07:09,000 --> 00:07:13,000 Dar observați că acest lucru este de fapt surprinzator de simplu pentru a cripta 116 00:07:13,000 --> 00:07:16,000 în cazul în care puteți obține matematica corecta. 117 00:07:16,000 --> 00:07:19,000 Tot ce este necesar este de a verifica dacă este sau nu scrisoarea pe care îl căutați la 118 00:07:19,000 --> 00:07:21,000 este mari sau mici. 119 00:07:21,000 --> 00:07:24,000 >> Motivul pentru care trebuie doar pentru a verifica faptul că și noi nu trebuie să verificați 120 00:07:24,000 --> 00:07:27,000 caz este alfa este că 121 00:07:27,000 --> 00:07:30,000 în cazul în care un personaj este majusculă sau daca e cu litere mici 122 00:07:30,000 --> 00:07:33,000 atunci e cu siguranta un caracter alfabetic, 123 00:07:33,000 --> 00:07:38,000 pentru că nu avem cifre mari și mici. 124 00:07:38,000 --> 00:07:41,000 Un alt lucru facem și acest lucru este un pic cam complicat, 125 00:07:41,000 --> 00:07:45,000 este am modificat standardul Cezar cifrul formulei 126 00:07:45,000 --> 00:07:49,000 pe care le-a dat, în caietul de sarcini set de probleme. 127 00:07:49,000 --> 00:07:52,000 Ce e diferit aici este ca noi scade 128 00:07:52,000 --> 00:07:58,000 în cazul de capital majuscule A, iar apoi am adaugat capitalului A 129 00:07:58,000 --> 00:08:02,000 Înapoi în la sfârșitul anului. 130 00:08:02,000 --> 00:08:05,000 >> Știu că unii dintre voi ați făcut acest lucru în cod. 131 00:08:05,000 --> 00:08:09,000 Credeți vreunul din voi face acest lucru în observațiile tale? 132 00:08:09,000 --> 00:08:13,000 Tu ai făcut asta. Poți explica ce face asta, Sahb? 133 00:08:13,000 --> 00:08:18,000 Prin scăderea-l, pentru că ai făcut un mod imediat după aceasta, 134 00:08:18,000 --> 00:08:21,000 trebuie să-l scot, astfel încât modul în care obține [tuse] poziția. 135 00:08:21,000 --> 00:08:25,000 Și apoi, adăugându-l înapoi mai târziu vei schimbat peste cel pe care ai vrut. 136 00:08:25,000 --> 00:08:27,000 Da, exact. 137 00:08:27,000 --> 00:08:32,000 Ceea ce a spus a fost Sahb că, atunci când dorim să adăugăm 138 00:08:32,000 --> 00:08:36,000 Mesajul nostru si cheia noastră împreună 139 00:08:36,000 --> 00:08:42,000 și apoi Mod că, în mod ca prin NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 dacă nu ne scala mesajul nostru în caz intervalul 0 - 25 în primul rând, 141 00:08:50,000 --> 00:08:54,000 atunci am putea ajunge obtinerea unui numar foarte ciudat 142 00:08:54,000 --> 00:08:59,000 deoarece valorile pe care ne uită puțin atunci când ne uităm la mesaj [i], 143 00:08:59,000 --> 00:09:03,000 atunci când ne uităm la caracterul lea al nostru simplu-mesaj text, 144 00:09:03,000 --> 00:09:08,000 este o valoare undeva în acest interval 65 - 122 145 00:09:08,000 --> 00:09:13,000 pe baza valorilor ASCII pentru majuscule de la A la Z litere mici. 146 00:09:13,000 --> 00:09:18,000 Și așa că atunci când l-am modez cu 26 sau prin NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 din moment ce a fost ne definesc # la dreapta sus aici, 148 00:09:23,000 --> 00:09:28,000 care este de gând să ne dea o valoare care este în intervalul de la 0 la 25, 149 00:09:28,000 --> 00:09:30,000 și avem nevoie de o modalitate de a scala atunci înapoi 150 00:09:30,000 --> 00:09:32,000 și să-l în intervalul ASCII corespunzător. 151 00:09:32,000 --> 00:09:36,000 Cel mai simplu mod de a face acest lucru este pentru a scala totul în jos 152 00:09:36,000 --> 00:09:39,000 în intervalul de la 0 la 25 la început, 153 00:09:39,000 --> 00:09:43,000 , apoi SHIFT totul înapoi până la sfârșitul anului. 154 00:09:43,000 --> 00:09:46,000 >> O altă eroare comună pe care l-am văzut oamenii rula în faptul că este 155 00:09:46,000 --> 00:09:50,000 daca nu face de fapt acest scalare imediat 156 00:09:50,000 --> 00:09:53,000 și adăugați mesaj si tasta împreună și să le adăugați, să zicem, 157 00:09:53,000 --> 00:09:58,000 într-o variabilă char, problema cu care 158 00:09:58,000 --> 00:10:01,000 Este deoarece mesajul [i] este un număr relativ mare pentru a începe cu, 159 00:10:01,000 --> 00:10:05,000 amintiți-vă că e cel puțin 65 dacă e un personaj cu litere mari, 160 00:10:05,000 --> 00:10:09,000 dacă aveți o cheie mare, să zicem, ceva de genul 100, 161 00:10:09,000 --> 00:10:13,000 și adăugați cele două împreună într-un char semnat ai de gând pentru a obține o depășire. 162 00:10:13,000 --> 00:10:17,000 Ai de gând să obțineți o valoare care este mai mare decât 127, 163 00:10:17,000 --> 00:10:22,000 care este cea mai mare valoare pe care o variabilă char poate stoca. 164 00:10:22,000 --> 00:10:26,000 Din nou, asta e ce vrea să facă acest fel de lucru pentru a începe cu. 165 00:10:26,000 --> 00:10:29,000 Unii oameni au în jurul valorii de acest caz de a face o dacă altcineva și testarea 166 00:10:29,000 --> 00:10:33,000 pentru a vedea dacă acesta ar fi depășire înainte de a face asta, 167 00:10:33,000 --> 00:10:36,000 dar în acest fel se în jurul valorii de acest lucru. 168 00:10:36,000 --> 00:10:40,000 Și apoi, în această soluție am imprimat șir întreg de la sfârșitul foarte. 169 00:10:40,000 --> 00:10:45,000 Alte persoane imprimat un caracter la un moment dat. Ambele sunt minunat. 170 00:10:45,000 --> 00:10:51,000 În acest moment, nu voi avea nici întrebări, nici un comentariu cu privire la acest lucru? 171 00:10:51,000 --> 00:10:56,000 Lucrurile care iti plac, lucruri care nu vă plac? 172 00:10:56,000 --> 00:10:58,000 >> Am avut o întrebare. 173 00:10:58,000 --> 00:11:01,000 Poate l-am ratat în timpul explicația ta, dar cum face acest program de 174 00:11:01,000 --> 00:11:07,000 sări peste spațiile pentru conectarea cheia lungimea textului? 175 00:11:07,000 --> 00:11:10,000 Acesta este doar cifrul lui Cezar. >> Oh, scuze, da. 176 00:11:10,000 --> 00:11:13,000 Da, vom vedea că. 177 00:11:13,000 --> 00:11:16,000 În cifrul lui Cezar avem în jurul valorii de faptul că din cauza 178 00:11:16,000 --> 00:11:18,000 am intors doar caractere. 179 00:11:18,000 --> 00:11:27,000 Noi doar le rotit în cazul în care acestea au fost mari sau mici. 180 00:11:27,000 --> 00:11:32,000 Voi simți destul de bine despre asta? 181 00:11:32,000 --> 00:11:34,000 Simțiți-vă liber pentru a copia aceasta casa, ia-, 182 00:11:34,000 --> 00:11:37,000 compare cu ceea ce voi scrie. 183 00:11:37,000 --> 00:11:42,000 Categoric nu ezitați să trimiteți întrebări despre ea. 184 00:11:42,000 --> 00:11:46,000 Și din nou, realizăm că scopul aici cu problema ta seturi 185 00:11:46,000 --> 00:11:50,000 nu este de a ajunge voi pentru a scrie cod perfect pentru seturi de problema ta. 186 00:11:50,000 --> 00:11:57,000 E o experiență de învățare. Da. 187 00:11:57,000 --> 00:12:01,000 >> Înapoi la bucla do în timp ce, în cazul în care este egal cu zero, 188 00:12:01,000 --> 00:12:06,000 astfel null înseamnă doar nimic, au lovit pur și simplu introduceți? 189 00:12:06,000 --> 00:12:12,000 Nul este o valoare pointer specială, 190 00:12:12,000 --> 00:12:17,000 și vom folosi nul atunci când vrem să spunem 191 00:12:17,000 --> 00:12:23,000 avem o variabila pointer care indică la nimic. 192 00:12:23,000 --> 00:12:28,000 Și așa de obicei, înseamnă că această variabilă, această variabilă mesaj 193 00:12:28,000 --> 00:12:35,000 este gol, și aici, pentru că suntem folosind tipul de CS50 șir de construcții, 194 00:12:35,000 --> 00:12:37,000 ceea ce este de tip șir CS50? 195 00:12:37,000 --> 00:12:42,000 Ați văzut ce se întâmplă atunci când David a tras înapoi capota în curs? 196 00:12:42,000 --> 00:12:44,000 E un funky-e un pointer, nu? 197 00:12:44,000 --> 00:12:48,000 Bine, da >> E. E un char *. 198 00:12:48,000 --> 00:12:52,000 Și într-adevăr așa am putea înlocui această 199 00:12:52,000 --> 00:12:56,000 chiar aici cu mesajul char *, 200 00:12:56,000 --> 00:13:04,000 și astfel funcția de getString, în cazul în care nu se obține cu succes un șir de utilizator, 201 00:13:04,000 --> 00:13:08,000 nu se poate analiza un șir, și un caz în care nu se poate analiza un șir 202 00:13:08,000 --> 00:13:11,000 este dacă utilizatorul final tipuri de caracter dosar, D de control, 203 00:13:11,000 --> 00:13:17,000 care nu este ceva ce faci de obicei, dar în cazul în care se întâmplă 204 00:13:17,000 --> 00:13:20,000 atunci funcția va returna această valoare nulă ca o modalitate de a spune 205 00:13:20,000 --> 00:13:23,000 "Hei, eu nu am primit un șir." 206 00:13:23,000 --> 00:13:27,000 Ce s-ar întâmpla dacă nu punem mesaj = nul, 207 00:13:27,000 --> 00:13:30,000 care este ceva ce nu am făcut încă? 208 00:13:30,000 --> 00:13:32,000 De ce ar fi asta o problemă aici? 209 00:13:32,000 --> 00:13:38,000 Pentru că eu știu că am vorbit un pic în prelegere despre pierderi de memorie. 210 00:13:38,000 --> 00:13:42,000 Da, hai să facem asta, și să vedem ce se întâmplă. 211 00:13:42,000 --> 00:13:44,000 >> Întrebarea lui Vasile a fost ceea ce se întâmplă dacă nu avem de fapt 212 00:13:44,000 --> 00:13:48,000 acest mesaj = null testul? 213 00:13:48,000 --> 00:13:51,000 Să derulați până la partea de sus. 214 00:13:51,000 --> 00:13:53,000 Voi pot comenta acest lucru. 215 00:13:53,000 --> 00:13:55,000 De fapt, voi salva într-o revizuire. 216 00:13:55,000 --> 00:13:58,000 Acest lucru va fi Revizia 3. 217 00:13:58,000 --> 00:14:02,000 Ce va trebui să facă pentru a rula acest program este că va trebui să faceți clic pe această pictogramă să mizeze mai mult aici, 218 00:14:02,000 --> 00:14:04,000 și va trebui să adăugați un argument la acesta. 219 00:14:04,000 --> 00:14:10,000 Va trebui să-i dea argumentul cheie, deoarece dorim să treacă într-un argument de linie de comandă. 220 00:14:10,000 --> 00:14:13,000 Aici am de gând să-i dea numărul 3. Îmi place 3. 221 00:14:13,000 --> 00:14:19,000 Acum, zoom înapoi, rularea programului. 222 00:14:19,000 --> 00:14:24,000 E de funcționare, compilarea, construirea. 223 00:14:24,000 --> 00:14:27,000 Aici vom merge. Se așteaptă a fi atentionat. 224 00:14:27,000 --> 00:14:33,000 Dacă aș scrie în ceva de genul salut, în cazul în care a mers? 225 00:14:33,000 --> 00:14:38,000 Oh, programul meu a luat prea mult timp pentru a rula. Am fost jawing pentru prea mult timp. 226 00:14:38,000 --> 00:14:40,000 Aici merge. 227 00:14:40,000 --> 00:14:43,000 Acum scriu în salut. 228 00:14:43,000 --> 00:14:46,000 Vedem că criptează în mod corespunzător. 229 00:14:46,000 --> 00:14:52,000 Acum, ce se întâmplă dacă facem getString prompt pentru a intoarce null? 230 00:14:52,000 --> 00:14:57,000 Amintiți-vă, am spus că am făcut asta prin apăsarea de control D, în același timp. 231 00:14:57,000 --> 00:14:59,000 Voi derulați în sus aici. Vă vom rula din nou. 232 00:14:59,000 --> 00:15:01,000 Clădire. Momentan nu merge. 233 00:15:01,000 --> 00:15:04,000 Acum, când am lovit de control D 234 00:15:04,000 --> 00:15:12,000 Am primit această linie care spune opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Ați văzut că, înainte de voi? 236 00:15:15,000 --> 00:15:17,000 >> [Student] De ce nu există nici->> Imi pare rau? 237 00:15:17,000 --> 00:15:20,000 [Student] De ce nu există nici o benă de bază în acest caz? 238 00:15:20,000 --> 00:15:26,000 Benă de bază este întrebarea-se de ce nu există nici o benă de bază aici? 239 00:15:26,000 --> 00:15:29,000 Întrebarea este că poate exista, dar groapa de bază este un fișier 240 00:15:29,000 --> 00:15:31,000 care se stochează pe hard disk. 241 00:15:31,000 --> 00:15:34,000 În acest caz, ne-am dezactivat haldele de bază 242 00:15:34,000 --> 00:15:37,000 pe serverul termen, astfel încât să nu avem oameni SEG Faulting 243 00:15:37,000 --> 00:15:40,000 și construirea de tone de haldelor de bază. 244 00:15:40,000 --> 00:15:46,000 Dar s-ar putea obține unul. 245 00:15:46,000 --> 00:15:48,000 Haldele de bază sunt genul de lucruri pe care le puteți dezactiva de multe ori, 246 00:15:48,000 --> 00:15:52,000 și, uneori, să faci. 247 00:15:52,000 --> 00:15:55,000 Eroare de segmentare, pentru a răspunde la întrebarea dvs., Vasile, 248 00:15:55,000 --> 00:16:00,000 se spune că am încercat să acceseze un pointer 249 00:16:00,000 --> 00:16:05,000 care nu a fost setat pentru a indica nimic. 250 00:16:05,000 --> 00:16:09,000 Amintiți-vă, în Binky video atunci când încearcă să Binky 251 00:16:09,000 --> 00:16:12,000 du-te accesa un pointer care nu este îndreptat la ceva? 252 00:16:12,000 --> 00:16:16,000 În acest caz, cred punct de vedere tehnic indicatorul indică spre ceva. 253 00:16:16,000 --> 00:16:20,000 Este arătând spre nul, care este punct de vedere tehnic 0, 254 00:16:20,000 --> 00:16:25,000 dar care este definit a fi într-un segment care nu este accesibil 255 00:16:25,000 --> 00:16:28,000 de programul tău, astfel încât să obțineți o eroare de segmentare 256 00:16:28,000 --> 00:16:31,000 pentru că nu sunteți accesarea memoriei, care este într-un segment validă 257 00:16:31,000 --> 00:16:38,000 cum ar fi segmentul de heap sau segmentul de stiva sau segmentul de date. 258 00:16:38,000 --> 00:16:40,000 Mișto. 259 00:16:40,000 --> 00:16:48,000 Orice mai multe întrebări despre Cezar? 260 00:16:48,000 --> 00:16:51,000 >> Să trecem mai departe. Să ne uităm la Revizia 2 foarte repede. 261 00:16:51,000 --> 00:17:00,000 Asta e Vigenere. 262 00:17:00,000 --> 00:17:04,000 Aici, în Vigenere 263 00:17:04,000 --> 00:17:06,000 vom trece prin aceasta destul de repede, deoarece, din nou, 264 00:17:06,000 --> 00:17:10,000 Vigenere și Cezar sunt destul de asemănătoare. 265 00:17:10,000 --> 00:17:12,000 Antet comentariu este înainte, 266 00:17:12,000 --> 00:17:17,000 # Define este înainte de a evita folosirea acestor numere magice. 267 00:17:17,000 --> 00:17:21,000 Cel mai frumos lucru este spus am vrut să se mute în 268 00:17:21,000 --> 00:17:23,000 un alfabet diferit sau ceva de genul asta. 269 00:17:23,000 --> 00:17:26,000 Mai degrabă decât a fi nevoie să meargă manual schimba toate 26 în codul 270 00:17:26,000 --> 00:17:30,000 am putea schimba acest lucru 27 sau plasați-l în jos 271 00:17:30,000 --> 00:17:34,000 dacă am fost folosind alfabete diferite, limbi diferite. 272 00:17:34,000 --> 00:17:38,000 Din nou, avem această verificare a numărului de argument, 273 00:17:38,000 --> 00:17:42,000 și într-adevăr puteți lua aproape ca pe un șablon. 274 00:17:42,000 --> 00:17:46,000 Destul de mult fiecare program pe care il scrie ar trebui să- 275 00:17:46,000 --> 00:17:50,000 în cazul în care este nevoie de argumente din linia de comandă-unele secvență de linii 276 00:17:50,000 --> 00:17:55,000 , care arată ca aceasta de la bun început. 277 00:17:55,000 --> 00:17:59,000 Asta e unul din testele bun-simț primul care doriți să le faceți. 278 00:17:59,000 --> 00:18:03,000 >> Aici ceea ce am făcut a fost că ne-am asigurat 279 00:18:03,000 --> 00:18:06,000 cuvântul cheie a fost valabil, iar asta a fost a doua verificări pe care am făcut-o. 280 00:18:06,000 --> 00:18:11,000 Observați din nou că ne-am despărțit de această argc și 2. 281 00:18:11,000 --> 00:18:14,000 Rețineți că, în acest caz, un lucru pe care am avut de a face a fost în schimb 282 00:18:14,000 --> 00:18:18,000 de a folosi un la i ne-am dorit pentru a valida întregul șir, 283 00:18:18,000 --> 00:18:21,000 și în scopul de a face acest lucru, de fapt trebuie să mergi caracter cu caracter 284 00:18:21,000 --> 00:18:23,000 peste șir. 285 00:18:23,000 --> 00:18:29,000 Nu e nici o modalitate buna de a apela ceva pe ea 286 00:18:29,000 --> 00:18:31,000 deoarece, chiar, de exemplu, o să i se va returna 0 287 00:18:31,000 --> 00:18:37,000 în cazul în care nu se poate analiza un număr întreg, astfel că nu funcționează, chiar. 288 00:18:37,000 --> 00:18:42,000 Din nou, mesaj frumos spune ghidul exact ce sa întâmplat. 289 00:18:42,000 --> 00:18:45,000 Atunci aici, din nou, de asemenea, ne ocupam de cazul în care 290 00:18:45,000 --> 00:18:50,000 utilizatorul tastează într-un caracter de control aleatoriu D. 291 00:18:50,000 --> 00:18:54,000 >> Și apoi Charlotte a avut o întrebare mai devreme despre cum vom reuși să săriți peste spațiile 292 00:18:54,000 --> 00:18:57,000 în șirul nostru aici. 293 00:18:57,000 --> 00:19:00,000 Acest lucru a fost un fel de similar cu ceea ce am făcut cu programul Myspace 294 00:19:00,000 --> 00:19:04,000 pe care am făcut-o în secțiune, și modul în care aceasta a funcționat 295 00:19:04,000 --> 00:19:08,000 este că am urmărit numărul de scrisori pe care le-am văzut. 296 00:19:08,000 --> 00:19:13,000 Așa cum ne-am plimbat peste șirul de mesaje, așa cum ne-am plimbat peste caracter cu caracter, 297 00:19:13,000 --> 00:19:16,000 am urmărit indicele, ca parte a noastră pentru buclă, și apoi am urmărit, de asemenea, 298 00:19:16,000 --> 00:19:21,000 numărul de scrisori, astfel încât non-speciale de caractere, non-cifre, non-spațiu alb 299 00:19:21,000 --> 00:19:27,000 că am fi văzut în variabilă separată. 300 00:19:27,000 --> 00:19:33,000 Și apoi această soluție modifică tasta 301 00:19:33,000 --> 00:19:41,000 pentru a obține un întreg real cheie, și-l face ca pe zbor, 302 00:19:41,000 --> 00:19:47,000 chiar înainte de a merge la cripta, apoi caracterul mesajul real. 303 00:19:47,000 --> 00:19:50,000 Există câteva soluții care au fost perfect prea mare 304 00:19:50,000 --> 00:19:58,000 care ar modifica tasta atunci când testarea de valabilitate a cheii. 305 00:19:58,000 --> 00:20:01,000 În plus față de asigurându-vă că personajul și cuvinte cheie 306 00:20:01,000 --> 00:20:05,000 a fost un caracter alfabetic, de asemenea, transformat ca într-un întreg 307 00:20:05,000 --> 00:20:13,000 în intervalul de la 0 la 25 la săriți, atunci având de a face ca mai târziu, în această buclă pentru. 308 00:20:13,000 --> 00:20:18,000 Din nou, veți vedea aici, acest lucru este foarte exact același cod de 309 00:20:18,000 --> 00:20:22,000 pe care am folosit în Cezar, la acest punct. 310 00:20:22,000 --> 00:20:25,000 Tu faci exact același lucru, astfel încât truc real este imaginind 311 00:20:25,000 --> 00:20:30,000 cum să transforme cuvântul cheie într-un întreg. 312 00:20:30,000 --> 00:20:35,000 >> Un lucru pe care am făcut-o aici, că este un pic dens 313 00:20:35,000 --> 00:20:39,000 Este am repetat această frază, cred ca ai putea numi, 314 00:20:39,000 --> 00:20:45,000 De 3 ori separate pe liniile 58, 59, și 61. 315 00:20:45,000 --> 00:20:52,000 Poate cineva explica exact ceea ce această frază nu? 316 00:20:52,000 --> 00:20:55,000 E un personaj accesarea, cum ai spus. 317 00:20:55,000 --> 00:20:59,000 Da, e [neauzit] un personaj cheie în, 318 00:20:59,000 --> 00:21:04,000 și așa este numărul de litere data pentru ca esti doar în mișcare de-a lungul 319 00:21:04,000 --> 00:21:06,000 cuvinte cheie după ce ați văzut scrisoarea, 320 00:21:06,000 --> 00:21:10,000 astfel că va sări în mod eficient spații și chestii de genul asta. 321 00:21:10,000 --> 00:21:12,000 Da, exact. 322 00:21:12,000 --> 00:21:16,000 Și apoi, o dată ce ați văzut martor cheie pe care tocmai ați mod, astfel încât să se mute înapoi în jurul valorii de. 323 00:21:16,000 --> 00:21:18,000 Exact. Asta e o explicație perfectă. 324 00:21:18,000 --> 00:21:23,000 Ceea ce a spus Kevin este că dorim să indice în cheie. 325 00:21:23,000 --> 00:21:28,000 Ne dorim pentru a obține caracterul num_letters_seen, dacă vreți, 326 00:21:28,000 --> 00:21:32,000 dar dacă num_letters_seen depășește lungimea de cuvinte cheie, 327 00:21:32,000 --> 00:21:37,000 modul ajungem înapoi în intervalul corespunzător este vom folosi operatorul mod 328 00:21:37,000 --> 00:21:40,000 să-și încheie în jurul valorii de eficient. 329 00:21:40,000 --> 00:21:43,000 De exemplu, la fel ca în scurt, cuvântul cheie nostru este slănină, 330 00:21:43,000 --> 00:21:46,000 și e 5 litere. 331 00:21:46,000 --> 00:21:50,000 Dar am vazut 6 litere din textul nostru simplu în acest moment 332 00:21:50,000 --> 00:21:52,000 și criptate 6. 333 00:21:52,000 --> 00:21:57,000 Vom ajunge accesarea num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 care este de 6, Mod lungime de cuvinte cheie, 5, 335 00:22:00,000 --> 00:22:04,000 și astfel vom obține 1, și așa mai departe ceea ce vom face este că voi 336 00:22:04,000 --> 00:22:14,000 accesa interiorul primul caracter al cuvintelor cheie la acel moment. 337 00:22:14,000 --> 00:22:21,000 >> În regulă, orice probleme referitoare la Vigenere 338 00:22:21,000 --> 00:22:26,000 înainte de a ne muta pe? 339 00:22:26,000 --> 00:22:31,000 Voi simți destul de bine despre asta? 340 00:22:31,000 --> 00:22:35,000 Rece, mare. 341 00:22:35,000 --> 00:22:38,000 Vreau să vă asigurați că voi sunt obtinerea sansa de a vedea codul 342 00:22:38,000 --> 00:22:48,000 care credem că arată bine și au șansa de a învăța de la ea. 343 00:22:48,000 --> 00:22:53,000 Acest lucru va fi ultimul vom folosi spații pentru moment, 344 00:22:53,000 --> 00:22:59,000 și am de gând să tranziției acum, și am de gând să merg la cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 astfel încât să putem face un pic de reexaminare test. 346 00:23:06,000 --> 00:23:10,000 Cel mai bun mod de a începe să cred că faci Quiz comentariu 347 00:23:10,000 --> 00:23:15,000 este de a veni la această pagină Prelegeri, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 și sub fiecare dintre rubricile pe săptămână, așa că dacă mă uit aici, în Săptămâna 0, 349 00:23:20,000 --> 00:23:27,000 Văd că avem o listă de subiecte pe care ne-am ocupat în Săptămâna 0. 350 00:23:27,000 --> 00:23:31,000 >> Dacă oricare dintre aceste subiecte par nefamiliare pentru tine 351 00:23:31,000 --> 00:23:34,000 veți dori în mod sigur să se întoarcă și cutreiera notele de curs și, eventual, 352 00:23:34,000 --> 00:23:39,000 chiar și răsfoiesc prin prelegeri, le uit din nou daca vrei 353 00:23:39,000 --> 00:23:44,000 pentru a obține o simt pentru ceea ce se întâmplă cu fiecare dintre aceste subiecte. 354 00:23:44,000 --> 00:23:49,000 Eu va spun acest plus de un an de resursele rece ne-am luat 355 00:23:49,000 --> 00:23:55,000 este aceste pantaloni scurti pe care le-am creat, și, dacă te uiți la săptămâna 0, 356 00:23:55,000 --> 00:24:00,000 nu avem toate subiectele acoperite, dar avem destul de puține dintre ele, 357 00:24:00,000 --> 00:24:03,000 unele dintre cele mai complicată, astfel încât aceste pantaloni scurti uitam din nou 358 00:24:03,000 --> 00:24:08,000 este o modalitate buna de a te până la viteza. 359 00:24:08,000 --> 00:24:15,000 În special, am de gând să pună într-o fișă de 3 pe partea de jos, de când am făcut-o cei. 360 00:24:15,000 --> 00:24:20,000 Dar dacă te lupți cu binar, biți, hexagonal, că astfel de lucruri, 361 00:24:20,000 --> 00:24:22,000 binar este un loc minunat pentru a începe. 362 00:24:22,000 --> 00:24:25,000 ASCII este un alt una care e bine sa poti vedea prea. 363 00:24:25,000 --> 00:24:31,000 Puteți viziona chiar mi-a la viteza 1.5x, dacă am de gând prea lent pentru tine. 364 00:24:31,000 --> 00:24:35,000 Întrucât comentariu e, nu ezitați să faci asta. 365 00:24:35,000 --> 00:24:40,000 >> Doar pentru a începe foarte repede, vom merge printr-o pereche de aceste probleme test 366 00:24:40,000 --> 00:24:44,000 doar pentru a putinei rapid prin acestea. 367 00:24:44,000 --> 00:24:50,000 De exemplu, să ne uităm la problema 16, că am dreptul de până aici, pe bord. 368 00:24:50,000 --> 00:24:54,000 Avem acest calcul următor, în binar, 369 00:24:54,000 --> 00:24:56,000 și vrem să arate orice lucrare. 370 00:24:56,000 --> 00:24:59,000 Bine, am de gând să dea această șansă o. 371 00:24:59,000 --> 00:25:01,000 Voi ar trebui să urmeze, împreună cu hârtie, 372 00:25:01,000 --> 00:25:04,000 și vom face acest lucru foarte repede. 373 00:25:04,000 --> 00:25:06,000 Dorim să efectuați următorul calcul în binar. 374 00:25:06,000 --> 00:25:16,000 Am 00110010. 375 00:25:16,000 --> 00:25:27,000 Și am de gând să se adauge 00110010. 376 00:25:27,000 --> 00:25:30,000 Pentru matematica genii în urma de-a lungul la domiciliu, 377 00:25:30,000 --> 00:25:35,000 acest lucru este în mod eficient înmulțirea cu 2. 378 00:25:35,000 --> 00:25:37,000 Să începem. 379 00:25:37,000 --> 00:25:39,000 Mergem să urmeze același algoritm plus pe care o facem 380 00:25:39,000 --> 00:25:43,000 cand adaugam numere zecimale împreună. 381 00:25:43,000 --> 00:25:46,000 Într-adevăr singura diferență este că ne bucla înapoi în jurul valorii de 382 00:25:46,000 --> 00:25:51,000 odată ce avem 1 + 1 în loc de o dată ajungem la 10. 383 00:25:51,000 --> 00:25:53,000 >> Dacă pornim de la dreapta, foarte repede, ceea ce e prima cifră? 384 00:25:53,000 --> 00:25:55,000 [Student] 0 >> [Nate H.]. 0. 385 00:25:55,000 --> 00:25:58,000 Mare, doua cifră? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Este un 1? 1 + 1 este? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Exact, astfel încât ceea ce este cifre, care scriu chiar sub cele 2 cele adăugate împreună? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0, sau 0 și apoi transporta 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 și transporta un 1, mai exact. 392 00:26:15,000 --> 00:26:18,000 Următorul unul, Vasile, te-ai trezit. 393 00:26:18,000 --> 00:26:20,000 Care este al treilea? >> [Vasile] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, perfectă. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0 >> [Nate H.]. 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0 >> [Nate H.]. Da, și eu ce fac? 397 00:26:30,000 --> 00:26:32,000 [Student] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] Și eu ce fac? Și apoi m-am transporta 1. 399 00:26:34,000 --> 00:26:36,000 Top, Sahb >>? [Sahb] Acum ai 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] Și trebuie să fac ceva aici? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Apoi, pentru cel de langa ai 1, deoarece te-a purtat peste 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Mare, așa că aici putem termina. 403 00:26:49,000 --> 00:26:51,000 Mișto. 404 00:26:51,000 --> 00:26:54,000 [Student] Are 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, cum ai spus, este de 10, sau 1, 0, mai degrabă. 407 00:27:01,000 --> 00:27:07,000 10 este un termen impropriu, deoarece pentru mine 10 înseamnă numărul 10, 408 00:27:07,000 --> 00:27:12,000 și este capriciu de modul în care ne reprezinta pe noi atunci când îl scriu. 409 00:27:12,000 --> 00:27:20,000 Ne reprezintă numărul 2 de 1, 0, iar numărul 10 este ușor diferită. 410 00:27:20,000 --> 00:27:23,000 >> Ce e un fel de frumos despre binar este faptul că există într-adevăr nu sunt atât de multe 411 00:27:23,000 --> 00:27:25,000 cazuri aveți nevoie pentru a învăța. 412 00:27:25,000 --> 00:27:30,000 Nu e 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 este 0, iar apoi transporta un 1, 414 00:27:34,000 --> 00:27:37,000 și apoi puteți vedea aici, pe coloana a treia de la dreapta 415 00:27:37,000 --> 00:27:40,000 am avut această 1, 1, și 1. 416 00:27:40,000 --> 00:27:43,000 Și 1 + 1 + 1 este un 1, 417 00:27:43,000 --> 00:27:45,000 și purtați un alt 1. 418 00:27:45,000 --> 00:27:48,000 Când faci plus binar, destul de simplu. 419 00:27:48,000 --> 00:27:51,000 Aș face-o mult mai tânăr dintre acestea pentru a vă verifica sanatatea 420 00:27:51,000 --> 00:27:54,000 înainte de a merge în, deoarece acest lucru este 421 00:27:54,000 --> 00:28:00,000 probabil, ceva ce vom vedea pe testul. 422 00:28:00,000 --> 00:28:03,000 Acum, hai sa facem asta următor. 423 00:28:03,000 --> 00:28:06,000 Să facem problemă 17. 424 00:28:06,000 --> 00:28:12,000 Mergem pentru a converti numărul binar în zecimal următorul. 425 00:28:12,000 --> 00:28:28,000 Am 10100111001. 426 00:28:28,000 --> 00:28:33,000 Amintiți-vă în filme binar pe care am făcut-o 427 00:28:33,000 --> 00:28:36,000 M-am plimbat printr-o serie de exemple, și am arătat cum 428 00:28:36,000 --> 00:28:41,000 totul funcționează atunci când o faci în zecimal. 429 00:28:41,000 --> 00:28:45,000 Când lucrați în reprezentarea zecimală Cred ca suntem 430 00:28:45,000 --> 00:28:48,000 în acest moment, în viețile noastre, astfel fluent în ea, care 431 00:28:48,000 --> 00:28:53,000 este destul de ușor să treacă peste mecanica de modul în care funcționează de fapt. 432 00:28:53,000 --> 00:28:59,000 >> Dar pentru a face o recapitulare rapidă, dacă am numărul 137 433 00:28:59,000 --> 00:29:06,000 Aceasta inseamna-și, din nou, acest lucru este în zecimal reprezentarea- 434 00:29:06,000 --> 00:29:19,000 numărul 137 în zecimal înseamnă că am 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Acest lucru este sejurului pe ecran. 436 00:29:22,000 --> 00:29:29,000 Și apoi, dacă te uiți la aceste numere de aici, 437 00:29:29,000 --> 00:29:34,000 100, 10 și 1, veți vedea că de fapt ele sunt toate puterile de 10. 438 00:29:34,000 --> 00:29:43,000 Am 10 ², 10 ¹, și 10 la zero. 439 00:29:43,000 --> 00:29:48,000 Avem un fel similar de lucru în binar, 440 00:29:48,000 --> 00:29:55,000 cu excepția faptului că baza noastră, așa cum o numim, este de 2 în loc de 10. 441 00:29:55,000 --> 00:29:58,000 Aceste 10s că am scris aici, la partea de jos, 442 00:29:58,000 --> 00:30:02,000 acest ² 10, 10 ¹, 10 la zero, 10 este baza noastră, 443 00:30:02,000 --> 00:30:08,000 și exponent, 0, 1, sau 2, 444 00:30:08,000 --> 00:30:14,000 este implicat de poziția de cifre, în numărul pe care le scrie. 445 00:30:14,000 --> 00:30:21,000 1, dacă ne uităm la ea, acest 1 este în poziția 2. 446 00:30:21,000 --> 00:30:27,000 3 este în poziția 1, iar 7 este în poziția 0th. 447 00:30:27,000 --> 00:30:35,000 Asta e modul în care vom ajunge exponenții diferitelor mai jos pentru bazele noastre. 448 00:30:35,000 --> 00:30:40,000 >> În urma toate acestea noi vom-de fapt, știi ce? 449 00:30:40,000 --> 00:30:43,000 Vom face-mi unde ai anulează butonul merge? 450 00:30:43,000 --> 00:30:45,000 Momentan nu merge. 451 00:30:45,000 --> 00:30:47,000 Îmi place acest lucru anulează. 452 00:30:47,000 --> 00:30:51,000 Ca urmare a acestei Cred că pentru mine cel puțin 453 00:30:51,000 --> 00:30:54,000 cel mai simplu mod de a începe conversia unui număr din binar 454 00:30:54,000 --> 00:30:57,000 sau în cazul în care un număr hexazecimal de bază este de 16 455 00:30:57,000 --> 00:31:02,000 și nu 10 sau 2 este de a merge mai departe și scrie 456 00:31:02,000 --> 00:31:09,000 bazele și exponenților pentru toate numerele de la numărul meu de binar în partea de sus. 457 00:31:09,000 --> 00:31:14,000 Dacă pornim de la stânga la dreapta din nou, 458 00:31:14,000 --> 00:31:17,000 care este un fel de contraintuitiv, 459 00:31:17,000 --> 00:31:23,000 Voi reveni la negru aici, avem 2 la poziția 0th, 460 00:31:23,000 --> 00:31:27,000 și apoi avem 2 ¹, ² 2, 461 00:31:27,000 --> 00:31:33,000 și apoi 2 la 3, 2 la 4, 2 la 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, și 10. 463 00:31:39,000 --> 00:31:41,000 Aceste numere le-am scris în toate sunt exponenți. 464 00:31:41,000 --> 00:31:48,000 Am scris doar bazele aici, în 3 primul doar pentru spațiu. 465 00:31:48,000 --> 00:31:50,000 >> În acest moment am de gând să merg mai departe și am de fapt de gând să șteargă 466 00:31:50,000 --> 00:31:53,000 lucrurile pe care am facut in zecimal, dacă e în regulă. 467 00:31:53,000 --> 00:31:57,000 Cu toții ați prins. 468 00:31:57,000 --> 00:32:05,000 Aceia dintre voi vizionarea on-line Sunt sigur că va fi capabil să-mi înapoi, dacă doriți. 469 00:32:05,000 --> 00:32:07,000 Comutarea înapoi la stilou. 470 00:32:07,000 --> 00:32:12,000 Acum, ce putem face-în cazul în care voi nu sunt în totalitate până la viteza pe puterile tale de 2, 471 00:32:12,000 --> 00:32:15,000 asta e mișto. 472 00:32:15,000 --> 00:32:18,000 Se întâmplă. Am înțeles. 473 00:32:18,000 --> 00:32:23,000 Am avut odată un interviu loc de munca unde mi sa spus că ar trebui să știe toate puterile de 2 474 00:32:23,000 --> 00:32:26,000 până prin 2 la 30. 475 00:32:26,000 --> 00:32:29,000 Acesta nu a fost un loc de muncă am ajuns. 476 00:32:29,000 --> 00:32:32,000 Oricum, voi poate merge mai departe și de a face matematica aici, 477 00:32:32,000 --> 00:32:35,000 dar cu binar aceasta nu prea are sens, 478 00:32:35,000 --> 00:32:38,000 și nici nu face sens cu zecimale sau hexazecimale, fie, 479 00:32:38,000 --> 00:32:43,000 pentru a face matematica de unde ai zerouri. 480 00:32:43,000 --> 00:32:49,000 Puteți vedea aici am 0, un 0 aici, aici 0, 0 aici, aici 0, 0 aici. 481 00:32:49,000 --> 00:32:52,000 De ce s-ar putea să nu-l face sens pentru a face matematica reală 482 00:32:52,000 --> 00:32:56,000 pentru a calcula puterea adecvată a 2 pentru această poziție? 483 00:32:56,000 --> 00:32:59,000 Exact, la fel ca Charlotte a declarat, că va fi 0. 484 00:32:59,000 --> 00:33:05,000 S-ar putea la fel de bine salvați-vă de timp în cazul în calcul competențele de 2 nu este costumul tău puternic. 485 00:33:05,000 --> 00:33:10,000 În acest caz, avem nevoie doar pentru a calcula pentru 2 la 0, care este,? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 la 3, care este,? 488 00:33:14,000 --> 00:33:16,000 [Student] 8 >> [Nate H.]. 8. 489 00:33:16,000 --> 00:33:18,000 2 la 4? 490 00:33:18,000 --> 00:33:21,000 [Student] 2. Îmi pare rău, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 la 4 este de 16, mai exact. 492 00:33:26,000 --> 00:33:28,000 2 la 5, Kevin >> 32.? 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 la 8? 494 00:33:32,000 --> 00:33:38,000 [Student] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] de top. 496 00:33:41,000 --> 00:33:43,000 Și 2 la 10? 497 00:33:43,000 --> 00:33:45,000 [Student] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Da, 1024. 499 00:33:49,000 --> 00:33:57,000 >> După ce ne-am luat aceste numere ne pot rezuma-le pe toate. 500 00:33:57,000 --> 00:34:01,000 Și acest lucru este în cazul în care este foarte important să se facă o serie de lucruri. 501 00:34:01,000 --> 00:34:07,000 Unul este du-te lent și să verificați munca ta. 502 00:34:07,000 --> 00:34:10,000 Vă pot spune că există un 1 la sfârșitul acestui număr, 503 00:34:10,000 --> 00:34:15,000 așa că am ar trebui să ajunge cu siguranta un numar impar ca rezultatul meu, 504 00:34:15,000 --> 00:34:18,000 deoarece toate celelalte vor fi nici măcar numerele de 505 00:34:18,000 --> 00:34:21,000 având în vedere că este un număr binar. 506 00:34:21,000 --> 00:34:24,000 Un alt lucru de făcut este dacă ajungi la acest punct de pe testul 507 00:34:24,000 --> 00:34:27,000 și l-ați scris atât de departe 508 00:34:27,000 --> 00:34:30,000 si tu esti in criza de timp 509 00:34:30,000 --> 00:34:33,000 uita-te la numărul de puncte pe care această problemă este în valoare de. 510 00:34:33,000 --> 00:34:40,000 Această problemă, după cum puteți vedea, dacă am întoarce la laptop-ul meu foarte repede- 511 00:34:40,000 --> 00:34:44,000 această problemă este în valoare de 2 puncte, deci acest lucru nu este un fel de adaos 512 00:34:44,000 --> 00:34:47,000 ar trebui să fie trece printr-dacă sunteți într-adevăr presat de timp. 513 00:34:47,000 --> 00:34:52,000 Dar ne vom reveni la iPad, și vom merge prin ea foarte repede. 514 00:34:52,000 --> 00:34:54,000 >> Îmi place faci primul număr mic 515 00:34:54,000 --> 00:34:56,000 pentru că mi se pare că mai ușor. 516 00:34:56,000 --> 00:35:00,000 Îmi place 32 și 8, deoarece acestea merg împreună destul de ușor, și vom obține 50. 517 00:35:00,000 --> 00:35:03,000 16 și 1 devine 17. 518 00:35:03,000 --> 00:35:05,000 Momentan nu avem 57, 519 00:35:05,000 --> 00:35:14,000 și apoi putem face restul de acest lucru, astfel încât să putem face 57, 156. 520 00:35:14,000 --> 00:35:16,000 Haide. 521 00:35:16,000 --> 00:35:19,000 Om, ei bine, să vedem. 522 00:35:19,000 --> 00:35:27,000 Am avut 57, 256, și 1024. 523 00:35:27,000 --> 00:35:31,000 În acest moment, aș mai degrabă merg doar prin. 524 00:35:31,000 --> 00:35:35,000 Nu am nici o idee. Am nevoie în mod clar să citiți pe acest. 525 00:35:35,000 --> 00:35:40,000 7, 6, și 4, veți obține 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Apoi ne-am obține 3, iar apoi vom lua 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Ouălor de Paște, cineva? 530 00:35:55,000 --> 00:35:59,000 Oricine recunoaște acest număr? 531 00:35:59,000 --> 00:36:02,000 Chris recunoaște numărul. Ce înseamnă, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, așa că, dacă te uiți la asta, se pare ca leet. 534 00:36:11,000 --> 00:36:15,000 Hacker chestii. Ferește-te de astfel de chestii pe termen mediu sau test, mai degrabă. 535 00:36:15,000 --> 00:36:19,000 Dacă vedeți acest tip de lucruri și te intrebi "Huh," 536 00:36:19,000 --> 00:36:22,000 care ar putea însemna, de fapt ceva. 537 00:36:22,000 --> 00:36:24,000 Nu știu. David îi place să-l pune inch 538 00:36:24,000 --> 00:36:26,000 E un mod bun de a bun-simț a verifica. 539 00:36:26,000 --> 00:36:30,000 Ca regulă, pot să văd ce se întâmplă. 540 00:36:30,000 --> 00:36:34,000 >> Asta e Săptămâna 0/Week 1 chestii. 541 00:36:34,000 --> 00:36:39,000 Dacă ne reveni la laptop-ul nostru acum, 542 00:36:39,000 --> 00:36:46,000 zoom out, și un cuplu de alte lucruri. 543 00:36:46,000 --> 00:36:50,000 Nu e ASCII, care am fost a face o mulțime de probleme cu seturi. 544 00:36:50,000 --> 00:36:55,000 Această noțiune de capital A. Ce este asta cu adevărat? 545 00:36:55,000 --> 00:36:57,000 Știind că e întreg zecimal. 546 00:36:57,000 --> 00:37:00,000 65 este ceea ce este mapat în tabelul ASCII, 547 00:37:00,000 --> 00:37:03,000 și că, prin urmare, este modul în care computerul îl scrie, 548 00:37:03,000 --> 00:37:06,000 și că este modul în care am fost obtinerea departe cu efectiv scris 549 00:37:06,000 --> 00:37:09,000 capitalul caracterul A și caracterul minuscule un 550 00:37:09,000 --> 00:37:14,000 în unele dintre aceste soluții și seturi de probleme pe care le-am făcut. 551 00:37:14,000 --> 00:37:16,000 Un tânăr de alte lucruri. 552 00:37:16,000 --> 00:37:25,000 Avem declarații, expresii booleene, condiții, bucle, variabile și fire. 553 00:37:25,000 --> 00:37:29,000 >> Cei care par toate să aibă sens pentru cea mai mare parte? 554 00:37:29,000 --> 00:37:35,000 Unele din această terminologie este un pic la funky, ori. 555 00:37:35,000 --> 00:37:46,000 Îmi place să mă gândesc la o declarație ca pentru ceva mai mare parte, care se termină cu punct și virgulă. 556 00:37:46,000 --> 00:37:51,000 Declarații cum ar fi x = 7, care stabilește o variabilă, 557 00:37:51,000 --> 00:37:54,000 probabil numit x = 7. 558 00:37:54,000 --> 00:38:01,000 Probabil x este, de asemenea, un tip care poate stoca numărul 7, 559 00:38:01,000 --> 00:38:05,000 așa că este un int sau, eventual, un flotor sau un scurtcircuit sau un char, 560 00:38:05,000 --> 00:38:07,000 ceva de genul asta. 561 00:38:07,000 --> 00:38:12,000 O expresie booleană este utilizarea acestor dublu este egal cu 562 00:38:12,000 --> 00:38:17,000 și-bang-ului este egală sau mai egal, nu mai puțin de, mai mare decât, 563 00:38:17,000 --> 00:38:22,000 mai mică sau egală cu, tot ce fel de lucruri. 564 00:38:22,000 --> 00:38:28,000 Starea apoi sunt situații în cazul în care altă parte. 565 00:38:28,000 --> 00:38:32,000 Aș aminti că nu poți avea o altă fără un corespondent în cazul în care. 566 00:38:32,000 --> 00:38:37,000 De asemenea, nu poti avea o altfel, dacă, fără o corespunzătoare, dacă. 567 00:38:37,000 --> 00:38:40,000 Bucle, amintim cele 3 tipuri de bucle am fost cu ciocanul în tine 568 00:38:40,000 --> 00:38:43,000 pentru ultimii doi secțiuni și seturi de probleme. 569 00:38:43,000 --> 00:38:46,000 Utilizarea în timp ce-mi cand esti introduse de utilizator, 570 00:38:46,000 --> 00:38:51,000 în timp ce folosind bucle până la o anumită condiție este adevărată, 571 00:38:51,000 --> 00:38:56,000 și apoi, folosind cele pentru bucle, dacă aveți nevoie pentru a 572 00:38:56,000 --> 00:39:01,000 știu care iterație a buclei sunteți în prezent pe așa cred eu despre asta. 573 00:39:01,000 --> 00:39:07,000 Sau, dacă faci o pentru fiecare caracter dintr-un șir vreau să fac ceva, 574 00:39:07,000 --> 00:39:15,000 pentru fiecare element într-o matrice Vreau să fac ceva în acest element. 575 00:39:15,000 --> 00:39:18,000 >> Fire și evenimente. 576 00:39:18,000 --> 00:39:21,000 Acestea nu am acoperit în mod explicit în C, 577 00:39:21,000 --> 00:39:23,000 dar amintiți-vă acest lucru de la Scratch. 578 00:39:23,000 --> 00:39:26,000 Aceasta este noțiunea de a avea diferite scrieri. 579 00:39:26,000 --> 00:39:32,000 Acest lucru este, de asemenea, această noțiune de difuzare a unui eveniment. 580 00:39:32,000 --> 00:39:37,000 Unii oameni nu au folosit radiodifuziune în proiectele lor inițial, 581 00:39:37,000 --> 00:39:40,000 care este total rece, 582 00:39:40,000 --> 00:39:46,000 dar acestea sunt 2 moduri diferite de manipulare această problemă mai mare concurenta numite, 583 00:39:46,000 --> 00:39:49,000 care este modul în care ajungi să execute programe 584 00:39:49,000 --> 00:39:54,000 sau de a executa aparent, în același timp? 585 00:39:54,000 --> 00:39:59,000 Sarcini diferite care rulează în timp ce alte sarcini sunt, de asemenea, difuzate. 586 00:39:59,000 --> 00:40:01,000 Acesta este modul în care sistemul de operare pare să funcționeze. 587 00:40:01,000 --> 00:40:04,000 Acesta este de ce, chiar dacă, de exemplu, 588 00:40:04,000 --> 00:40:10,000 Am fost browser-ul meu rulează, pot activa, de asemenea, pe Spotify și reda o melodie. 589 00:40:10,000 --> 00:40:14,000 Asta e mai mult o chestie conceptuală pentru a înțelege. 590 00:40:14,000 --> 00:40:17,000 Mi-ar lua o privire la firele scurte 591 00:40:17,000 --> 00:40:21,000 dacă doriți să aflați mai multe despre asta. 592 00:40:21,000 --> 00:40:26,000 >> Să vedem, cred că ar fi putut fi 593 00:40:26,000 --> 00:40:31,000 o problema la aceasta într-una din astea. 594 00:40:31,000 --> 00:40:35,000 Din nou, cred ca fire și evenimente nu sunt ceva ce vom acoperi în C 595 00:40:35,000 --> 00:40:41,000 doar pentru ca este mult mai dificilă decât în ​​Scratch. 596 00:40:41,000 --> 00:40:44,000 Tu nu ar trebui să vă faceți griji despre asta acolo, dar cu siguranta intelege conceptele, 597 00:40:44,000 --> 00:40:47,000 înțeleagă ce se întâmplă. 598 00:40:47,000 --> 00:40:52,000 Înainte de a trece mai departe, orice întrebări cu privire Săptămâna 0 materiale? 599 00:40:52,000 --> 00:40:55,000 Toată lumea simte destul de bine? 600 00:40:55,000 --> 00:41:03,000 Înțelegerea și variabile ce o variabilă este? 601 00:41:03,000 --> 00:41:08,000 >> Mergem mai departe. Săptămâna 1. 602 00:41:08,000 --> 00:41:12,000 Un tânăr de lucruri aici care nu au fost acoperite în special 603 00:41:12,000 --> 00:41:21,000 în revizuirea Quiz necesar și, de asemenea, sunt lucruri mult mai conceptuale să se gândească. 604 00:41:21,000 --> 00:41:30,000 Primul este această noțiune a ceea ce de cod sursă, compilatoare și cod obiect sunt. 605 00:41:30,000 --> 00:41:32,000 E cineva? Vasile. 606 00:41:32,000 --> 00:41:37,000 Este obiect de cod Adică codul sursă este ceea ce ai pus în zăngănit, 607 00:41:37,000 --> 00:41:42,000 și codul obiect este ceea ce face să răsune pune în așa fel încât computerul poate citi programul. 608 00:41:42,000 --> 00:41:44,000 Exact. 609 00:41:44,000 --> 00:41:47,000 Codul sursă este codul C pe care le tastezi sus. 610 00:41:47,000 --> 00:41:50,000 Codul obiect este ceea ce te face să răsune din. 611 00:41:50,000 --> 00:41:54,000 E 0s și 1s în format binar. 612 00:41:54,000 --> 00:41:59,000 Atunci ce se întâmplă este atunci când aveți o grămadă de fișiere obiect, 613 00:41:59,000 --> 00:42:04,000 presupunem că întocmirea unui proiect sau a unui program care folosește mai multe fișiere de cod sursă, 614 00:42:04,000 --> 00:42:09,000 care, prin convenție, sunt prezentate extensia c.. fișier. 615 00:42:09,000 --> 00:42:13,000 De aceea avem vigenère.c caesar.c,. 616 00:42:13,000 --> 00:42:18,000 Daca scrii programe Java le dai extensia. Java. 617 00:42:18,000 --> 00:42:24,000 Programele Python au extensia pa de multe ori.. 618 00:42:24,000 --> 00:42:26,000 >> Odată ce aveți mai multe fișiere. C, le compilați. 619 00:42:26,000 --> 00:42:29,000 Zăngănit scuipa toate vechiturile astea binar. 620 00:42:29,000 --> 00:42:33,000 Apoi, pentru ca vrei doar 1 program de 621 00:42:33,000 --> 00:42:37,000 aveți link-ul de linker-ul toate aceste obiecte fișierele împreună 622 00:42:37,000 --> 00:42:40,000 în 1 fișier executabil. 623 00:42:40,000 --> 00:42:45,000 Acest lucru este, de asemenea, ceea ce se întâmplă atunci când utilizați biblioteca CS50, de exemplu. 624 00:42:45,000 --> 00:42:50,000 Biblioteca CS50 este atât faptul că fișierul. H header 625 00:42:50,000 --> 00:42:53,000 că ai citit, asta # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Și atunci este, de asemenea, o bibliotecă specială fișier binar 627 00:42:58,000 --> 00:43:02,000 care a fost compilat care este 0s și 1s, 628 00:43:02,000 --> 00:43:08,000 și că-L de pavilion, așa că, dacă ne întoarcem la spațiile noastre și ne uităm foarte repede 629 00:43:08,000 --> 00:43:11,000 la ce se întâmplă pe aici, atunci când ne uităm la comanda zăngănit noastră, 630 00:43:11,000 --> 00:43:15,000 ceea ce avem este aceasta este codul nostru fișierul sursă, chiar aici. 631 00:43:15,000 --> 00:43:18,000 Acestea sunt o grămadă de steaguri de compilare. 632 00:43:18,000 --> 00:43:22,000 Și apoi, la sfârșitul foarte, acestea-L link-ul de steaguri în 633 00:43:22,000 --> 00:43:30,000 fisierele binare efective pentru aceste 2 biblioteci, biblioteca CS50 și apoi biblioteca matematica. 634 00:43:30,000 --> 00:43:35,000 >> Înțelegerea fiecare tip de fișiere scop " 635 00:43:35,000 --> 00:43:38,000 în procesul de compilare este ceva veți dori să fie în măsură să 636 00:43:38,000 --> 00:43:43,000 da cel puțin o imagine de ansamblu nivel ridicat de. 637 00:43:43,000 --> 00:43:46,000 Codul sursă vine in cod obiect iese. 638 00:43:46,000 --> 00:43:53,000 Fișierele cod obiect lega împreună, și veți obține un fișier frumos, executabil. 639 00:43:53,000 --> 00:43:55,000 Mișto. 640 00:43:55,000 --> 00:43:58,000 Acest lucru este, de asemenea, în cazul în care puteți obține erori de la punctele de mai multe 641 00:43:58,000 --> 00:44:00,000 în procesul de compilare. 642 00:44:00,000 --> 00:44:04,000 Acest lucru este în cazul în care, de exemplu, dacă vă luați acest pavilion care leagă, 643 00:44:04,000 --> 00:44:10,000 pavilion CS50, și îl omite în spațiile sau atunci când execută codul, 644 00:44:10,000 --> 00:44:13,000 acest lucru este în cazul în care veți primi o eroare în faza de legătură, 645 00:44:13,000 --> 00:44:18,000 și linker-ul va spune, "Hei, ai sunat-o funcție getString 646 00:44:18,000 --> 00:44:20,000 care este în bibliotecă CS50. " 647 00:44:20,000 --> 00:44:25,000 "Mi-ai spus că a fost în biblioteca CS50, iar eu nu pot găsi codul pentru acesta." 648 00:44:25,000 --> 00:44:28,000 Asta e în cazul în care trebuie să-l lega în, și asta e separată 649 00:44:28,000 --> 00:44:33,000 dintr-o eroare de compilare deoarece compilatorul se uita la sintaxa si acest gen de lucruri. 650 00:44:33,000 --> 00:44:38,000 E bine să știu ce se întâmplă atunci când. 651 00:44:38,000 --> 00:44:42,000 >> Alte lucruri să știți despre. 652 00:44:42,000 --> 00:44:49,000 Aș spune cu siguranta ai doriți să aruncăm o privire la scurt typecasting face prin Iordania 653 00:44:49,000 --> 00:44:55,000 pentru a înțelege ce Ints sunt sub capota, 654 00:44:55,000 --> 00:44:58,000 ce caractere sunt sub capota. 655 00:44:58,000 --> 00:45:02,000 Atunci când vorbim despre ASCII si am de fapt, uita-te la masa ASCII, 656 00:45:02,000 --> 00:45:07,000 ce face este oferindu-ne o privire sub capota 657 00:45:07,000 --> 00:45:13,000 la modul în care calculatorul reprezintă, de fapt capitalul A și cifra 7 658 00:45:13,000 --> 00:45:17,000 și o virgulă și un semn de întrebare. 659 00:45:17,000 --> 00:45:20,000 Computerul are, de asemenea, moduri speciale de a reprezenta 660 00:45:20,000 --> 00:45:23,000 numărul 7 ca un întreg. 661 00:45:23,000 --> 00:45:27,000 Ea are un mod special de a reprezenta numărul 7 ca un număr în virgulă mobilă, 662 00:45:27,000 --> 00:45:29,000 și acestea sunt foarte diferite. 663 00:45:29,000 --> 00:45:32,000 Typecasting este cum să vă spun calculatorului "Hei, vreau să convertiți 664 00:45:32,000 --> 00:45:37,000 de la o reprezentare la alta reprezentare. " 665 00:45:37,000 --> 00:45:40,000 De ce nu ne aruncăm o privire la asta. 666 00:45:40,000 --> 00:45:44,000 >> Mi-ar lua, de asemenea, o privire la scurt privind bibliotecile și scurt pe compilatoare. 667 00:45:44,000 --> 00:45:47,000 Cei vorbesc despre procesul de compilare, 668 00:45:47,000 --> 00:45:53,000 ceea ce este o bibliotecă, și du-te peste unele dintre aceste intrebari pe care le-ar putea fi întrebat. 669 00:45:53,000 --> 00:45:55,000 Întrebări cu privire la Săptămâna 1 material? 670 00:45:55,000 --> 00:46:03,000 Există subiecte pe aici care par descurajatoare doriți să acopere? 671 00:46:03,000 --> 00:46:07,000 Am încercat să arunce în aer prin cele mai multe dintre aceste subiecte anterioare, astfel încât să putem ajunge la 672 00:46:07,000 --> 00:46:13,000 Pointeri și face un pic de recursivitate. 673 00:46:13,000 --> 00:46:15,000 Gânduri? 674 00:46:15,000 --> 00:46:19,000 Orice pentru a acoperi? 675 00:46:19,000 --> 00:46:21,000 Timp pentru unele ciocolată poate? 676 00:46:21,000 --> 00:46:23,000 Voi sunt de lucru prin ea. 677 00:46:23,000 --> 00:46:26,000 Am de gând să păstreze sorbindu pe cafeaua mea. 678 00:46:26,000 --> 00:46:31,000 Săptămâna 2. 679 00:46:31,000 --> 00:46:34,000 Bine apel, apel bună. 680 00:46:34,000 --> 00:46:38,000 În Săptămâna 2 am vorbit un pic mai mult despre funcții. 681 00:46:38,000 --> 00:46:43,000 >> În prima seturi de probleme câteva noi nu am scrie într-adevăr orice funcție, la toate 682 00:46:43,000 --> 00:46:45,000 altele decât funcția de care? 683 00:46:45,000 --> 00:46:47,000 [Student] Principal >> principal., Exact. 684 00:46:47,000 --> 00:46:51,000 Și așa am văzut costume diferite pe care principalul poarta. 685 00:46:51,000 --> 00:46:54,000 Nu e cel în care este nevoie de nici un argument, 686 00:46:54,000 --> 00:46:58,000 și ne spune doar anulate în între paranteze, 687 00:46:58,000 --> 00:47:01,000 și apoi acolo e cealaltă în cazul în care ne dorim să argumente în linia de comandă, 688 00:47:01,000 --> 00:47:08,000 și așa cum am văzut, că e în cazul în care aveți argc și argv int string matrice 689 00:47:08,000 --> 00:47:13,000 sau acum că ne-am expus, de fapt șir pentru a fi char *, care este 690 00:47:13,000 --> 00:47:20,000 vom începe să scrie ca char * argv și apoi paranteze. 691 00:47:20,000 --> 00:47:22,000 În set Problema 3, voi a văzut o grămadă de funcții, 692 00:47:22,000 --> 00:47:27,000 și vă implementat o grămadă de funcții, elaborează, privi în sus, goana. 693 00:47:27,000 --> 00:47:31,000 Prototipurile au fost toate scrise acolo pentru tine. 694 00:47:31,000 --> 00:47:33,000 >> Ceea ce am vrut să vorbesc despre aici cu funcții foarte repede 695 00:47:33,000 --> 00:47:38,000 este că există 3 piese pentru a le ori de câte ori vă scrie o funcție. 696 00:47:38,000 --> 00:47:43,000 Trebuie să specificați tipul de revenirea funcției. 697 00:47:43,000 --> 00:47:46,000 Trebuie să specificați un nume pentru funcția, iar apoi va trebui să specificați 698 00:47:46,000 --> 00:47:51,000 lista de argumente sau lista de parametri. 699 00:47:51,000 --> 00:47:57,000 De exemplu, dacă ar fi să scriu o funcție pentru a rezuma o grămadă de numere întregi 700 00:47:57,000 --> 00:48:03,000 și a reveni apoi la mine suma intre ceea ce ar fi genul meu retur 701 00:48:03,000 --> 00:48:06,000 în cazul în care am vrut să rezuma întregi și apoi să se întoarcă suma? 702 00:48:06,000 --> 00:48:12,000 Apoi numele funcției. 703 00:48:12,000 --> 00:48:27,000 Dacă aș merge mai departe și de a scrie în verde, această parte este de tip întoarcere. 704 00:48:27,000 --> 00:48:34,000 Această parte este numele. 705 00:48:34,000 --> 00:48:40,000 Și apoi între paranteze 706 00:48:40,000 --> 00:48:46,000 este locul unde dau argumente, 707 00:48:46,000 --> 00:48:56,000 de multe ori abreviat ca argumente, numite uneori params pentru parametri. 708 00:48:56,000 --> 00:49:00,000 Și, dacă aveți unul, voi specifica doar unul. 709 00:49:00,000 --> 00:49:06,000 Dacă aveți mai multe vă separați fiecare cu o virgulă. 710 00:49:06,000 --> 00:49:13,000 Și pentru fiecare argument voi da 2 lucruri care sunt, Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Trebuie să dea tipul și apoi numele. 712 00:49:18,000 --> 00:49:21,000 Și apoi numele, iar numele este numele pe care ai de gând să utilizați 713 00:49:21,000 --> 00:49:25,000 să se refere la acest argument în cadrul funcției suma, 714 00:49:25,000 --> 00:49:27,000 în cadrul funcției pe care îl scrieți în acel moment. 715 00:49:27,000 --> 00:49:32,000 >> Nu trebuie să-de exemplu, în cazul în care am de gând să rezum, 716 00:49:32,000 --> 00:49:41,000 spun, un tablou de întregi, noi vom face matrice int, 717 00:49:41,000 --> 00:49:46,000 și eu voi da eu cateva acolade acolo- 718 00:49:46,000 --> 00:49:51,000 atunci când trec o matrice a funcției suma 719 00:49:51,000 --> 00:49:55,000 Am să-l dați în prima poziție din lista de argumente. 720 00:49:55,000 --> 00:49:59,000 Dar matrice pe care am trece în nu trebuie să aibă ARR nume. 721 00:49:59,000 --> 00:50:07,000 ARR va fi cum am referi la acest argument în corpul funcției. 722 00:50:07,000 --> 00:50:10,000 Un alt lucru de care avem nevoie pentru a lua în considerare, 723 00:50:10,000 --> 00:50:14,000 și acest lucru este ușor diferită de funcții, dar cred că e un punct important, 724 00:50:14,000 --> 00:50:20,000 este faptul că, în C atunci când am scris o funcție ca aceasta 725 00:50:20,000 --> 00:50:29,000 cum știu cât de multe elemente sunt, în această matrice? 726 00:50:29,000 --> 00:50:31,000 Acest lucru este oarecum de o întrebare capcană. 727 00:50:31,000 --> 00:50:35,000 Am vorbit despre acest lucru un pic la punctul de săptămâna trecută. 728 00:50:35,000 --> 00:50:40,000 Cum știu numărul de elemente din interiorul unei matrice în C? 729 00:50:40,000 --> 00:50:44,000 Există o cale? 730 00:50:44,000 --> 00:50:49,000 >> Se pare că nu există nici o modalitate de a ști. 731 00:50:49,000 --> 00:50:52,000 Trebuie să-l treci în mod separat. 732 00:50:52,000 --> 00:50:55,000 Există un truc pe care le puteți face 733 00:50:55,000 --> 00:51:00,000 dacă vă aflați în aceeași funcție în care a fost declarată matrice, 734 00:51:00,000 --> 00:51:04,000 și lucrați cu o matrice stivă. 735 00:51:04,000 --> 00:51:06,000 Dar asta funcționează numai dacă vă aflați în aceeași funcție. 736 00:51:06,000 --> 00:51:09,000 După ce treci un tablou la altul funcție sau dacă v-ați declarat o matrice 737 00:51:09,000 --> 00:51:12,000 și că ai pus matrice pe heap, malloc ați utilizat 738 00:51:12,000 --> 00:51:15,000  și că astfel de lucruri, atunci toate pariurile sunt oprite. 739 00:51:15,000 --> 00:51:18,000 Apoi, de fapt, trebuie să treacă în jurul valorii de 740 00:51:18,000 --> 00:51:21,000 un argument special sau un alt parametru 741 00:51:21,000 --> 00:51:23,000 vă spune cât de mare este matrice. 742 00:51:23,000 --> 00:51:28,000 În acest caz, aș dori să utilizați o virgulă-Îmi pare rău, se merge off-screen aici 743 00:51:28,000 --> 00:51:32,000 și aș trece într-un alt argument 744 00:51:32,000 --> 00:51:40,000  și sună-l LEN int pentru lungime. 745 00:51:40,000 --> 00:51:44,000 >> Un lucru care ar putea veni în testul 746 00:51:44,000 --> 00:51:49,000 vă cere să scrie sau să implementeze o anumită funcție numită ceva. 747 00:51:49,000 --> 00:51:54,000 Dacă nu ne dau prototip, astfel încât toată chestia asta aici, 748 00:51:54,000 --> 00:51:58,000 toată mizeria asta se numește declarație a funcției sau prototip funcția, 749 00:51:58,000 --> 00:52:01,000 acesta este unul dintre primele lucruri pe care veți dori să vă unghii dacă nu a dat 750 00:52:01,000 --> 00:52:03,000 pentru a vă imediat pe testul. 751 00:52:03,000 --> 00:52:06,000 Trucul care le-am învățat este că 752 00:52:06,000 --> 00:52:11,000 zic sa facem da un prototip pentru o funcție, iar noi spunem, "Hei, ai să-l scrie." 753 00:52:11,000 --> 00:52:16,000 În interiorul acolade care le aveți în testul 754 00:52:16,000 --> 00:52:20,000 dacă observați că există un tip de întoarcere și observați că revenirea tipul de 755 00:52:20,000 --> 00:52:25,000 este altceva decât anulate, ceea ce înseamnă că funcția nu întoarce nimic, 756 00:52:25,000 --> 00:52:28,000 atunci cu siguranta ai un singur lucru vreau să faceți este să scrie 757 00:52:28,000 --> 00:52:33,000 un fel de întoarcere la situația sfârșitul funcției. 758 00:52:33,000 --> 00:52:40,000 Rentabilitatea, și în acest caz, vom pune un martor pentru că vrem să completați în gol. 759 00:52:40,000 --> 00:52:44,000 Dar acest lucru devine te gândești în mod corect cu privire la modul în care am de gând să abordeze această problemă? 760 00:52:44,000 --> 00:52:49,000 Și îți aduce aminte ai de gând să aibă de a returna o valoare 761 00:52:49,000 --> 00:52:51,000 la apelantul a funcției. 762 00:52:51,000 --> 00:52:54,000 >> Da >> [elevului]. Are stil se aplică atunci când suntem scrierea de cod pe testul? 763 00:52:54,000 --> 00:52:58,000 Cum ar fi indentarea și că astfel de lucruri >> [Student]? Da. 764 00:52:58,000 --> 00:53:00,000 Nu, nu la fel de mult. 765 00:53:00,000 --> 00:53:09,000 Cred că o mulțime de-acest lucru este ceva vom clarifica pe testul privind ziua, 766 00:53:09,000 --> 00:53:15,000 dar de obicei griji # include și acest tip de lucruri, e un fel de afara. 767 00:53:15,000 --> 00:53:17,000 [Student] Ai nevoie pentru a comenta codul de mână? 768 00:53:17,000 --> 00:53:19,000 Ai nevoie pentru a comenta codul de mână? 769 00:53:19,000 --> 00:53:24,000 Comentând este întotdeauna bună, dacă sunteți îngrijorat de credit parțiale 770 00:53:24,000 --> 00:53:29,000 sau dacă doriți să comunicați intenția dumneavoastră de a greder. 771 00:53:29,000 --> 00:53:33,000 Dar eu, din nou, se va clarifica pe testul în sine și în ziua test, 772 00:53:33,000 --> 00:53:39,000 dar eu nu cred că va fi necesar pentru a scrie comentarii, nr. 773 00:53:39,000 --> 00:53:42,000 De obicei nu, dar este cu siguranta genul de lucru în cazul în care 774 00:53:42,000 --> 00:53:45,000 puteți comunica intentia voastra, ca "Hei, acest lucru este în cazul în care am de gând cu el." 775 00:53:45,000 --> 00:53:49,000 Și, uneori, care poate ajuta cu credit parțiale. 776 00:53:49,000 --> 00:53:51,000 Mișto. 777 00:53:51,000 --> 00:53:53,000 >> Vasile. 778 00:53:53,000 --> 00:53:56,000 [Vasile] Care este diferența dintre declararea, spune, int lang 779 00:53:56,000 --> 00:54:03,000 în argumentele sau parametri față de declarare a unei variabile în cadrul funcției? 780 00:54:03,000 --> 00:54:05,000 Wow, cafea coborât trahee. 781 00:54:05,000 --> 00:54:07,000 [Vasile] Ca lucrurile pe care ne-o dorim pentru a pune în argumente. 782 00:54:07,000 --> 00:54:09,000 Da, asta este o întrebare mare. 783 00:54:09,000 --> 00:54:11,000 Cum a face tu alegi ce lucruri pe care doriți să pună în argumentele 784 00:54:11,000 --> 00:54:17,000 față de ce lucruri ar trebui să faci în interiorul funcției? 785 00:54:17,000 --> 00:54:24,000 În acest caz, am inclus ambele acestea ca argumente 786 00:54:24,000 --> 00:54:29,000 pentru că sunt ceva ce oricine se va folosi funcția de suma 787 00:54:29,000 --> 00:54:32,000 trebuie să se precizeze aceste lucruri. 788 00:54:32,000 --> 00:54:35,000 >> Funcția SUM, cum am vorbit despre, nu are nici o modalitate de a ști 789 00:54:35,000 --> 00:54:40,000 cât de mare este acesta devine matrice de apelant sau oricine este folosind funcția SUM. 790 00:54:40,000 --> 00:54:44,000 Ea nu are nici o modalitate de a ști cât de mare este faptul că matrice. 791 00:54:44,000 --> 00:54:48,000 Motivul pentru care trece în acest lungime de aici ca un argument 792 00:54:48,000 --> 00:54:51,000 este pentru că e ceva ce ne spune în esență apelantul a funcției, 793 00:54:51,000 --> 00:54:55,000 oricine se va utiliza funcția suma, "Hei, nu numai că trebuie să ne dai o matrice 794 00:54:55,000 --> 00:54:59,000 de Ints, de asemenea, trebuie să ne spună cât de mare matrice pe care le-ați dat noi este. " 795 00:54:59,000 --> 00:55:03,000 [Vasile] Acestea vor fi atât argumente de linie de comandă? 796 00:55:03,000 --> 00:55:06,000 Nu, acestea sunt argumente reale pe care le-ar trece la funcția. 797 00:55:06,000 --> 00:55:10,000 >> Lasă-mă să fac o pagină nouă aici. 798 00:55:10,000 --> 00:55:13,000 [Vasile] Ca și numele ar trece- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Dacă am int main (void), 800 00:55:24,000 --> 00:55:27,000 și am de gând să pună la 0 la întoarcerea mea aici, la partea de jos, 801 00:55:27,000 --> 00:55:31,000 si spun vreau pentru a apela funcția suma. 802 00:55:31,000 --> 00:55:42,000 Vreau să spun int x = suma intre (); 803 00:55:42,000 --> 00:55:46,000 Pentru a utiliza funcția de suma trebuie să treacă atât matrice pe care vreau să rezum 804 00:55:46,000 --> 00:55:51,000 și lungimea de matrice, astfel încât în ​​cazul în care acest lucru este 805 00:55:51,000 --> 00:55:54,000 presupunând Am avut o serie de Ints, 806 00:55:54,000 --> 00:56:12,000 spun că am avut int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 tip de utilizare, care hacked sus sintaxa chiar acolo, 808 00:56:16,000 --> 00:56:21,000 atunci ce aș face este in suma intre aș dori să treacă în 809 00:56:21,000 --> 00:56:27,000 atât numbaz și numărul 3 810 00:56:27,000 --> 00:56:30,000 să-i spuneți funcția suma "Bine, aici e matrice vreau să însumați." 811 00:56:30,000 --> 00:56:34,000 "Aici e dimensiunea sa." 812 00:56:34,000 --> 00:56:39,000 Are vreun sens? Asta răspunde la întrebarea dvs.? 813 00:56:39,000 --> 00:56:42,000 >> În multe feluri face paralel ceea ce facem noi cu principalele 814 00:56:42,000 --> 00:56:44,000 atunci când avem argumente în linia de comandă. 815 00:56:44,000 --> 00:56:47,000 Un program la fel ca Caesar cifru, de exemplu, că este nevoie 816 00:56:47,000 --> 00:56:53,000 argumente în linia de comandă nu ar fi putut să fac nimic. 817 00:56:53,000 --> 00:56:57,000 Aceasta nu ar ști cum să cripta, dacă nu ai spune ca ceea ce-cheie pentru a utiliza 818 00:56:57,000 --> 00:57:03,000 sau, dacă nu l-ați spus ce ai vrut șir pentru a cripta. 819 00:57:03,000 --> 00:57:08,000 Fapt care ia determinat pentru intrare, acest lucru este în cazul în care ne-am luat 2 mecanisme diferite 820 00:57:08,000 --> 00:57:14,000 pentru a lua de intrare de la utilizator, pentru a lua informații de la utilizator. 821 00:57:14,000 --> 00:57:19,000 Problema pentru Set 1 am vazut acest GetInt, getString, felul GetFloat 822 00:57:19,000 --> 00:57:26,000 de a trezi pentru intrare, și că se numește folosind fluxul de intrare standard. 823 00:57:26,000 --> 00:57:28,000 E puțin diferit. 824 00:57:28,000 --> 00:57:31,000 E ceva ce se poate face la un moment dat, spre deosebire de 825 00:57:31,000 --> 00:57:35,000 atunci când invoca programul, atunci când începe programul de funcționare. 826 00:57:35,000 --> 00:57:41,000 Argumentele din linia de comandă sunt specificate toate atunci când începe programul de funcționare. 827 00:57:41,000 --> 00:57:47,000 Am fost amestecarea celor doi. 828 00:57:47,000 --> 00:57:52,000 Când ne-am folosi argumente pentru o funcție, e mai mult ca argumente linia de comandă pentru principal. 829 00:57:52,000 --> 00:57:56,000 Este atunci când invoca funcția de care aveți nevoie să-l spun 830 00:57:56,000 --> 00:58:05,000 exact ceea ce are nevoie pentru a-și îndeplini sarcinile. 831 00:58:05,000 --> 00:58:08,000 Un alt lucru bun să se uite la și te voi lasa sa te uiti la el in timpul liber, 832 00:58:08,000 --> 00:58:11,000 și a fost acoperit în Quiz-a fost această noțiune a domeniului de aplicare 833 00:58:11,000 --> 00:58:15,000 variabile locale și variabile globale față. 834 00:58:15,000 --> 00:58:18,000 Face să acorde o atenție la asta. 835 00:58:18,000 --> 00:58:23,000 >> Acum, că ne apropiem cu privire la acest alte chestii, 836 00:58:23,000 --> 00:58:27,000 în Săptămâna 3 am început să vorbim despre căutarea și sortarea. 837 00:58:27,000 --> 00:58:32,000 Căutarea și sortarea, cel puțin în CS50, 838 00:58:32,000 --> 00:58:39,000 este foarte mult o introducere la unele dintre cele mai multe părți teoretice ale informaticii. 839 00:58:39,000 --> 00:58:42,000 Problema căutării, problema de sortare 840 00:58:42,000 --> 00:58:46,000 sunt probleme mari, canonice. 841 00:58:46,000 --> 00:58:52,000 Cum să găsiți un anumit număr într-o serie de miliarde de numere întregi? 842 00:58:52,000 --> 00:58:55,000 Cum veți găsi un anumit nume într-o carte de telefon 843 00:58:55,000 --> 00:58:59,000 care este stocat pe laptop-ul? 844 00:58:59,000 --> 00:59:04,000 Și așa vom introduce această noțiune de timpul de functionare asimptotice 845 00:59:04,000 --> 00:59:11,000 pentru a cuantifica într-adevăr cât timp, cât de greu aceste probleme sunt, 846 00:59:11,000 --> 00:59:14,000 Cât timp le iau pentru a rezolva. 847 00:59:14,000 --> 00:59:20,000 In, cred, testul lui 2011 există o problemă care cred că merită 848 00:59:20,000 --> 00:59:27,000 acoperind foarte rapid, care este aceasta, problema 12. 849 00:59:27,000 --> 00:59:32,000 O, nu, e Omega. 850 00:59:32,000 --> 00:59:41,000 >> Aici vorbim despre timpul de functionare cel mai rapid posibil 851 00:59:41,000 --> 00:59:46,000 pentru un algoritm special, și apoi timpul de functionare cel mai lent posibil. 852 00:59:46,000 --> 00:59:52,000 Acest Omega și O sunt într-adevăr doar comenzi rapide. 853 00:59:52,000 --> 00:59:55,000 Sunt rapide notație pentru a spune 854 00:59:55,000 --> 00:59:59,000 cat de repede în cazul cel mai bun posibil voința noastră algoritm termen, 855 00:59:59,000 --> 01:00:06,000 și cât de lent, în cazul cel mai defavorabil posibil va rula algoritmul nostru? 856 01:00:06,000 --> 01:00:10,000 Hai sa facem un cuplu de acestea, iar acestea au fost, de asemenea, acoperite 857 01:00:10,000 --> 01:00:13,000 în scurt pe notația asimptotică, pe care am foarte recomanda. 858 01:00:13,000 --> 01:00:17,000 Jackson a facut o treaba foarte buna. 859 01:00:17,000 --> 01:00:23,000 Cu binar de căutare, vorbim despre binar de căutare ca fiind un algoritm, 860 01:00:23,000 --> 01:00:28,000 și, de obicei, vorbim despre ea în termeni de O. său mai mare 861 01:00:28,000 --> 01:00:30,000 Care este Big O? 862 01:00:30,000 --> 01:00:34,000 Care este timpul de funcționare cel mai lent posibil de căutare binare? 863 01:00:34,000 --> 01:00:36,000 [Student] N ²? 864 01:00:36,000 --> 01:00:41,000 Aproape, cred similară cu cea. 865 01:00:41,000 --> 01:00:43,000 E mult mai repede decat asta. 866 01:00:43,000 --> 01:00:45,000 [Student] binară >> Da?, Căutare binară. 867 01:00:45,000 --> 01:00:47,000 [Student] E log n. 868 01:00:47,000 --> 01:00:49,000 Log n, astfel încât ceea ce face log n înseamnă? 869 01:00:49,000 --> 01:00:51,000 Acesta reprize de fiecare iterație. 870 01:00:51,000 --> 01:00:56,000 Exact, astfel încât în ​​cazul cel mai lent posibil, 871 01:00:56,000 --> 01:01:00,000 spun că dacă aveți o matrice sortate 872 01:01:00,000 --> 01:01:08,000 de un milion de numere întregi și numărul pe care îl căutați pentru 873 01:01:08,000 --> 01:01:14,000 este fie element foarte prima matrice sau element foarte ultimul în matrice. 874 01:01:14,000 --> 01:01:18,000 Amintiți-vă, algoritmul de cautare binara funcționează prin uită la elementul din mijloc, 875 01:01:18,000 --> 01:01:21,000 văzând în cazul în care este meciul pe care îl căutați pentru. 876 01:01:21,000 --> 01:01:23,000 Dacă este, atunci mare, l-ai găsit. 877 01:01:23,000 --> 01:01:27,000 >> În cazul cel mai bun posibil, cât de repede se caută termen binar? 878 01:01:27,000 --> 01:01:29,000 [Studenții] 1. 879 01:01:29,000 --> 01:01:32,000 1, e timpul constanta, Big O de 1. Da. 880 01:01:32,000 --> 01:01:36,000 [Student] Am o întrebare. Când spui jurnal de n, adică în ceea ce privește baza 2, nu? 881 01:01:36,000 --> 01:01:40,000 Da, așa că e alt lucru. 882 01:01:40,000 --> 01:01:44,000 Noi spunem n log, și cred că atunci când am fost în liceu 883 01:01:44,000 --> 01:01:48,000 Intotdeauna mi-am presupus că jurnalul a fost baza 10. 884 01:01:48,000 --> 01:01:57,000 Da, așa da, log 2 de bază de obicei, este ceea ce vom folosi. 885 01:01:57,000 --> 01:02:02,000 Din nou, merge înapoi la binar de căutare, dacă vă căutați pentru oricare 886 01:02:02,000 --> 01:02:05,000 element la sfârșitul sau element la început, 887 01:02:05,000 --> 01:02:08,000 deoarece începe în mijloc și apoi aruncați 888 01:02:08,000 --> 01:02:13,000 în funcție de jumătate nu îndeplinesc criteriile pe care îl căutați, 889 01:02:13,000 --> 01:02:15,000 și te duci la urmatoarea jumatate si urmatoarea jumatate si urmatoarea jumatate. 890 01:02:15,000 --> 01:02:19,000 Dacă eu caut pentru cel mai mare element din matrice întreg milioane de euro 891 01:02:19,000 --> 01:02:25,000 Am de gând să-l reducă la jumătate, la cea mai mare jurnalul de 1 milion de ori 892 01:02:25,000 --> 01:02:28,000 înainte de a mă testa în cele din urmă și vezi că elementul caut 893 01:02:28,000 --> 01:02:33,000 este în cea mai mare sau în cea mai mare indicele de matrice, 894 01:02:33,000 --> 01:02:38,000 și care va avea jurnal de n, jurnal de 1 milion de ori. 895 01:02:38,000 --> 01:02:40,000 >> Sortare Bubble. 896 01:02:40,000 --> 01:02:43,000 Nu voi aminti algoritmul de sortare cu bule? 897 01:02:43,000 --> 01:02:47,000 Kevin, poți să-mi dai o recapitulare rapidă a ceea ce sa întâmplat în algoritmul de sortare cu bule? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Practic merge prin tot în listă. 899 01:02:50,000 --> 01:02:52,000 Se uită la primele două. 900 01:02:52,000 --> 01:02:55,000 Dacă primul este mai mare decât cea de a doua le swap-urilor. 901 01:02:55,000 --> 01:02:58,000 Apoi se compară doilea și al treilea, același lucru, swap-uri, 902 01:02:58,000 --> 01:03:00,000 treia și a patra, tot drumul în jos. 903 01:03:00,000 --> 01:03:03,000 Numerele mai mari va urmări până la capăt. 904 01:03:03,000 --> 01:03:07,000 Și după toate acestea, de multe bucle ați terminat. 905 01:03:07,000 --> 01:03:11,000 Exact, deci ceea ce a spus Kevin este că vom urmări numere mai mari 906 01:03:11,000 --> 01:03:15,000 bule până la sfârșitul matrice. 907 01:03:15,000 --> 01:03:19,000 De exemplu, te superi de mers pe jos ne prin intermediul acestui exemplu, dacă acest lucru este gama noastră? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Vei lua 2 și 3. 909 01:03:21,000 --> 01:03:23,000 3 este mai mare decât 2, asa ca le schimba. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Corect, asa ca am schimb de acestea, și astfel ajungem 2, 3, 6, 4, și 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Apoi, să comparați 3 și 6. 912 01:03:31,000 --> 01:03:33,000 3 este mai mică decât 6, astfel încât să lăsați-le, 913 01:03:33,000 --> 01:03:37,000 și 6 și 4, le vei schimba, deoarece 4 este mai mic decât 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Corect, așa că am obține 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] și 9 este mai mare decât 6, așa că lăsați-l. 916 01:03:46,000 --> 01:03:48,000 Și te-ai întoarce prin asta din nou. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Sunt făcut în acest moment? >> [Kevin] Nr 918 01:03:50,000 --> 01:03:52,000 Și de ce nu am făcut în acest moment? 919 01:03:52,000 --> 01:03:54,000 Pentru ca se pare ca matrice mea este sortat. Mă uit la ea. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Du-te prin ea din nou și asigurați-vă că nu există nici un swap mai 921 01:03:57,000 --> 01:04:00,000 înainte de a putea opri în totalitate. 922 01:04:00,000 --> 01:04:04,000 Exact, așa că trebuie să continui prin și asigurați-vă că nu există swap 923 01:04:04,000 --> 01:04:06,000 pe care le puteți face în acest moment. 924 01:04:06,000 --> 01:04:08,000 A fost într-adevăr la fel de norocos, cum ai spus, că am ajuns 925 01:04:08,000 --> 01:04:12,000 numai având de a face o trecere prin și suntem sortate. 926 01:04:12,000 --> 01:04:16,000 Dar pentru a face acest lucru, în cazul general, vom avea de fapt de a face acest lucru de peste si peste din nou. 927 01:04:16,000 --> 01:04:20,000 Și, de fapt, acesta a fost un exemplu de caz cel mai bun posibil, 928 01:04:20,000 --> 01:04:24,000 cum am văzut în problema. 929 01:04:24,000 --> 01:04:28,000 Am văzut că acest caz a fost cel mai bun posibil n. 930 01:04:28,000 --> 01:04:32,000 Am trecut prin matrice 1 dată. 931 01:04:32,000 --> 01:04:35,000 Care este cel mai rău caz posibil pentru acest algoritm? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 Și ce înseamnă acest aspect place? Ce ar fi un aspect matrice de genul asta ar lua n timp ²? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [neauzit] sortate. 935 01:04:43,000 --> 01:04:51,000 Exact, așa că, dacă am avut matrice 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 prima ar fi 9 bula tot drumul până. 937 01:04:54,000 --> 01:04:59,000 După 1 iteratie vom avea 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Apoi, 7 ar bubble sus, 6, 5, 2, 7, 9, și așa mai departe și așa mai departe. 939 01:05:07,000 --> 01:05:13,000 >> Ne-ar trebui să treacă prin întregul tablou de n ori, 940 01:05:13,000 --> 01:05:16,000 și puteți obține de fapt, ceva mai precis decât această 941 01:05:16,000 --> 01:05:23,000 pentru că odată ce ne-am mutat 9 tot drumul până în poziția sa posibilă ultimul 942 01:05:23,000 --> 01:05:26,000 știm că niciodată nu trebuie să ne compara cu acest element din nou. 943 01:05:26,000 --> 01:05:29,000 Odată ce vom începe barbotare 7 în sus 944 01:05:29,000 --> 01:05:35,000 știm că ne putem opri o dată 7 este chiar înainte de 9 945 01:05:35,000 --> 01:05:37,000 de când am comparat deja 9 la ea. 946 01:05:37,000 --> 01:05:46,000 Dacă faceți acest lucru într-un mod inteligent, nu e adevărat, eu cred, că de mult timp. 947 01:05:46,000 --> 01:05:49,000 Nu te duci să compare toate posibilele combinații [] fără sunet 948 01:05:49,000 --> 01:05:55,000 de fiecare data cand trece prin fiecare iterație. 949 01:05:55,000 --> 01:05:59,000 Dar totuși, atunci când vorbim despre asta legat de sus spunem că 950 01:05:59,000 --> 01:06:04,000 cautati la n ² comparații tot drumul prin. 951 01:06:04,000 --> 01:06:12,000 >> Să mergem înapoi, și din moment ce suntem de plecare pentru a obține un pic pe scurt timp 952 01:06:12,000 --> 01:06:15,000 Aș spune că ar trebui să meargă cu siguranta prin restul acestui tabel, 953 01:06:15,000 --> 01:06:17,000 completați totul afară. 954 01:06:17,000 --> 01:06:20,000 Gândiți-vă la exemple. Gândește-te la exemple concrete. 955 01:06:20,000 --> 01:06:22,000 Asta e foarte util și de ajutor pentru a face. 956 01:06:22,000 --> 01:06:25,000 Desenați-l. 957 01:06:25,000 --> 01:06:28,000 Aceasta este un fel de tabel că pe măsură ce trece prin în informatică 958 01:06:28,000 --> 01:06:32,000 tu ar trebui să înceapă cu adevărat să știu de inima cu aceste. 959 01:06:32,000 --> 01:06:34,000 Acestea sunt tipurile de întrebări care le obține în interviuri. 960 01:06:34,000 --> 01:06:36,000 Acestea sunt felul de lucruri care sunt bine de stiut, 961 01:06:36,000 --> 01:06:41,000 și cred că despre aceste cazuri de margine, într-adevăr imaginind cum să gândească 962 01:06:41,000 --> 01:06:45,000 știind că pentru bula sorta matrice cel mai rau posibil 963 01:06:45,000 --> 01:06:52,000 pentru a sorta cu care este unul care e în ordine inversă. 964 01:06:52,000 --> 01:06:58,000 >> Pointeri. Să vorbim un pic despre pointeri. 965 01:06:58,000 --> 01:07:03,000 În ultimele minute avem aici 966 01:07:03,000 --> 01:07:11,000 Știu că acest lucru este ceva împreună cu dosarul de I / O, care este destul de nou. 967 01:07:11,000 --> 01:07:19,000 Atunci când vorbim despre indicii motiv dorim să vorbim despre pointeri 968 01:07:19,000 --> 01:07:24,000 este că, o, atunci când lucrăm în C 969 01:07:24,000 --> 01:07:33,000 suntem într-adevăr la un nivel destul de scăzut în comparație cu limbile cele mai moderne de programare. 970 01:07:33,000 --> 01:07:38,000 Suntem de fapt în măsură de a manipula variabilele din memorie, 971 01:07:38,000 --> 01:07:43,000 seama în cazul în care acestea sunt de fapt localizat în RAM nostru. 972 01:07:43,000 --> 01:07:46,000 Odată ce ați plecat pentru a lua lecții de sisteme de operare care le veți vedea 973 01:07:46,000 --> 01:07:48,000 că e, din nou, un fel de abstractizare. 974 01:07:48,000 --> 01:07:50,000 Asta nu e de fapt cazul. 975 01:07:50,000 --> 01:07:52,000 Avem de memorie virtuală, care se ascunde aceste detalii de la noi. 976 01:07:52,000 --> 01:07:58,000 >> Dar pentru acum puteți presupune că, atunci când aveți un program, 977 01:07:58,000 --> 01:08:02,000 de exemplu, atunci când începe să ruleze programul-ta Cezar cifru 978 01:08:02,000 --> 01:08:06,000 Voi reveni la iPad mea foarte repede, 979 01:08:06,000 --> 01:08:12,000 faptul că, la început de program, dacă aveți, să zicem, 980 01:08:12,000 --> 01:08:15,000 4 GB de memorie RAM de pe laptop-ul, 981 01:08:15,000 --> 01:08:21,000 te deoparte această bucată, și vom numi această memorie RAM. 982 01:08:21,000 --> 01:08:25,000 Și începe într-un loc vom apela 0, 983 01:08:25,000 --> 01:08:30,000 și se termină într-un loc pe care vom numi 4 gigaocteți. 984 01:08:30,000 --> 01:08:37,000 Chiar nu pot scrie. Omul, care este hacked. 985 01:08:37,000 --> 01:08:40,000 Atunci când programul tău execută 986 01:08:40,000 --> 01:08:44,000 sistemul de operare zugraveste RAM, 987 01:08:44,000 --> 01:08:51,000 și specifică segmente diferite pentru diferite părți ale programului tău de a trăi inch 988 01:08:51,000 --> 01:08:58,000 Aici jos această zonă este un fel de țară a nimănui. 989 01:08:58,000 --> 01:09:02,000 Când te duci un pic mai departe aici 990 01:09:02,000 --> 01:09:05,000 le-ați luat de fapt locul unde 991 01:09:05,000 --> 01:09:09,000 codul pentru viața programul tău. 992 01:09:09,000 --> 01:09:13,000 Acest cod binar, care de fapt fișier executabil se încarcă în memorie 993 01:09:13,000 --> 01:09:17,000 atunci când executați un program, și trăiește în segmentul de cod. 994 01:09:17,000 --> 01:09:22,000 Și, ca program execute procesorul se uită la acest segment de cod 995 01:09:22,000 --> 01:09:24,000 să dau seama ce este următoarea instrucțiune? 996 01:09:24,000 --> 01:09:27,000 Care este următoarea linie de cod am nevoie pentru a executa? 997 01:09:27,000 --> 01:09:31,000 >> Există, de asemenea, un segment de date, iar acest lucru este în cazul în care aceste constante șir 998 01:09:31,000 --> 01:09:34,000 primi stocate pe care le-ați folosit. 999 01:09:34,000 --> 01:09:42,000 Și apoi mai departe acolo e locul numit heap. 1000 01:09:42,000 --> 01:09:46,000 Am accesa memoria de acolo prin utilizarea malloc, 1001 01:09:46,000 --> 01:09:49,000 și apoi spre partea de sus a programului 1002 01:09:49,000 --> 01:09:52,000 e stivă, 1003 01:09:52,000 --> 01:09:57,000 și că, în cazul în care este ne-am jucat pentru cea mai mare parte de la început. 1004 01:09:57,000 --> 01:09:59,000 Acest lucru nu este la scară sau nimic. 1005 01:09:59,000 --> 01:10:03,000 O mulțime de acest lucru este foarte dependentă de mașină, 1006 01:10:03,000 --> 01:10:10,000 dependentă de sistemul de operare, dar acest lucru este destul de modul în care lucrurile se chunked sus. 1007 01:10:10,000 --> 01:10:17,000 Când executați un program și vă declara o variabila numita x- 1008 01:10:17,000 --> 01:10:27,000 Am de gând să tragă o altă casetă de mai jos, iar aceasta va fi RAM, de asemenea. 1009 01:10:27,000 --> 01:10:29,000 Și am de gând să se uite. 1010 01:10:29,000 --> 01:10:34,000 Vom desena linii zimțate pentru a indica acest lucru este doar o mică secțiune de RAM 1011 01:10:34,000 --> 01:10:38,000 și nu toate ca ne trage în partea de sus. 1012 01:10:38,000 --> 01:10:43,000 >> Dacă aș declara o variabila integer, numit x, 1013 01:10:43,000 --> 01:10:49,000 atunci ceea ce primesc de fapt, este o mapare 1014 01:10:49,000 --> 01:10:54,000 care este stocată în tabela de simboluri a programului meu 1015 01:10:54,000 --> 01:11:00,000 care conectează x numele în această regiune de memorie care le-am întocmit 1016 01:11:00,000 --> 01:11:03,000 chiar aici între barele verticale. 1017 01:11:03,000 --> 01:11:08,000 Dacă am avea o linie de cod in programul meu care spune că x = 7 1018 01:11:08,000 --> 01:11:15,000 procesorul știe "Oh, bine, știu că viața x la această locație în memorie." 1019 01:11:15,000 --> 01:11:25,000 "Am de gând să merg mai departe și scrie un 7 acolo." 1020 01:11:25,000 --> 01:11:28,000 Cum se știe ce locație este în memorie? 1021 01:11:28,000 --> 01:11:30,000 Ei bine, asta e tot făcut în timpul compilării. 1022 01:11:30,000 --> 01:11:34,000 Compilatorul are grija de alocare în cazul în care fiecare dintre cele variabile sunt de gând să meargă 1023 01:11:34,000 --> 01:11:40,000 și crearea unei hărți speciale sau, mai degrabă, conectarea puncte 1024 01:11:40,000 --> 01:11:43,000 între un simbol și unde se duce, o variabila numele 1025 01:11:43,000 --> 01:11:46,000 și în cazul în care se va trăi în memorie. 1026 01:11:46,000 --> 01:11:50,000 Dar se pare că putem accesa de fapt, în programele noastre, de asemenea. 1027 01:11:50,000 --> 01:11:55,000 Acest lucru devine important atunci când vom începe să vorbim despre unele dintre structurile de date, 1028 01:11:55,000 --> 01:11:58,000 care este un concept pe care am de gând să introducă mai târziu. 1029 01:11:58,000 --> 01:12:09,000 >> Dar pentru acum, ceea ce poate ști este că pot crea un pointer la această locație, x. 1030 01:12:09,000 --> 01:12:12,000 De exemplu, pot crea o variabila pointer. 1031 01:12:12,000 --> 01:12:16,000 Când ne-am crea o variabila pointer vom utiliza notația stele. 1032 01:12:16,000 --> 01:12:21,000 În acest caz, aceasta spune am de gând să creeze un pointer la un int. 1033 01:12:21,000 --> 01:12:24,000 E un tip la fel ca oricare alta. 1034 01:12:24,000 --> 01:12:27,000 Ne da o variabilă ca y, 1035 01:12:27,000 --> 01:12:32,000 și apoi ne-am stabilit-l egal cu adresa, la o adresă. 1036 01:12:32,000 --> 01:12:38,000 În acest caz, putem seta y pentru a indica spre x 1037 01:12:38,000 --> 01:12:43,000 prin luarea adresa lui x, care ne face cu acest ampersand, 1038 01:12:43,000 --> 01:12:55,000 și apoi ne-am stabilit la punctul y la ea. 1039 01:12:55,000 --> 01:12:59,000 Ceea ce în esență, nu este dacă ne uităm la RAM nostru 1040 01:12:59,000 --> 01:13:02,000 acest lucru creează o variabilă separată. 1041 01:13:02,000 --> 01:13:04,000 Se va numi Y, 1042 01:13:04,000 --> 01:13:06,000 și atunci când această linie de cod execută 1043 01:13:06,000 --> 01:13:13,000 este de fapt de gând să creeze un pointer mic, care ne trage de obicei, ca o săgeată, 1044 01:13:13,000 --> 01:13:15,000 și-l stabilește la punctul y la x. 1045 01:13:15,000 --> 01:13:17,000 Da. 1046 01:13:17,000 --> 01:13:19,000 [Student] Dacă x este deja un pointer, ar fi tocmai ați face 1047 01:13:19,000 --> 01:13:22,000 int * y = x în loc de a avea ampersand? 1048 01:13:22,000 --> 01:13:24,000 Da. 1049 01:13:24,000 --> 01:13:27,000 Dacă x este deja un pointer, atunci puteți seta 2 pointeri egale unul de altul, 1050 01:13:27,000 --> 01:13:30,000 caz în care y nu ar indica x, 1051 01:13:30,000 --> 01:13:34,000 dar ar indica orice x indică spre. 1052 01:13:34,000 --> 01:13:37,000 Din păcate, nu mai avem timp. 1053 01:13:37,000 --> 01:13:44,000 >> Ce am putea spune în acest moment, putem vorbi despre asta offline, 1054 01:13:44,000 --> 01:13:49,000 dar aș spune că începe să lucreze prin această problemă, # 14. 1055 01:13:49,000 --> 01:13:53,000 Puteți vedea acolo e deja un pic completat pentru tine aici. 1056 01:13:53,000 --> 01:13:57,000 Puteți vedea că atunci când ne pronunțăm 2 pointeri, int * x și y *, 1057 01:13:57,000 --> 01:14:01,000 și rețineți că arătând * de lângă variabila a fost ceva care a fost făcut anul trecut. 1058 01:14:01,000 --> 01:14:05,000 Se pare că acest lucru este similar cu ceea ce facem în acest an. 1059 01:14:05,000 --> 01:14:11,000 Nu contează în cazul în care se scrie * atunci când declară indicatorul. 1060 01:14:11,000 --> 01:14:17,000 Dar am scris * de lângă tipul de 1061 01:14:17,000 --> 01:14:24,000 pentru ca face foarte clar faptul că sunteți de declarare a unei variabile pointer. 1062 01:14:24,000 --> 01:14:27,000 Puteți vedea că declararea cele 2 indicii ne dă 2 cutii. 1063 01:14:27,000 --> 01:14:31,000 Aici când ne-am stabilit x egal cu malloc 1064 01:14:31,000 --> 01:14:34,000 ce se spune este anularea de memorie în heap. 1065 01:14:34,000 --> 01:14:41,000 Această casetă de mic chiar aici, în acest cerc, este situat pe heap. 1066 01:14:41,000 --> 01:14:43,000 X este îndreptare spre aceasta. 1067 01:14:43,000 --> 01:14:46,000 Rețineți că y nu este încă indică spre ceva. 1068 01:14:46,000 --> 01:14:50,000 Pentru a ajunge de memorie pentru a stoca-numărul 42 în x 1069 01:14:50,000 --> 01:14:55,000 ne-ar folosi notația ce? 1070 01:14:55,000 --> 01:14:59,000 [Student] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Exact, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Asta înseamnă că urmați săgeata și arunca 42 acolo. 1073 01:15:06,000 --> 01:15:09,000 Aici, unde ne-am stabilit y și x y ne-am îndreptat spre x. 1074 01:15:09,000 --> 01:15:13,000 Din nou, acest lucru este exact ceea ce a spus Kevin unde ne-am stabilit y egal cu x. 1075 01:15:13,000 --> 01:15:15,000 Y nu este indică spre x. 1076 01:15:15,000 --> 01:15:19,000 Mai degrabă, este pointing la ceea ce se indică spre x, de asemenea. 1077 01:15:19,000 --> 01:15:24,000 >> Și apoi în cele din urmă în această casetă ultima sunt 2 lucruri posibile pe care le-ar putea face. 1078 01:15:24,000 --> 01:15:28,000 Una dintre ele este, am putea spune * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Un alt lucru este, am putea spune-Alex, știi ce am putea face aici? 1080 01:15:33,000 --> 01:15:37,000 Ai putea spune * x = 13 sau- 1081 01:15:37,000 --> 01:15:41,000 [Student] Ai putea spune orice int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Dacă acest lucru a fost sesizat ca o variabila int am putea face asta. 1083 01:15:45,000 --> 01:15:49,000 Am putea spune, de asemenea, * y = 13, deoarece acestea sunt atât subliniind în același loc, 1084 01:15:49,000 --> 01:15:51,000 asa ca am putea utiliza fie variabilă pentru a ajunge acolo. 1085 01:15:51,000 --> 01:15:56,000 Da >> [Student]. Cum ar arata daca ne spunem x int este de 13? 1086 01:15:56,000 --> 01:16:00,000 Asta ar fi declararea o nouă variabilă numită x, ceea ce nu ar funcționa. 1087 01:16:00,000 --> 01:16:04,000 Am avea o coliziune pentru că declarate x pentru a fi un pointer aici. 1088 01:16:04,000 --> 01:16:10,000 [Student] Dacă am fi avut doar că declarația de la sine ceea ce ar arata ca din punct de vedere cerc? 1089 01:16:10,000 --> 01:16:14,000 Dacă am avea x = 13, atunci vom avea o cutie, și, mai degrabă decât având o săgeată 1090 01:16:14,000 --> 01:16:16,000 iese din cutie am trage-l ca doar o 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] În caseta. Bine. 1092 01:16:19,000 --> 01:16:24,000 >> Vă mulțumim pentru vizionarea și noroc pe Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]