[MUZICĂ] David J. MALAN: Bine. Aceasta este CS50 si aceasta este începutul săptămânii 2. Și veți aminti că peste ultimele două săptămâni, am fost introducerea de calculator știință și, la rândul său, de programare. Și am început povestea prin intermediul Zero, această limbă grafică de la MIT Media Lab. Și apoi cel mai recent, săptămâna trecută, ne-am introduce un higher-- un limbaj de nivel inferior cunoscut ca C, ceva care este pur textuală. Și, într-adevăr, ultima dată când am a explorat în acest context, o serie de concepte. Acest lucru, amintesc, a fost foarte Primul program de ne-am uitat la. Si acest program, pur și simplu, imprimă, "Bună ziua, lume." Dar, există atât de mult părând magie merge mai departe. Exista acest #include cu aceste paranteze unghiulare. Nu e int. Nu e (void). Există între paranteze, acolade, semi-colons, și multe altele. Și astfel, reamintim că am introdus Scratch astfel încât să putem, în mod ideal, vedea trecutul că sintaxa, lucrurile care nu este cu adevărat tot ceea ce intelectual interesant, dar devreme este, în mod absolut, un pic mai complicat să-și încheie mintea în jurul valorii. Și, într-adevăr, una dintre cele mai frecvente lucruri devreme într-o clasă de programare, în special pentru cei mai puțin confortabil, este de a obține frustrat de și împiedicați de anumite sintactic erori, să nu mai vorbim de erori logice. Și astfel, printre scopurile noastre astăzi, de fapt, va fie pentru a vă dota cu unele Tehnici de rezolvare a problemelor pentru modul în care pentru a rezolva mai bine problemele ei înșiși sub formă de depanare. Și veți aminti, de asemenea, că mediu pe care am introdus Ultima dată a fost numit CS50 IDE. Acest lucru este un software bazat pe web, care vă permite să programați în nor, ca să spunem așa, păstrând în același timp toate dvs. fișiere împreună, așa cum vom astăzi din nou. Și amintesc că noi Revisited aceste subiecte aici, printre ei funcții și bucle, și variabile și expresii booleene, și condiții. Și, de fapt, câteva mai mult ca noi tradus din lumea Scratch la lumea C. Dar, clădirea fundamentală blocuri, ca să spunem așa, au fost într-adevăr încă în aceeași săptămână trecută. De fapt, am de fapt doar a avut o diferite piese de puzzle, dacă vreți. În loc de asta violet salvați bloc, noi în loc a printf, care este această funcție în C, care vă permite să imprimați ceva și-l formatați pe ecran. Am introdus CS50 Bibliotecă, în cazul în care tu au acum la get_char ta de eliminare, și get_int, și get_string, și alte câteva funcții ca bine, prin care puteți obține de intrare de la tastatura proprie a utilizatorului. Si am luat, de asemenea, o privire la lucrurile cum ar fi these- bool, și char, și dublu, float, int, string long_long. Și, există chiar și alte tipuri de date în C. Cu alte cuvinte, atunci când declarați o variabilă pentru a stoca o anumită valoare, sau când implementați o funcție care returnează o anumită valoare, puteți specifica ce tipul de valoare care este. Este un șir de caractere, cum ar fi o secvență de caractere? Este un număr, cum ar fi un număr întreg? Este un punct plutitor valoare, sau ceva asemănător? Deci, în C, spre deosebire de zero, de fapt, ne-am a început să se precizeze ce fel de date ne intorceam sau folosind. Dar, desigur, am fugit, de asemenea, în anumite limite fundamentale de calcul. Și, în special, această limbă C, rechemare că am luat o privire preaplin întreg, realitatea că, dacă aveți doar un cantitate finită de memorie sau, în mod specific, un număr finit de biți, puteți conta doar atât de mare. Și așa ne-am uitat la acest exemplu aici prin care un contor într-un avion,, de fapt, în cazul în care rulează suficient de mult s-ar overflow si duce la un software un potențial de eroare fizică reală. De asemenea, ne-am uitat la plutitoare punctul imprecizie, realitatea că doar un număr finit de biți, fie că este vorba de 32 sau 64, puteți specifica doar atât de multe numere după un punct zecimal, după care încep să se imprecis. Deci, de exemplu, o treime din mondial aici, în lumea noastră umană, stim ca este doar un număr infinit de 3s după virgulă. Dar un computer nu poate în mod necesar reprezintă un număr infinit de numere dacă permiteți numai că unele cantitate finită de informație. Deci, nu numai că v-am dota cu o mai mare putere în termeni de modul în care s-ar putea exprima-te la o tastatură în termeni de programare, De asemenea, am limitat ceea ce puteți face de fapt. Și într-adevăr, erorile și greșelile pot provin din aceste tipuri de probleme. Și într-adevăr, printre subiectele de astăzi vor fi subiecte cum ar fi depanare și de fapt, în căutarea sub capota la modul în care au fost introduse lucruri săptămâna trecută sunt de fapt puse în aplicare astfel încât să o mai bună să înțeleagă atât capacitățile și limitările unui limbaj cum ar fi C. Și, de fapt, ne vom coaja înapoi straturile dintre cele mai simple structurii de date, ceva numit o matrice, care Se întâmplă la zero pentru a apela o "listă." E un pic diferite în acest context. Și apoi vom introduce, de asemenea, una dintre cele mai în primul rând problemelor noastre specifice domeniului în CS50, lumea criptografie, arta de codare sau în cifrare informații, astfel pe care le puteți trimite mesaje secrete și să decodifice mesaje secrete între două persoane, A și B. Așa că, înainte de tranziție la acea lume nouă, să încercăm să vă dota cu unele tehnici cu care puteți elimina sau reduce cel puțin unele din frustrările pe care le-ați întâlnit, probabil, peste numai săptămâna trecută. De fapt, înainte de tine sunt such-- unele dintre primele probleme în C. Și cote sunt, daca esti ca mine, prima dată încercați să tastați un program, chiar dacă te gândești logic programul este destul de simplu, s-ar putea lovi foarte bine un zid, și compilator nu este de gând să coopereze. Asigurați-vă sau zăngănit nu se întâmplă pentru a face de fapt licitarea. Și de ce s-ar putea să fie asta? Ei bine, hai să aruncăm o privire, probabil, un program simplu. Mă duc să merg mai departe și de a salva acest lucru în un fișier în mod deliberat numit buggy0.c, pentru că eu știu să viciate în avans. Dar eu s-ar putea să nu dau seama că, dacă acest lucru este primul sau al doilea sau al treilea program că eu sunt de fapt, mă fac. Așa că am de gând să merg mai departe și tip out, int main (void). Și apoi în interiorul bretele mele buclat, un foarte familiar ( "Bună ziua, world-- backslash, n ") - și o semi-colon. Am salvat fișierul. Acum am de gând să merg în jos la fereastra mea terminală și tipul de marca buggy0, pentru că, din nou, numele fișierului de astăzi este buggy0.c. Așa că am tip face buggy0, Enter. Si, oh, Doamne, amintesc de la ultima dată că nici un mesaj de eroare este un lucru bun. Astfel încât nici o ieșire este un lucru bun. Dar aici am clar unele număr de greșeli. Deci, prima linie de ieșire după tastarea face buggy0, rechemare, este de ieșire destul de verbose zăngănit lui. Sub capota, CS50 IDE este configurat de a utiliza un întreg buchet de opțiuni cu acest compilator astfel încât să nu aveți să se gândească la ele. Și asta e tot ce prima linie înseamnă că începe cu zăngănit. Dar, după aceea, problemele încep să-și facă apariția lor. Buggy0.c pe linia 3, caracter 5, există o mare eroare, roșu. Ce este asta? de declarare a funcției de bibliotecă implicit printf cu tipul int (char * const, ...) [-Werror]. Vreau să spun, foarte repede devine foarte arcane. Și, cu siguranță, la început vedere, nu ne-ar se așteaptă să înțelegeți integralitatea mesajului respectiv. Și astfel, una dintre lecțiile pentru ziua de azi se întâmplă să fie pentru a încerca să observe modele, sau alte lucruri similare, la erori s-ar putea avea întâlnite în trecut. Așa că hai numai lui tachineze în afară acele cuvinte care arata familiar. Mare eroare, roșu este în mod clar simbolic de ceva fiind greșit. implicit de declarare Funcția bibliotecă printf. Deci, chiar dacă eu nu înțeleg ce declarând implicit funcția de bibliotecă înseamnă, problema cu siguranță se referă la printf într-un fel. Iar sursa acestei probleme are de a face cu declararea acesteia. Declararea unei funcții este menționând-o pentru prima dată. Si am folosit terminologia săptămâna trecută de a declara prototipul unei funcții, a fie cu o singură linie, la partea de sus a ta fișier propriu sau într-un fișier antet așa-numitele. Și în ce dosar a făcut am spus săptămâna trecută că printf este citat, unquote, a declarat? În ce fișier este prototipul ei? Deci, dacă vă amintiți, primul lucru pe care am dactilografiate, aproape fiecare program de ultima time-- și din greșeală un moment în urmă a început tastând myself-- a fost acesta aici-- hash-- #include