[MUSIC JOC] ANDI Peng: Acest lucru este CS50, și Bine ati venit la doua saptamani de la punctul. Aceasta este, de fapt în timp ce săptămâna doi dintre class-- noastre de fapt, prima săptămână am avut secțiune. Spectacol de mâini, cât de multe dintre voi toți a venit la sectiunea Super săptămâna trecută? OK, e OK. Asta e ok. Câți dintre voi urmărit super-sectiunea de săptămâna trecută? BINE. Și voi a făcut bine pe probleme stabilit o? Deci, am de gând să-l ia pe care o avem o grămadă de copii într-adevăr inteligente în această clasă și lucrurile vor fi bine. BINE. Deci first-- În primul rând, vom merge la scurt doar du-te peste ordinea de zi de astăzi. Vom vorbi despre logistica de curs. O mulțime dintre voi, probabil, au întrebări cu privire la se pare ca lucrurile se execută în acest curs. O să-i răspundem. Vom scurt du-te peste bucle în cazul oricare dintre voi a ratat punctul de super. Vom vorbi despre cartografiere ASCII. Vom vorbi despre tablouri, funcții, argumente în linia de comandă. Și, în sfârșit, ceea ce voi, probabil, toate doresc cu adevărat să fie aici pentru a afla mai multe despre, este pset2 ta. Vom avea câteva trucuri frumos si sfaturi pentru cum să faci asta. BINE. De asemenea, în al doilea rând, ne-am o mulțime de bomboane aici. Oricine îi place bomboane, doar vin aici. Prinde unele. Am o grămadă. Avem o tona la birou. Nu vreau cu adevărat să mănânce bomboane toata ziua. Voi ar trebui să mănânce toate bomboane, pentru că l-am adus aici pentru voi. Mananca doar bomboane. Vor fi bomboane fiecare secțiune. Deci în primul rând, cine sunt eu? Numele meu este Andi Peng. Eu sunt șeful TA de CS50 aici la Yale. Și în plus față de că, voi, de asemenea, be-- dacă cineva ar like-- funcționare amice, umărul să plângi pe. În cazul în care cu o noapte înainte, datorită PSET dumneavoastră, aveți nici o idee ce se întâmplă, ma lovit în sus. Vom compătimi împreună, etc.. Știu doar că eu sunt aici ca resurse pentru tine, ca în prima linie în ajutându-vă voi da seama cum pentru a rezolva problemele din CS50 și dincolo. E-mail meu este andi.peng@yale.edu. Voi trimite, de asemenea, o persoană din e-mail cu numărul meu de telefon în ea astfel încât nu toată lumea de pe internet se poate vedea numărul meu de telefon. Simțiți-vă liber să mă suni în orice moment. Serios, telefonul meu este de obicei atașat la mâna mea. Eu nu pot răspunde în termen de câteva minute. Eu nu pot răspunde în termen de câteva ore. Dar vă pot garanta, în cazul în care vă e-mail-mă, dacă mă suni, textul mine, voi răspunde în termen de 24 de ore. Deseori, o să răspund în fața asta, pentru că am înțeles că toată lumea are unele probleme, si doriti raspunsurile trebuie să se răspundă foarte repede. Cu toate acestea, în cazul în care te sun mi 30 de minute înainte de că piesa care este joi datorează night-- fi ca, Andi, ajută-mă, N-am started---ar putea da vă că umăr pe care să plângă pe. Dar acesta poate fi timp să se gândească la cum să nu faci asta data viitoare. BINE. Oops. Cum pot să mă întorc? Nu mergem. Deci, în acest curs, avem o tona de sprijin pentru toată lumea. In plus fata de doar secțiuni aici, pe care le în fiecare săptămână ajunge să-și petreacă 90 minute minunate cu mine, avem, de asemenea ore de birou. Câți dintre voi au deja fost la ore de birou pentru ajutor? Grozav. Asta e foarte bine pentru a vedea, pentru că am au un personal de peste 45 de AT și AC antrenat pentru acest curs, care sunt aici pentru a ajuta voi cu psets tale. Lunea ei a avut loc în TEAL clasă în 17 Hill House aici la Yale. Marțea și joia, ei a avut loc în Comunelor. 08:00 - 11:00 destul de mult în fiecare zi. Intră, ies. Orice problemă, nu problem-- doar vin pe la, și apoi te vom ajuta cu asta. În al doilea rând, în plus față de orele de birou și secțiuni, avem, de asemenea pantaloni scurți. A văzut cineva vreodată o pereche de pantaloni scurți sau walkthroughs în videoclipuri pe site-ul? BINE. Astfel încât acestea sunt foarte, foarte util. Productia noastra minunat Harvard echipa acolo pe care scoala în nord, care le-au filmat și a produs aceste filme de revizuire incredibile. Vor lua pas cu pas prin cum de a merge despre rezolvarea unei probleme. Deseori, daca esti confuz despre un concept simplu, un concept singular, aruncăm o privire, pentru că, probabil, ne-am un scurt pe undeva pe site-ul nostru. Și este, de obicei, o mare resursa să caute atunci când ești primul a pierdut cu privire la modul să se ocupe de o problemă. În al treilea rând, avem, de asemenea study50 și reference50. Deci studia 50 cu privire la site-ul este doar un link. Este, cred, study.cs50.net sau asa ceva. Doar Google. Avem o mulțime de diapozitive preparate. Avem o mulțime de pantaloni scurți și lucruri walkthroughs-- toate compilate foarte frumos și elegant pentru toate voi pentru a naviga prin, a se vedea orice concepte ca esti confuz despre. Ar fi, probabil, acoperite acolo în study50. Reference50-- similare. Avem o mulțime de diferite note disponibile pentru dispoziția dumneavoastră. Și, în fine, avem ceea ce este numit CS50 Discutați, un forum în care, în cazul în care cu o noapte inainte faci problemele tale, spune, aveți o întrebare. Conectați-vă la CS50 Discuta. Postează-ți întrebarea. Și apoi una din hundreds-- probabil, thousands-- de colegii luând această clasă on-line va autentifica. Și poate cineva poate obține răspunsul dumneavoastră înainte de o cutie TA. Este, în esență, doar o forum online care putem toți utilizați pentru a discuta despre problemele noastre. Asta e tare. BINE. Deci, problema seturi. Suntem pe cale chiar în gros de problemă set doi. O mulțime de noi au deja luptat prin problemă stabilit o. Știm deja că, probabil, de așteptare pentru ultima noapte de a face PSET dvs. nu este cel mai inteligent lucru de făcut în CS50. Sfaturi și sfaturi, în esență, pentru Succesul se citi întreaga spec. Câți dintre voi au deja citeste spec pentru PSET 2? BINE. Asta-i o sumă solid. Știu că voi ați recunoscut, probabil, de acum specificatiile sunt foarte lung. Sunt foarte, foarte mult timp. E foarte greu de citit fiecare linie din cuvânt cu cuvânt cu atenție. Vrei să răsfoiesc doar acolo unde se spune să faci ceva. Eu vă pot garanta, nu face asta. Dacă faci asta, esti, probabil, O să dor de undeva în cazul în care vă spune cum să înceapă o problemă sau iti spune ce sa nume problema sau va spune, aceasta este, probabil, cel mai bun mod pentru a începe a face problema ta. Și apoi veți fi pierdut. Când încercați să citiți dumneavoastră spec jumătatea, o mulțime de importante information-- în care nu ești O să fie în măsură să într-adevăr acces. Deci citeste tot spec. Încercați să citiți întregul spec înainte de a veni la secțiune, pentru că atunci, când ne-am vorbesc despre PSET, putem avea toate o idee de ce se întâmplă. În al doilea rând, aceasta este o noțiune că voi dori să referință o mulțime de-a lungul semestrului curs. Dar, în esență, să ne întâlnim la jumătatea drumului, nu? Me, ca AT și Jason ca cursul manager și Scaz ca profesor dvs. și David ca profesor și toate alte tas minunat în acest curs, asistenți în acest course-- vom face tot posibilul pentru a vă asigura că sunt stabilite până pentru a reuși în acest curs. Vom organiza secțiune. Vom organiza ore de birou. Vom răspunde la telefon solicită, răspunde dvs. de e-mail-uri, facem tot ce putem pentru a face Sigur sunt răspuns la întrebările dumneavoastră. Cu toate acestea, ne ajuta sa prea. Faceți cunoștință cu noi la jumătatea drumului. Dacă ați ajuns la orelor de program nu au dus la secție, nu au văzut prelegeri, care nu au idee ce se întâmplă, fie ca, ajută-mă. Am de gând să fie ca, de bine, îmi pare rău. Acesta poate fi timp pentru a împrumuta care umăr să plângă pe, pentru că eu nu sunt sigur ce pot face pentru a te ajuta dacă nu încercați să cel puțin ajutor te un pic la început. Faceți cunoștință cu noi la jumătatea drumului. Știi, va rugam sa pregătite pentru a răspunde și de a lua gata să se angajeze în materialul. Se face lucruri atât de mult mai ușor pentru toți cei implicați. Da, asta e destul de mult. Clasificare. Deci, pe programa, e destul de în profunzime cu privire la modul în care clasa. Dar, în esență, defalcarea în acest sens este de 50% din nota vor fi psets, care este minunat, pentru că este în cazul în care sunteți de cheltuieli marea majoritate majoritatea timp desigur mai departe. Teste de 40%, și dumneavoastră Proiectul final va fi de 10%. Vor exista două concursuri în întreaga cursul semestrului. Cred că orele și datele sunt de asemenea, listate pe programa. Modul în care vom fi clasificare psets dvs. este că avem, în esență, patru Valorile pe care le atribuie la fiecare grad. Avem o valoare a domeniului de aplicare, corectitudine, design, si stil. Deci, după cum vedeți, e un fel de noastre formula de calcul psets. Trei noi da cel mai mult greutate la corectitudine, pentru că, evident, antrenorul ar trebui să fie de testare pentru cazurile că vrem pentru a testa. Voi toți trebuie check50 la dispoziția dumneavoastră. Este o functie foarte utila că voi putea tot încărcați codul pe serverele noastre, unde vom verifica pentru tine. Și le-ați văzut pe cei fețe tristă, smiley. Sunt foarte, foarte util. Vă rugăm să nu fie elev care încearcă place la hardcode în toate răspunsurile la ele. Am văzut cu siguranta un PSET unde cineva a văzut toate valorile check50 și au doar greu codificate in-- dacă acest număr, imprima acest număr. Dacă acest număr, imprima acest număr. Nu face asta. Chiar dacă tehnic check50 este corectă, calea ta de a rezolva problemă nu este corect. Deci, trebuie doar să utilizați check50 cumpătat. Dar, de asemenea asigurați-vă că înțeleagă cum se funcționare, programul funcționează în plus față de check50, pentru că nu putem testa fiecare posibil caz de check50. Vom testa unele dintre ele. Design-ul este, în esență, cum bine conceput este codul? Dacă sunteți copy-paste multiple linii de cod multe, multe ori. Poate că nu au destul cel mai bun design din codul. Poate e timpul să adaug că bucla. În esență, aici e doar tot despre încercarea de a face codul, încercarea de a scrie codul cât mai eficient posibil, astfel încât programul ruleaza cât mai repede posibil. În cele din urmă, ne-am stil. Deci stil este un fel de , termen subiectiv arbitrar. Știu că avem în mod oficial un ghid de stil de 50 de CS50, în cazul în care vă spune, oh tu, ar trebui să aibă un spațiu aici. Ar trebui să fel de format codul acest fel. Tu ar trebui să numească lucrurile în acest fel. Nu-mi pasă cu adevărat, în sine, cum alegeți să stilul codul, atâta timp cât stai consecvent. De exemplu, dacă doriți să lăsați un spațiu după patru tau înainte de patru bucla ta, nu doar că de fiecare dată. Nu un fel de a face acest lucru. Nu o fac alte vremuri. Dacă vă place să țineți cret spațiu bretele-un anumit fel, doar întotdeauna așa fac. Nu fel de a face acest lucru undeva aici și acolo undeva nu. Când suntem clasificare, e foarte dificil dacă nu am nici o idee cum te formatare codul, lucrurile sunt Wacky și din loc. Dacă vă păstrați doar consecvent, e mult mai ușor pentru mine, ca cea mai mare pentru a fi capabil să citească codul. Este mult mai ușor pentru tine, ca un student pentru a putea să se uite prin codul și să vedem ce e în neregulă cu se reduce de ce nu e probleme. Stilul este unul dintre cele mai simple lucruri voi puteți face pentru a obține scoruri complete. În esență, dacă doar pasă, dacă plătiți cinci minute de atentie pentru codul în fiecare săptămână, ar trebui să fie obtinerea de puncte de stil complete. În cele din urmă, avem ceea ce se numește multiplicatorul de domeniul de aplicare. Scope-- Știu că e un mare cuvânt, mai ales în această clasă. Dar domeniul de aplicare, tot ceea ce înseamnă este că sunteți încercarea de psets la cele mai bune de capacitatea dumneavoastră. Dacă activați în trei din de cele patru probleme și nici măcar nu încercați ultima, esti, probabil, va pierde anumite puncte de pe domeniul de aplicare. Chiar dacă începeți doar problema, face cele mai bune dvs. de a merge prin ea. Chiar dacă aceasta nu funcționează, porniți-l în, pentru că arată și demonstrează să ne că sunteți încercarea de, că ai încercat problema set la cele mai bune de capacitatea dumneavoastră. Și apoi ne puteți da Puncte Full pentru domeniul de aplicare. Domeniul de aplicare este, de asemenea, foarte important pentru noi, atunci când vorbesc despre cel mai mic scor meniurile PSET. Deci pe parcursul semestru, voi avea nouă psets. Și vom fi de fapt în scădere cel mai mic scor din cele nouă, dar numai dacă aveți puncte Domeniul de aplicare complete. Deci, dacă te întorci într-o PSET incomplet, Din păcate, nu putem scădea ca unul, deoarece domeniul de aplicare dvs. puncte nu au fost finalizate. Deci, chiar dacă aveți săptămânii îngrozitor în cazul în care ești pe moarte și ești bolnav sau cainele moare, pisica ta moare, si tu esti supraîncărcat cu teme, doar încerca PSET. Fa-o la cele mai bune de capacitatea dumneavoastră. În cazul în care nu funcționează, nu contează. Doar rândul său, în. Cel puțin putem da te puncte pentru efort. A pentru efort în această clasă. Cel puțin cel mai mic scor picătură de efort. Deci da. Asta e destul de mult. Are cineva întrebări atât de departe de modul în care clasa in clasa? Sau oricare dintre acestea? Oricare dintre aceste așa far-- secțiuni, ore de birou? Misto. BINE. Deci, acesta este un subiect care nu o într-adevăr îi place să vorbească despre. Nu-mi place cu adevărat să vorbesc despre asta. Voi nu doresc cu adevărat să mă audă vorbesc despre asta. Dar, din păcate, noi toți Trebuie să vorbesc despre asta. David a petrecut 20 de minute pe prelegeri vorbesc despre asta. Și care face obiectul de onestitate academică. Deci, noi toți de aici au scris, probabil, o cândva eseu în cariera noastră Yale. Am ajuns, probabil, o discuție în care ne-am sa spus să nu plagia eseu nostru, pentru că locul de muncă nu este al nostru. În informatică, avem același tip de concept. Toate lucrările pe care le prezintă, tot codul pe care le scrie ar trebui să fie de cod pe care le-ați scris. Nu ar trebui să fie de cod care le-ați copiate din altă parte. Nu ar trebui să fie un cod care ai googled și plopped în și nu știu cu adevărat dacă funcționează. Sunteți un fel de un sentiment de ceea ce face, dar nu chiar. Dacă aveți dubii, în esență, e doar fi rezonabil. Pe programa noastră, ne-am o întreagă listă de lucruri vom vedea ca rezonabil versus nu rezonabilă. De exemplu, rezonabil este tu și prietenul tău discuta ceea ce cel mai bun mod de a merge despre rezolvarea unei probleme logic. Asta e destul de rezonabil. Ceea ce nu ar fi rezonabil dacă este băieți s-au reunit, tastat același cod, și se întoarse în același cod. Asta nu e rezonabil. Același lucru, un fel de eseu. Dacă doriți, pentru a discuta cu prietenul tău, hei, aceasta este ceea ce vreau sa scriu despre. Acestea sunt pașii pe care vreau să lua pentru a scrie despre el, mare. Asta e minunat. Vă rugăm să colaboreze unii cu alții. Dacă voi începe scris același lucru, rândul său, în aceeași eseu, e mai puțin OK. Deci, atunci când în dubiu, pur și simplu nu o fac. Aici, noi, în CS50, avem scripturi care alerga pentru a automatiza de a testa nu numai corectitudinea codului, dar, de asemenea, unicitatea codului. Deci, vă rugăm să nu ne pune în poziția de a avea pentru a se referi la cazul dumneavoastră EXCOMM. Vă rugăm doar pentru toată lumea, hai să face acest lucru o experienta minunata. Toată lumea învață mai bine, Noi toți sunt fericiți, și suntem gata până la reuși în acest curs. Ceva care este foarte unic despre această clasă că eu cred că toată lumea ar trebui într-adevăr să acorde o atenție pentru a se că avem ceea ce se numește regretul Clauza în programa noastră. Deci, în esență, în termen de 72 de ore, în cazul în care crezi că ai făcut ceva nu esti foarte sigur a fost caz, vă rugăm să vin la noi. Vă promit că în termen de 72 de ore vom ocupa de caz ne fără a face referire la o mai mare autoritate în administrația. Deci, dacă ai venit la mine și să spună, Andi, hei, îmi pare foarte rău, dar cred că există câteva linii în mea cod aseară că am un fel de googled, coborât de stivă Preaplin, copiați și lipite, și eu sunt foarte, foarte rău despre asta, lasă-mă să știu. Vă rugăm să nu lăsați pur și simplu se agraveze și doar speranța că am prins. Vom prinde. Vino la mine. Lasă-mă să știu în termen de 72 de ore. Vom descoperi o soluție. Si va promitem ca nu vom referi la Autoritățile universitare în esență. Deci, este în interesul dumneavoastră să fie doar sincer cu toată lumea implicat în curs. BINE. BINE. Deci, acum, repede înainte Am muta pe, nimeni nu au întrebări cu privire la logistică cu privire la modul de cursuri vom pentru a rula, cum secțiuni merg pentru a rula, nimic din toate astea? BINE. Da. Audiența: [inaudibil]? ANDI Peng: Da. Deci quizzes-- Câți dintre voi sunteți în partea de luni / miercuri? Câți dintre voi sunt în marți / joi? OK, deci este o ruptură solid aici. Deci modul în care vom rula o la Yale este ca ne vor avea două separate, quizzes-- unul pentru fiecare section-- care vor fi luate în timpul clasa. Cred că e luna octombrie, la sfârșitul lunii octombrie, ceva de genul asta, de o saptamana din testul. Da, așa vin doar la clasa. Pe care luni sau miercuri, veți lua testul. Pe care marți sau joi, veți lua un test diferit. Dar același material va fi acoperit. Da. Buna intrebare. Da. Audiența: Unde ne du-te pentru a verifica clasele noastre? ANDI Peng: Da. Așa că va fi trimiterea de o e-mail, indiferent de fiecare săptămână când teste sunt graded-- sau, Ne pare rău, atunci când psets sunt clasificate. Psets sunt de obicei transformat de către prânz sau vineri. Așa că am promit că voi încerca să-i mă întorc la tine de prânz de vinerea următoare. Ori de câte ori am de grad o PSET, voi trimite o notificare cu privire la cartea de grad care vă spune scorul pot fi vizualizate on-line. Deci, chiar în această săptămână, după ce am duce clasificare psets săptămâna trecută, voi va primi un e-mail notificare vă spun, hei acest lucru este în cazul în care du-te pentru a vedea notele. Și puteți vedea în fiecare defalcare a notele. Puteți vedea comentariile. Oh, lucru rapid, de asemenea,. De comentariu Secțiunea în mare carte este în cazul în care probabil voi petrece cea mai mare parte a timpului meu de notare. Deci, un lucru care este foarte important, atunci când Sunteți de vizionare clasele dvs. pe psets tale nu este numai în căutarea La scorul fizic dar, de asemenea lua timp pentru a citește într-adevăr comentariile mele. De multe ori, care vă oferă un feedback pe cum te rezolvarea unei probleme. Dacă aveți nevoie pentru a face ceva un pic mai bine, critici constructive, de obicei, este cel mai bun dat în aceste comentarii secțiune. Deci, vă rugăm, vă rog, am de gând să-și petreacă timpul scriind comentarii. Vă rugăm, mi-ar aprecia cu adevărat dacă voi ar citi aceste comentarii. BINE. Misto. In regula. Deci, vom să începem să discutăm și doar revizuirea rapid o parte din materialul din săptămână zero, așa că suntem pe pagina bună pentru începând problemele din această săptămână. Deci bucla în timp ce este un dintre cele trei tipuri de bucle am discutat mai devreme în această clasă. O buclă în timp ce, în esență, este scris în sintaxa în cazul în care, în timp ce o anumită condiție, face acest lucru în mod repetat, nu? Gândiți-vă la ea în acest grafic aici. Vei să înceapă la o anumit punct în cod. Ai de gând să intre în stare de buclă if-- Nu stiu-- x este mai mică de un. Dacă acest lucru este adevărat, te duci pentru a executa corpul buclei. Și ai de gând să continuăm să facem care din nou, din nou, din nou, peste si over-- care este de ce este un loop-- până când starea dumneavoastră devine fals. Deci, în acest fel, o buclă în timp ce este una dintre modalitățile simple pentru a scrie orice fel de condiții care trebuie să se repete de peste si peste si peste. Doar fii atent de fiecare dată când scrii orice fel de buclă că aveți o condiție de ieșire ca precum și o actualizare a tot ce este este astfel încât bucla dvs. nu doar alerga peste si peste infinit. În orice caz, te duci să doriți să vă asigurați pe care îl schimbați unele aspecte ale codul sau la sfârșitul buclei doar pentru a vă asigura că aveți un fel de progrese față de starea pe care doriți să îndeplinească până la sfârșitul. Asta face sens pentru toată lumea? Noi pur și simplu nu vreau să fiu prinși în această spirală în care mergem în jurul valorii de și în jurul și nu exista nici o modalitate de a rupe bucla. Și fiecare buclă, în esență, are un mod de a face asta. BINE. În al doilea rând, mulți dintre voi în psets tale Mario probabil a trebuit să angajeze acest tip de buclă. Este numit un do în timp ce buclă. Mai întâi de toate, poate cineva să-mi spui ceea ce diferența dintre un do în timp ce buclă și o buclă în timp ce este? Da. AUDIENTA: a face în timp ce bucla ruleaza la prima [neauzit]. ANDI Peng: Da, exact. Deci, un do în timp ce buclă face întotdeauna tot ce este în interiorul do, în interiorul paranteze acolo și nu că starea înainte de a verifica pentru the-- rău, nu înainte de acest cod verificarea pentru starea. Și acest lucru este în special relevant pentru noi aici, în această clasă, pentru că cele mai multe ori vom dori să solicite utilizatorul pentru un fel de intrare. Și apoi, în funcție de intrarea ei ne dau, atunci putem evalua, oh, nu trebuie să le solicita din nou? Deci, în Mario, în cazul în care utilizatorul ți-a dat o înălțime negativ, de exemplu, ai de gând să primul prompte și face tot ce este în interiorul. Atunci ai de gând să verifice în timp ce. Știi, este negativ de 1, este faptul că un număr pozitiv? Dacă nu e, am de gând să merg înapoi și repetați facă și repeta și se repetă și se repetă până când În cele din urmă să vă dau un număr care vă place, pe care le putem folosi toate în codul nostru. Este destul de important pentru în esență, orice date introduse de utilizator. Eu vă pot garanta orice timp într-un PSET unde vă rugăm să introduceți orice fel de cod, suntem probabil voi da un caz test în care suntem O să-ți dau ceva de rău că e O să încerc să rupă codul. Dacă vom încerca să vă rog să o intrare întreg, vă putem oferi doar un șir și vezi cum te-ar descurca cu asta. Dacă vă cerem să angajeze o vârstă, vă poate da un număr negativ pentru a vedea cum v-ar descurca cu asta. Doar asigurați-vă că voi sunt de testare pentru cazurile în care nu obține cele mai bune de intrare, să zicem. Și o face în timp ce buclă este deseori cel mai bun mod de a proiecta codul dvs., astfel încât că îndeplinește că domeniul de aplicare. BINE. BINE. Deci aceasta este, probabil cel mai bucla complex din trei pe care le-am uitat la până în prezent. Și se pare foarte infricosator la inceput. Dar te-am garanta, o dată voi prinde de modul de utilizare a unui pentru buclă, este unul dintre lucrurile cele mai utile, cele mai multe instrumente utile în arsenalul dvs. pentru a progresa în această clasă. Deci, de exemplu, în Scratch, am avut acest bloc foarte simplu care tocmai a spus repeta acest anumită fraze anumit număr de ori. Apropo, SAJ-- asta e Scaz Andi Jason. Semnăm deseori e-mailurile noastre SAJ. Dacă spunem SAJ, nu fi confundate. Asta e doar noi. Deci, în Scratch, am fost capabili de a avea un bloc care a spus, repet iubesc SAJ! 10 ori. Foarte simplu. Logica din spatele, care este o foarte, foarte simplu, nu? Vreau să merg în primul rând prin primul timp și vezi că, a doua oară și vezi că, a treia oară, așa mai departe și așa mai departe, până când te-a lovit la 10. Și modul în care ar reprezenta că în Codul este doar printr-un simplu pentru buclă. Deci, pentru, ai de gând să declare variabila aici, în acest caz, cu un întreg. Vom numele acesta i. Vom inițializa la 0. Și ediția de oprire este Va fi i este mai mică de 10. Și actualizarea va fi i ++. Și în cadrul buclei, va pentru a executa până în cele din urmă spectaculos la sfârșitul condition-- în care caz, se va rupe bucla. Ar trebui să existe lucruri pe care le baieti au tot felul de văzut înainte și a trebuit să fac pentru problema ta setat unul. Are cineva întrebări în ceea ce privește pentru bucle chiar acum? BINE. Grozav. BINE. Deci, pentru cei dintre voi care au citeste spec PSET pentru această săptămână Știu că vom avea de a angaja ceva numit ASCII și masă ASCII. David în curs a trecut pe scurt cum computerele essentially-- tot este codificat într-un calculator în binar, în zerouri și cele. Și modul în care computerele sunt capabili pentru a stoca valori diferite, în plus la zero și sunt cele prin cartografierea aceste numere pentru a reprezenta alte cifre sau în esență alte caractere. Deci, în acest caz, un ASCII table-- tot ce face este de caractere hartă, sau caractere, către numerele. Astfel încât fișierul sursă în cod dvs. computer-- vede, hei, o grămadă de zerouri și cele, zerouri și cele, zerouri și cele. Asta e ceea ce stocate în Memoria reală a computerului. Dar când noi, oamenii doresc să comunica cu computerul, am o doresti spunem, de exemplu, dacă vreau majuscule A, Am de gând să nevoie de un fel de a spune calculatorului, oh, atunci când am tip majuscule A, vreau să spun această reprezentare în binar. Și astfel modul în care facem asta este aruncat un lucru arbitrar numit un tabel ASCII, în cazul în care noi, ca oameni, ca programatori, ceva timp în urmă, am decis arbitrar că au fost de gând să atribui aceste număr Valorile acestor caractere. Deci, voi poate Google acest on-line. Cred că e un link la acesta în ta pset-- doar un tabel hartă ASCII, ASCII masa. Doar traduce binar numere în caractere. Si va fi foarte util pentru set problemă ori de câte ori doriți să calcula ceva sau dacă doriți să se afișeze anumite caractere sau numere întregi sau de a manipula anumite caractere. O să fie foarte important să tot știu cum să mergeți un tabel ASCII. Astfel de exemplu, majuscule A este reprezentată de numărul 65. Și minuscule A este reprezentată de 97. Deci, este important de știut că diferență între cele două valori este 32. Deseori, în cazul în care aveți nevoie se convertesc la unul la celălalt, diferența este 32. Și nu vă faceți griji dacă sunteți un fel de confuz cu privire la acest la început. Vom trece peste cum ne-ar folosesc acest cod in real. BINE. Deci, pentru cei dintre voi cu laptop-uri din, nu ezitați să trageți în sus un tabel ASCII, pentru că, probabil, acestea vor necesită voi de referință care sunt personajele. BINE. Deci, știind că anumite caractere hartă pentru anumite numere, dacă aș fi de a rula doar primul linie de care code-- printf A, litere mici a, minus majuscule A. Are cineva au o bănuială asupra a ceea ce ar fi imprimarea a ecranului chiar acum? Deci, în primul rând, ceea ce face mici o reprezintă? Ce număr este că codificată în tabelul ASCII. Ne pare rău? Audiența: 97? ANDI Peng: 97, mare. Și ceea ce este majuscule A? Audiența: 65. ANDI Peng: Deci, ce este de 97 minus 65? Audiența: 32. ANDI Peng: OK. Deci, ce voi cred că este de gând să se întâmplă atunci când am de intrare care linie de cod în computerul meu? Audiența: [neauzit]. ANDI Peng: Îmi pare rău, vorbi. Fără griji. Acesta este un foarte sigur mediu, minus camera. Suntem toți o sa-- nu vă faceți griji. Doar suntem toți o să pretindem ca Suntem doar noi refrigerare în această cameră. Fără griji. Nicio întrebare este prea prost. Nici un răspuns este un răspuns stupid. Sunt, probabil, de gând să facă greșeli în cursul învățătura mea. Serios, băieți, doar divulga fără să vrea. Fii încrezător în tine, știi? Deci, ce a fost asta? Cine a spus că ultima răspuns? BINE. Striga că frumos și clar. Audiența: 32? ANDI Peng: 32. OK, hai să executați acest cod și vezi dacă asta se întâmplă. BINE. Deci, ca voi poate un fel de vezi, notația tipic Am înființat aici pentru modul în care ne-ar angaja orice fel de program de la calculatorul nostru. Avem funcție nostru principal în funcție de principalul nostru. Mă duc să copiați și inserați acest linie de cod. De asemenea, fiți atenți atunci când voi sunt copierea și lipirea codul. Uneori anumitor operatori Nu lipiți peste corect. În acest caz, minus semn a fost de fapt o liniuță. Și astfel computerul nu-l ridic. Așa că a trebuit să mă întorc și Reintroduceți fizic asta. Doar fii atent atunci când voi fac asta. BINE. Vom rula acest aici. Deci vom CD în section2 nostru. Am numit acest asciimath programului. Deci ține minte, când vom rula orice Programul, dorim în primul rând să-l compilați prin rularea-l prin make nostru. Și apoi ne-o dorim pentru a rula de fapt, programul de a face dot-slash. Așa că am de gând să ./asciimath. Dreapta, acolo mergem. Si vom vedea 32. Bine făcut. Meriți o bucată de bomboane. Bomboane pentru tine. Scuze. In regula. BINE. Deci, ne putem întoarce la exemplul nostru aici. Aah, nu. Aah. BINE. Mă duc să-l păstrați așa. BINE. BINE. Deci, ca voi poate vedea, putem face o mulțime de lucruri foarte interesante, o mulțime de lucruri foarte cool, o mulțime de lucruri foarte complicate care implică ASCII și numere. Odată ce ai ajuns jos la linia de cinci, care este o mulțime de urmat de-a lungul. Noi nu merge prin secțiunea. Simțiți-vă liber să, dacă puteți, Expunere de motive pe hârtie în primul rând pe ceea ce ar trebui să se întâmple atunci când ați introdus un astfel de șir de valori. De exemplu, în ultima linie, avem z-- care reprezintă o anumită number-- un-- care reprezintă, de asemenea, o anumite number-- plus 1 modulos 26 plus litere mici a. Dacă voi ține de lectură prin acestea, poate vedea un model veni în cum suntem manipularea codului. Am foarte, foarte sugerează după secțiunea toți băieți mergeți mai departe și de intrare cei toate în calculatorul dumneavoastră și a vedea ce fel de Numerele ies și raționamentul prin ce acestea sunt întâmplă, deoarece pentru psets dvs. va fi foarte important pentru tine de a înțelege de ce anumite lucruri se întâmplă. Toate aceste diapozitive va fi on-line. Deci nu vă faceți griji despre încercarea de a copia fizic notițe. Totul online. Această secțiune se va fi on-line. Toate codul sursă care Sunt rulează va fi online. Da. Ai încă o întrebare? Audiența: Ce este modulos? ANDI Peng: OK. Deci modulo este un operator care va fie destul de important pentru PSET baieti tăi Aici. Deci modul în care operatorii în C și în activitatea de programare este că veți avea ceea ce se numește simbol diviziune și simbolul modul, care este la fel ca semnul sută. Deci, în C, atunci când faci un număr întreg împărțită la un întreg cu o bară oblică, C are o tendinta de a vrea să taie off toate punctele zecimale, deoarece un număr întreg dorește pentru a converti la un întreg. Nu va vrea să fie un dublu cu un buchet de zecimale toate după el. Deci, dacă fac 3 împărțit la 2, aceasta va să taie 0,5 și doar vă dau o. Așa că e ceva să fie foarte atent de când ești a face orice fel de matematica in programare, este că numerele pe care le obține nu poate fi numerele care te gândeai, care este motivul pentru rotunjire în ta Ultima PSET este atât de important. Modulo vă oferă restul. Deci, de exemplu, dacă am făcut 3 modulo astfel 2-- 3 la sută semn 2-- v-ar da restul de care. Deci 3 împărțit la 2 este 1.5. E 1 restul de 1. Acesta vă va oferi 1, care este restul care. Deci, atunci când sunt în mișcare voi prin masa ASCII, modulo va sfârși prin a fi ceva care este foarte important, și vom discuta asta mai târziu. BINE. Deci ceva care este destul de, destul de nou și destul de unic că am discutat în această săptămână este conceptul de o matrice este. Deci matrice este primul tip de structură de date că vom întâlni în această clasă. Toate datele sunt este structura un fel de arbitrare, literalmente, cum ar fi structura lucruri că noi, ca programatori au creat, care le-am pus în codul nostru că poate conține alte piese de cod. Deci, în acest sens, un array-- cred că de ea ca un dulap, în cazul în care dacă deschideți diferite rafturi de cabinetul dumneavoastră de fișiere, puteți accesa lucruri diferite. În memoria, o serie se face doar același lucru pe computer. Puteți avea diferite ne blocks-- le numesc indices-- de o matrice. E la fel ca un bloc, un raft de memorie că am creat în ta computer care puteți introduce anumite lucruri în spații diferite. Deci, cu o serie, te trebuie întotdeauna să specify-- trebuie să specificați declararea unui matrice în formatul următor. Ai de gând să primul specifica tipul de date pe care doriți să creați de matrice. Dacă vreau o serie de numere întregi, Am de gând să pună Int chiar acolo. Dacă vreau o serie de siruri de caractere, Am de gând să pună siruri de caractere acolo, numele matrice, apoi ai de gând să aibă între paranteze drepte. Și în interiorul paranteze pătrate, ești va avea dimensiunea de matrice dumneavoastră. Ceva care este foarte important pentru păstra în minte atunci când crearea de rețele este că, odată ce ați crea un matrice, ca marimea nu se poate schimba. Deci, dacă știți că acum aveți o serie de dimensiuni 10, știi că am de gând să aibă 10 celule în cadrul sau în 10 indici în această matrice, și niciodată nu se va pentru a extinde sau diminua indiferent de ce, și că nu există In prezent, doar 10 blocuri de spațiu alocate în memorie care poate stoca până la 10 lucruri de orice le-ați pus. În acest fel, un tip de date matrice, structura de date, care este o matrice este foarte diferit de alții, vom se acoperă mai târziu în acest curs. Da. De exemplu, dacă ai vrut să a crea o serie de dimensiuni 3 care conținute variabile de integer-- oh, îmi pare rău, de temperature-- și temperatură, de Desigur, este un număr întreg. Deci ne-ar crea Int, care este tip de date de ceea ce vrem pentru a stoca. Vom numi aceasta temperaturi de dragul de nomenclatură de numire ceva ce înțelegem cu toții. Și vom avea între paranteze drepte. Și vrem trei numere. Deci vom pune trei interiorul ei. Ceva care într-adevăr important să se țină cont de este faptul că matrice sunt zero indexate. Tot ce înseamnă că începe cu indicele de la 0, și executați până prin Dimensiunea de matrice minus 1. Deci, de exemplu aici, au o serie de dimensiuni 3. O să fie în măsură să dețină trei valori. Dar numerele themselves-- care număr, matrice, care index, matrice, sunt de la 0 la 2. Deci băieți, să fie foarte, foarte atenți atunci când te duci prin problemele tale stabilite și crearea orice fel de matrice, pentru că o mulțime de ori este foarte, foarte ușor să uităm că. Eu de fapt nu au index de 3, pe care am în prezent, doar au indicele de 2. Și dacă încerci să accesa treilea indice, se va fi ceea ce este numit terminatorul nul. Nu va efectiv există în matrice. Și computerul este nu o să-i placă asta. Deci, fii atent de fiecare dată când te accesarea lucrurile pentru a se asigura că vă amintiți că matrice sunt zero-indexate. BINE. Deci, primul exemplu este doar o modalitate de a crea un tablou. Al doilea exemplu am de mai jos este doar un mod separat de a crea ceea ce este același date structură care tocmai am introdus. Deci, în loc de fizic de funcționare prin și punerea în temperatură de la 0 este egal cu ceea ce, temperatura 1 este egal cu orice, de temperatură 2 egali orice, aș putea de fapt doar totul a crea direct într-o singură linie în paranteze pătrate de temperatură egal. Și o notificare în acest caz, nu aveți nevoie de pentru a specifica cât de mare matrice este, deoarece computerul va du-te prin și a vedea că nu există trei elemente în aceste acolade. Și o să știe, OK, Am nevoie de o serie de dimensiuni 3. Nu vei avea nevoie de la intrare l modul următor. Și, de asemenea, da, în acest fel. Are cineva întrebări în ceea ce privește modul în care facem tablouri sau cum funcționează structura o serie? Da. Audiența: [inaudibil]? ANDI Peng: Da, exact. Deci, dacă ați fost de a declara și inițializa o serie următoarea metodă, care este al doilea modul, puteți lăsa doar cele. Și computerul știe în mod automat că trebuie să conta cât de multe elemente sunt în aceste acolade, separate prin virgula. Deci, aici văd 65, 87, 30. Astfel încât computerul stie, oh, există trei numere întregi. Știu pentru a crea un nume de tablou temperaturii cu trei elemente în ea. Buna intrebare. Da. Audiența: Nu este posibil să se creeze un tablou cu diferite tipuri de date care ar putea fi introduse în ea? De exemplu, cu numere întregi [Inaudibil]? ANDI Peng: În sensul din această clasă, nu, chiar acum. Când creați un date structura ca o matrice, spui calculator, hei, am nevoie de tine să aloce atât de mult memorie în hard-disk, cu fiecare celulă fiind un anumit număr de biți. Amintiți-vă am învățat în săptămâna zero, că datele diferite tipuri au diferite dimensiuni? Deci, de exemplu, un șir este o sumă diferită de spațiu decât un char, care este o sumă diferită de spațiu dintr-un număr întreg. Și așa, dacă nu se specifică și amestecă și se potrivesc ce tipuri de variabile aveți, computerul anii va fi foarte confuz. Și nu va sti cât de mult de memorie pentru a vă oferi. Deci, în scopul de dreapta acum, calculatoarele pot numai recunosc un singur tip de o matrice. Buna intrebare. BINE. , Desigur, o a doua întrebare am este, ei bine, acum că am creat o matrice și am pus toate aceste lucruri în matrice, cum suntem noi va fi capabil să-l acces? Deci structura tipică pe care am mereu accesa o serie este minunat nostru pentru bucla. Promit că voi vom fi văzând o mulțime de acest individ aici. În esență, oricând doriți pentru a introduce valorile într-o matrice sau vrei sa le acceseze, The cel mai bun mod de a face acest lucru este o pentru bucla, pentru că într-o buclă pentru, tine știu de câte ori sunteți gând să doriți să rulați prin matrice, pentru că aveți o ediție de oprire, nu? Și de fiecare dată când executați prin, puteți accesa un element diferit de matrice. Și, de asemenea, acesta este un motiv pentru care de obicei vom începe nostru pentru bucle la valoarea 0, pentru că atunci când accesați tablouri, puteți accesa indexul zero. Și așa paralelă foarte frumos. Voi putea fi vrut să scrie pentru int i egal cu 1. i este mai mică sau egală cu 3. Dar nu ar funcționa la fel de Ei bine, aici, pentru că numai au elemente de 0, 1, și 2. Și așa dacă ar fi să începeți Am la elementul 1, 2, 3 și, vei ajunge de funcționare din limitele matrice dvs., și lucruri rele se va întâmpla. Așa că sper ca voi vedea Segue de ce în clasele anterioare am fost de predare voi cum a rula și formata o buclă pentru modul în care am fost. Este pentru că, acum am a trecut în matrice, puteți vedea de ce împrumută 0 se foarte bine la accesarea. Deci modul în care face acest lucru este that-- eu sunt doar imprimarea aici de dragul de imprimare-l. Dar am substituent meu, virgulă. Și accesarea efectivă parte se întâmplă. Numele de matrice a fost numit de temperatură. Deci, este temperatura și i-lea element al tabloului. Deci, ca pentru bucla Runs Through, se va începe de la 0. Se va imprima Indicele 0th de această matrice. Apoi, va imprima în primul element. Apoi, va imprima în al doilea. Și apoi vom rupe. Este toată lumea clar pe cum ce se întâmplă? Grozav. In regula. Deci, aici avem un mod de zicând: dacă nu am dori pe hard-cod-mi in-- ca programator. Nu am vrut să de fapt, fizic pune în fiecare element individual din această matrice. Dacă am vrut să schimb au valorile introduse de utilizator, ceea ce este cel mai bun mod de a face asta? Ei bine, aici am creat Această funcție minunat, în care pot declara o matrice. Deci, Int scores-- să spune doar vrem să facem o matrice care a avut loc notele tuturor 18 dintre elevii de aici în această secțiune. Cred că avem un pic mai mult de 18 de copii de azi. Dar de dragul lui exemplu, hai să presupunem am avut 18. Mi-ar crea un înscris nume matrice cu tip int, din cauza scorurile, desigur, sunt numere. Și am de gând să aibă 18 între paranteze drepte, pentru că câți studenți I doresc să fie capabil de a stoca zeci de. Și modul în care mi-ar popula matrice este că mi-ar rulați-l printr-o buclă de, de Desigur, cu 0 fiind indicele meu 0th. Și apoi cu 18 fiind mea oprire ediție, pentru că există 18 elemente în matrice. Și apoi am de gând să fac printf, Enter înscrie pentru student-- bla bla bla. Poate cineva sa-mi spui de ce sunt aici imprimarea I plus 1 și nu eu? E un fel de un truc întrebare, nu chiar. Ea nu, de fapt fizic afectează funcționarea a codului. Da. Audiența: [inaudibil] 0? ANDI Peng: Da, exact. E un pic ciudat să spun, hei, esti student 0th în această clasă. E un pic cam ciudat. Deci noi, ca oameni, nu place foarte mult să se gândească la modul în care computerele cred. Deci, chiar dacă în calculator, e valori stocarea în 0-lea index, atunci când suntem oameni, noi nu prea dori să mă refer la noi înșine ca zero. Așa că atunci când am de imprimare, Am de gând pentru a imprima și se adaugă 1 doar pentru motive de claritate. Așa că atunci când am imprima, am de gând să fie posibilitatea de a imprima studenți 1 prin 18. Ea nu are impact asupra efectiv funcționare a codului în nici un fel, așa cum a imprima. Dar fii atent atunci când sunteți accesarea fapt matrice. Când vedeți scorurile I, Observații Aici Sunt de fapt accesarea indicele 0th și nu 1 plus 0-- sau 1 plus 1, În acest caz, indicele așa că este de fapt clar. Este toată lumea fel de OK pe cum se execută prin și cu fiecare index sunt punerea în valoare a matrice și crearea unui tablou cu 18 numere că utilizatorul va intrare? BINE. Misto. BINE. Trecem acum în ceva care este destul de relevante pentru această piesă stabilit, de asemenea. Știu în curs, David-- Ne pare rău, ai avut o întrebare? Audiența: Poți mări? ANDI Peng: Da, așa că am încercat. Dar eu nu știu. Din anumite motive, acest versiune de PowerPoint este într-adevăr nu funcționează bine cu display. Deci, noi suntem doar de gând să-l păstrați așa. Toate acestea vor fi încărcate online,. Îmi pare rău, băieți. Da. BINE. Astfel încât să putem avea, de asemenea siruri de caractere. Deci, dacă voi de fapt notice-- I știu Rob a trecut peste acest lucru în care prelegere că el did-- un șir este de fapt doar o serie de caractere, dacă stai să te gândești, nu? Un șir este un nume sau un propoziție sau un cuvânt, nu? Daca as fi fost de a crea un șir de nume Andi-- doar numele meu, A-N-D-I. Crezi că de cum doar o variabilă. Dar, de fapt, este defalcate în doar o serie de caractere. Așa că are un caracter de o stocate într-o valoare matrice. Are un caracter de n stocate în al doilea index și așa mai departe și așa mai departe. Deci, într-un mod, am de fapt, acest tip structurii stabilit în loc pentru siruri de caractere noastre. Deci, aici, dacă aș fi pentru a introduce Cuvântul "mananca" - așa string cuvânt este egal obține șir. Daca as fi fost pentru a introduce cuvântul "mananca", care este fizic modul în care computerul meu este stocarea că șir în memoria mea. Și dacă am vrut să curgă prin care și de imprimare care out-- atât pentru în I este egal cu zero,, amintiți-vă, în curs, ne-am ceva acoperit care se numește strlen, sau lungimea șirului. Pentru că nu de fapt știu cât de mare matrice este indiferent inputting-- utilizatorului De exemplu, am introdus cuvântul "mananca", și știu asta e trei caractere, nu? Așa că am putea pune într-o perioadă de trei acolo și totul va fi bine. Dar dacă ceva de intrare de utilizator asta e un număr diferit de valori, vei nu fie în măsură să într-adevăr Știu că atunci când programați codul. Deci felul în care ne ocupăm de cazuri de testare de genul asta este că avem ceva numit strlen, care este doar o funcție care vă spune cât de mult un șir este. Deci, strlen de cuvânt. Cuvântul meu este mânca. n este egal cu strlen de cuvânt. Poate cineva să-mi spui despre ce Valoarea de fapt este chiar acolo? Ce n reprezentând dreapta acum, în acest exemplu, dacă am avut mânca? Audiența: 3. ANDI Peng: 3, exact. Deci avem de int i egal la zero, n = 3, în esență. Și i este de gând să ruleze până când mai puțin de 3i ++. Și o să meargă, în esență, prin și de a face același lucru. O să imprima fiecare valoare și vă va oferi E-A-T. E doar o denotă alt mod de a scris-o. Asta va fi de foarte mare ajutor. Da. Audiența: Care este beneficiile punere n este egal cu cuvântul strlen în interiorul că pentru bucla [Inaudibil]? ANDI Peng: Da. Deci, dacă aș fi sa-- spun, de exemplu, dacă ar fi să fac asta și apoi do-- oop-- că, în codul meu, s-ar fi de fapt face ca același lucru. Cu toate acestea, modul în care a explicat David IT în timpul prelegere, dacă oricare dintre voi amintiți-vă, a fost că, în calitate de om, ca programatori, suntem cu adevărat încerca la programul nostru cod astfel încât calculatorul nostru are pentru a lucra ca minim posibil, astfel încât că codul nostru este foarte eficient. Deci, dacă am avut că există, ceea ce s-ar întâmpla prin bucla mea pentru este că aș declara mai întâi o variabilă numit I va fi 0. Am de gând să verifice, oh, ceea ce este strlen de cuvânt? Oh, strlen este 3. Deci este i mai mică de trei? Da, este. Mă duc pentru a rula. Și apoi a doua oară în jurul valorii de spate bucla, am de gând să i incrementa. Am va fi una. Și am de gând să verifice este, oh, dar ceea ce este strlen de cuvânt? Oh, e trei. Și face asta par un fel de risipă, de fiecare dată când trec prin bucla, să fie verificarea funcției, chiar dacă strlen de cuvânt Nu, de fapt se schimbă? Deci, este un plus de putere pentru un computer. Când începem să vorbim despre lucruri că sunt miliarde și miliarde și miliarde de locuri lung, imaginați-vă computerul având pentru a merge fizic prin și verifica toate că de fiecare dată. De aceea, pentru a face doar pentru motive de eficiență, avem tendința de a face doar asta, pentru că în acest fel suntem numai apelul funcției o dată la început, și că de fiecare dată când trece prin ea se va pentru a stoca valoarea de 3 acolo, că nu trebuie să verifice în permanență de fiecare dată. Da. Audiența: Îmi pare rău. Doar [neauzit]. Ai putea să te int n este egal cu strlen și a pus că de mai sus în afara de bucla deasemenea? ANDI Peng: Da. Ai putea face asta, absolut. Motivul pentru care avea aici este pentru că modul în care A pentru lucrări buclă este că se numește un variabile locale în sensul că tot ceea ce crearea în interiorul pentru bucla există doar în interiorul pentru bucla. Deci, numai variabila i există în aceste paranteze. Și aici, variabilele n, de asemenea, există numai în acele paranteze. Deci, dacă ar fi să utilizați strlen de cuvânt de mai multe ori jos, absolut cel mai bun mod de a face acest lucru ar fi să-l declare la partea de sus astfel încât să nu trebuie să o faci o dată. Da. Audiența: De ce ai o linie nouă după procentul văzând dacă doriți pentru a pune toate literele lângă ea separate? ANDI Peng: Oh, am vrut să le pe toate imprima pe fiecare linie. Nu contează. Da, e un formatare. Asta-i o întrebare bună, totuși. Da, dacă aș fi vrut să imprimați totul doar pe o singură linie, Nu aș avea bord în. BINE. Toată lumea bună? BINE. Misto. Deci, eu cred că am vorbit destul. Rândul său, voi pentru a rula prin intermediul Codul și spune-mi ce nu e bine. Unde e bug-ul? Deci, după cum puteți vedea, am declarat o nou tablou de tipul String nume de clasă. Și am introdus Sam, Jess, și Kim în ea. Și eu încercarea de a imprima toate elementele matricei. Poate cineva să-mi spui de ce acest este de gând să-mi dea probleme? Îți dau 10 baieti secunde să se gândească la acest lucru. BINE. Da? Audiența: Este centru stânga egală cu 3 sau [Inaudibil]? ANDI Peng: dreapta. Deci, cum de multe ori este aceasta de fapt de gând să ruleze prin această buclă? Audiența: Patru. ANDI Peng: Exact. Se va prin intermediul a patru ori. O să ruleze prin la 0, 1, 2, și 3, pentru că elementul lor este i este mai mică sau egală cu 3. Nu se va opri atunci când este 2. O să păstreze merge până când se lovește 3. Și, după cum știm, nu există decât trei elemente în oferta noastră actuale. Dacă vom încerca să acceseze a patra Element sau indicele de 3, ai de gând să lovi undeva în memorie care nu există. Se numește terminatorul nul. Nimic nu va fi acolo. Calculatorul dumneavoastră nu se va a fi foarte fericit cu tine. Da. Are cineva întrebări pe de ce se întâmplă? Asta-i o zonă comună, pentru a evita. Da. Audiența: nu Are primul glisați, de asemenea, au un șir de 2? ANDI Peng: Nu. Deci, în esență, atunci când faci o matrice, acest drept suport acolo, că number-- toate e spune tu cum multe elemente Am. Nu e de fapt spune mi indicii nimic. Deci, în acest caz, știu că vreau a scrie cu trei locuri, cu trei locuri fizice țineți tot ce vreau să dețină. Deci, de aceea numărul trei este acolo. Cu toate acestea, în cazul în care mi-am dorit a le accesa de fapt, dacă aș vrea să spun, printf Numărul suport de clasă, apoi ai de gând pentru a pune de fapt, indicele fizic acolo. Da, bine întrebarea. Audiența: Deci este fizic index ar trebui să fie [auzite]? ANDI Peng: Îmi pare rău. Poți vorbi un pic? Audiența: Deci este indicele fizic [Abia auzit] fiecare dintre casetele? [Inaudibil]? ANDI Peng: Da. Deci, am de gând să mă întorc la dreapta aici. Gândiți-vă de aici. Avem o serie de dimensiuni 3. Există trei locuri, cum ar fi, substituenți fizice aici. Dar ei numit 0, 1, 2 și. Deci, dacă am vrut să le accesa, modul în care le-am acces este printf de orice am vrut aici. Tu ar trebui să imprimați din numele de ea, deoarece atunci calculatorul stie, oh, am nevoie să se uite în această matrice pentru indicele 0th. Da. Dar dimensiunea de ea nu se schimbă. Dimensiunea este de 3, indiferent de modul în care le etichetați. BINE. Toată lumea bună? Audiența: Deci, de fiecare dată când am [Inaudibil]? ANDI Peng: OK. Deci, în acest caz, noi nu prea intra in ea chiar acum în curs. Dar să știi că o string-- ca am a declarat înainte, un șir este, în esență o serie de caractere. Deci, dacă am crea un array de siruri de caractere, am un fel de au o serie de matrice de caractere, nu? Deci, în acest caz, pentru că am au o serie de siruri de caractere, dacă ar fi să introduceți un cuvânt foarte lung, care încă ocupă un singur spațiu, pentru că asta e un șir. Dar dacă ar fi să se gândească la caracterele de care matrice, atunci asta e inițierea mult mai mult caractere decât oricare dintre celelalte cuvinte sunt. Nu este foarte important pentru acum. Dar asta e doar în general, cum se lucrează. BINE. Deci acest lucru este ceva voi lăsa să faci mult pe parcursul semestrului. Am nevoie de odihnă vocea mea. Aveți nevoie să vă stimula. O mulțime dintre voi, probabil, trebuie să dorm acum. Am introducerea probleme aleatoare în cazul în care noi, ca o clasă sau cu un partener de lângă aveți de gând să-și petreacă câteva minute discutând de modul în care s-ar merge cu privire la rezolvarea sau crearea unui program, cum ar fi aceasta. Deci, chiar acum, vrem pentru a crea un program-- vom numi upper.c-- care convertește un cuvânt minuscule la un clasa superioară majuscule string--, îmi pare rău. Cuvânt în siruri de caractere, îmi pare rău, este sinonim. Am de gând să le schimbe să însemne același lucru. Da. Ia-o câteva minute. Aceasta nu trebuie să fie scris în orice limbă. Doar în cod pseudocod sau logic cum ne-ar mai du-te despre a face o astfel de problemă. Da. [SIDE CONVERSAȚII] Am observat, de asemenea, că voi can-- Am facut un fel de a vedea deja programul. Cred că lipsa mea de Modul prezentator este o problemă. Dar este ok. [SIDE CONVERSAȚII] Da, te rog, băieți. Vino primi bomboane. Vino primi bomboane. Audiența: Da! [SIDE CONVERSAȚII] ANDI Peng: De asemenea, da, Voi începe arunca bomboane la oameni care nu răspunde la întrebări. Deci ar trebui să la toate întrebările răspuns. Sau Presupun oameni care Nu răspunde la întrebări. Da, invers. [SIDE CONVERSAȚII] Audiența: [inaudibil] ANDI Peng: Da. Da. [SIDE CONVERSAȚII] Bine, băieți. Ia, cum ar fi, mai mult de 10 secunde. [SIDE CONVERSAȚII] OK, băieți. Deci, înainte de a începe încercarea de a de fapt, scrie fizic cod, un obicei bun pentru a dezvolta este că vrem să primul fel de motiv out logic cum ar face-o. Doriți să vă asigurați, înainte de a fizic începe încercarea de a codifica în Mario, pe care le face vă că aveți pseudocod ta. Care este de a lua tu prin ceea ce ai nevoie pentru a crea astfel că, atunci când fizic scrie programul mai târziu, sunteți mai în măsură de a prinde erori în codul dvs. și lucruri de genul asta. Deci vom începe doar by-- în limba engleză, în pseudocod, nimeni nu vrea să dea mi o explicație generic de modul în care ne-ar merge despre a face acest lucru? Da. Audiența: [neauzit]. ANDI Peng: Sigur, nu vă faceți griji. Audiența: Poți să-l rog să ceară sau cineva pentru a obține șir 1-- Da, șir, si atunci-- ANDI Peng: Da, astfel încât acesta este un început bun. Voi începe să tastați, îmi pare rău, așa cum vorbiți. Asa ca-- Audiența: --Discutii litere mici Numerele sunt mai mari, nu? Sau litere mici au un număr mare? ANDI Peng: Exact. Audiența: Atunci ne scade 32 din orice [neauzit]. ANDI Peng: Great. Deci, avem un fel de un sentiment general de de modul de a lucra cu privire la această problemă. Știind că am un fel de învățat modul în care siruri de caractere fizice sunt stocate în memorie, ce părere aveți deja Știu că ai de gând să probabil trebuie să scrie în codul în scopul de a vă deplasa prin șirul? Audiența: Pentru buclă. ANDI Peng: A pentru buclă, exact. Grozav. Deci, avem un fel de un generic pseudocod scrise acest tip de este da vă note de modul în care s-ar muta despre rezolvarea problemei. Acum, că aveți asta, se poate de referință pentru mai târziu pe când sunteți încercarea de a de fapt, scrie codul. Deci, putem merge de fapt aici. Și am o funcție numită upper.c-- acolo este-- de doar o șablon gol acum că voi o să ajută-mă dau seama despre cum să scrie această linie nu code-- linie de cod. Va fi mai multe linii de cod. Când începe orice fel de PSET gol, ceea ce este primul lucru pe care am nevoie să-și amintească de a face? Audiența: [neauzit]. ANDI Peng: Great Da. Include. stdio.h. Deseori aceasta este unul dintre cel mai ușor greseli oameni va face atunci când acestea sunt scris, este că vor uitați să includeți o bibliotecă importantă de care au nevoie. Deci, dacă e de ore de birou și ești ca, Nu știu de ce codul meu nu funcționează. Poți să-mi spui de ce nu este de lucru? Vom spune ai #include? Ar trebui să-l #include. BINE. Deci avem standardul I / O aici. Este că singura biblioteca vom avea nevoie de aici? Ce altceva vom face? Scuze. Cineva doar striga afară? Audiența: [neauzit]. ANDI Peng: Nu te duci. BINE. Și cum pot să merg despre incepand orice fel funcției, orice fel de funcție principală în cadrul programului nostru? Int main. BINE. Ce am pus în interiorul aici? Care e primul lucru pe care doriți să faceți? Dacă vrem să obțineți un șir de la utilizator, ce vom avea pentru a face pe aceasta primă linie? Ne pare rău, voi doar se simt libertatea de a vorbi și cu voce tare. Doar striga orice. Audiența: Adresați-vă utilizatorului? ANDI Peng: Cum facem asta? Ask-- sunt eu de gând să tastați "solicite utilizatorului"? Audiența: printf. ANDI Peng: OK. Printf. Ce vreau să printf? Audiența: Introduceti ceva. ANDI Peng: așa? Băieți, pretind ca sunt un calculator. Fizic spune-mi fiecare pas că am nevoie să tastați aici? Fac ceva în neregulă? Ar trebui să am scris ceva? Audiența: Ai nevoie de citate. ANDI Peng: Am nevoie de citate? BINE. BINE. Audiența: Și apoi nouă linie. Punct și virgulă. ANDI Peng: punct și virgulă? BINE. Bine. Audiența: Și poate specifica pe care o vrei in litere mici? ANDI Peng: Great. Voi râde de mine uitând pentru a pune punct și virgulă. Îți garantez undeva în cursul acestei clase, va uitați să puneți punct și virgulă, și vă va duce trei ore să dau de ce codul dvs. nu este de lucru. Sa întâmplat pentru noi toți. Se va întâmpla, probabil, la tine. Obține un bun obicei de a folosi punct și virgulă. BINE. Audiența: Vrei pentru a face backslash in? ANDI Peng: Sigur. Nu vrei sa faci backslash in? Audiența: Da. ANDI Peng: Great. BINE. Ce trebuie să fac în continuare? Audiența: Ia șir. ANDI Peng: Get string. Deci, ce pot să tastați? Cineva? Audiența: String s. ANDI Peng: String s. Audiența: getString. ANDI Peng: Cineva, poti sa-mi spui unde Această funcție getString vine de la? Audiența: string.h. ANDI Peng: string.h? Crezi că e de la string.h? Audiența: [neauzit]. ANDI Peng: Nu te duci. E de la CS50.h. Dacă sunteți mereu confuz pe care un fișier bibliotecă este sau un fișier antet este, Google literalmente string.h, și să-ți spun care sunt toate funcțiile care sunt în string.h. BINE. Deci, acum că am creat un șir Și am cere utilizatorului pentru ea, Am stocate într-o variabilă numite s, ce trebuie să fac acum? Audiența: Verificați dacă este cu litere mici. ANDI Peng: Îmi pare rău? Audiența: Verificați dacă este cu litere mici. ANDI Peng: Bine, hai să facem asta. Cum să fac asta? De fapt, în sensul din clasa acum, noi suntem doar de gând să presupune că tot ceea ce că de intrare ne este deja în litere mici. Dacă ați fi dorit să verifice, v-ar trebuie doar să adăugați o declarație condițională că verificat, care a fugit prin fiecare element matrice singur și verificat dacă este între anumite valori. Am uitat ce numărul valorilor de litere mici sunt. Puteți să-l căuta pe masă ASCII. Dar da, asta e un punct foarte bun. Dar acum, noi suntem doar de gând să presupune că toate siruri de caractere de intrare ne sunt în litere mici. BINE. Deci, cum să mă duc despre această problemă următor? Audiența: Pentru buclă. ANDI Peng: Pentru bucla? BINE. Spune-mi ce să tastați. Audiența: Pentru int i este egal cu 0. ANDI Peng: OK. Audiența: Oh, de fapt, atunci face o virgulă și de a face n = strlen. ANDI Peng: lucru atât de important care cred ca ea a observat aici este că noi nu trebuie să spun Int n a doua oară am făcut asta. Știu doar că într-un timp buclă atunci când sunteți declararea, de fapt nu au nevoie de int de a doua oară când faci o variabilă. Puteți spune n strlen. Audiența: S. ANDI Peng: s. BINE. Audiența: Atunci punct și virgulă. ANDI Peng: Sigur. Audiența: Și apoi [neauzit] n. Apoi m-am ++. ANDI Peng: Great. In regula. Ce ne dorim în interiorul de acest lucru pentru bucla acum? Amintiți-vă, dacă vom rula prin intermediul un șir și a alerga printr-o serie, vrem să verificați lucruri în ea. Ce vom nevoie? Aceasta este un fel de o parte complicat acum. Oricine are o presupunere? BINE. Deci în primul rând, cum putem chiar accesa? Cum ne-am chiar primul cec sau accesa un element în matrice? Cum facem asta? Care este notația le folosim pentru a face asta? Care este numele acestei matrice numit? Se numește s, corect? Amintiți-vă, orice sir este întotdeauna o matrice. Deci, s suport i, nu? Pentru că este valoarea curentă sau valoarea indicelui suntem de verificare. Și vom stabili că egalitatea sa-- dorim o valoare litere mici, nu? Vrem să rândul său, că lower-- Ne pare rău, ne dorim o majuscule. Vrem să transforme minuscule Valoarea într-o majuscule. Și așa like-- îmi pare rău, Cum te numești? Audiența: Heidi. ANDI Peng: Îmi pare rău? Audiența: Heidi. ANDI Peng: Heidi. Ca Heidi a spus inițial, suntem probabil avea nevoie de the-- suntem probabil va trebui, pentru a scădea 32 din orice charc care este, nu? Deoarece pe o ASCII tabel, diferența între o literă mică și o majusculă este de 32. Așa că atunci când facem asta, noi suntem, probabil, de gând să doriți pentru a scădea 32, nu? Așa că am de gând să faci s i. Are toată lumea înțelege de ce am făcut asta? Pentru că acum, în oferta noastră, suntem verificarea indicele 0th, nu? Și în indicele 0th a șir, asta e primul caracter. Iar caracterul vom să-și asume că e minuscule. Dacă vrem să facă majuscule, ne Trebuie să scădea 32 de valoarea sa, pentru că în ASCII nostru de masă, așa ne-am înțeles la următoarea corespunzătoare valoare care face majuscule. Nu toată lumea înțelege asta? Da. Audiența: Ați putea, de asemenea, nu litere mici un minus-- ANDI Peng: Da, așa că e de fapt foarte bine. Am de gând să se întoarcă la care întrebare după ce am face acest lucru. Da. Și apoi, dacă vreau să vezi ce se întâmplă, Sunt, probabil, de gând să doriți să imprimați, nu? Cineva spune-mi ce Vreau să imprimați aici. Audiența: printf la sută c backslash [neauzit]. Asta e valoarea [neauzit] s i. ANDI Peng: s i, îmi pare rău? Audiența: [neauzit]. ANDI Peng: Nu știu. Ce crezi? Audiența: Ei bine, am wouldn't-- Cred că nu ar bring-- Mi-ar scoate interior, pentru că [neauzit]. ANDI Peng: Oh, ai fi făcut asta? Audiența: Da. ANDI Peng: Să lăsați modul este, și voi explica de ce mai târziu. Amintiți-vă, chiar și atunci când au un loc de titular, vrei să paranteze în jurul ei. In regula. Deci, acest lucru ar trebui să fie o funcție de solid aici. Să-l rulați și a vedea dacă acesta compilează. Face sus. Uh-oh. Asta nu arata prea bine. De ce se întâmplă acest lucru? Ca în cazul oricărui eroare, vrei să mergi înapoi și să înceapă cu primul, pentru că de obicei cauze o eroare o mulțime de alte erori după el. Aici vedem upper.c: 18: 25, care spune mă în acest program numit upper.c, pe linia 18, eroare implicit declarând Biblioteca de funcții strlen cu tipul bla unassigned--, nu știu ce se întâmplă după aceea. Tot ce îmi spune acum este că ceva se întâmplă pe strlen. Și computerului confuz, pentru că E ca și cum, nu știu ce strlen este? Ce face ca, probabil, să vă spun vă lipsește? Audiența: Pierzi [neauzit]. ANDI Peng: Ai dreptate. Exact. Deci acest lucru este în cazul în care este important să vă asigurați că fiecare funcție vă folosească în dvs. Codul are antet corect fișier pentru biblioteca, sau ai de gând pentru a obține o mulțime de erori și codul nu se va să știe ce se întâmplă. Deci vom includă string.h aici. Acum când am încercați să compilați superior. Compila corect. Să rula acest program. Deci, de tip ceva cu litere mici. Ce vreți să tastați? Strige ceva. Bine, Charly tocmai a intrat în. Vom tastați numele Charly lui. Charly cu litere mici. Și, sperăm, să sperăm, aceasta este O să strige și scuipat Charly în majuscule. Ura! nu toată lumea înțelege cum M-am dus despre rezolvarea asta? Modul în care pot manipula folosind numere întregi pentru a rezolva ceva ce Vreau să fac în siruri de caractere, pentru că personajele și numere întregi pot se face referire în același mod, deoarece de cartografiere ASCII. Deci, pentru a reveni la punctul de vedere, dacă am a vrut să pună aici, în loc de 32 majuscule Un minus minuscule un fel ca care, care ar funcționa la fel de bine ca, pentru că pur și simplu doar diferența dintre cele două valori. Dacă vreau să fac acest Charly again--. Oh nu. Cred că ne-am dus pe un drum greșit, da? Audiența: [inaudibil] minuscule o. ANDI Peng: Nu te duci. Da. Și din scuipă Charly. Deci, fiți atenți atunci când te valorile scăzând să ne amintim care este unul mai mare decât celălalt. De exemplu, aici am uitat că este, de fapt o litere mici mai mare decât A. majuscule Deci, când am a încercat să-i scădea în altă parte în jurul valorii de, am negativ 32. Și computerul meu a fost ca, Nu știu ce e asta. E doar o întâmplare probabilitate valoare care nu este foarte bun. Și asigurați-vă că sunteți scăzând în lungimea corectă pentru a găsi caracterul dorit. BINE. Este cineva confuz cu privire la modul ne a mers despre scrierea această funcție? BINE. Deci, de fapt, o funcție deja există în bibliotecă numit ctype.h. Biblioteca se numește ctype.h. Această funcție este de fapt deja scris pentru tine. Se numește de sus. Și astfel, în scopul acest PSET, te duci pentru a găsi că într-adevăr doriți să utilizați o mulțime de funcții conținute în cadrul bibliotecii ctype. Pentru superioară, pentru a reduce, este superioară, este lower-- acestea sunt toate functiile care va fi capabil de a utiliza foarte, foarte repede în propriul cod care face exact ceea ce face acest lucru. Am scris cum de a converti un șir în majuscule. Dar acest lucru este de fapt codul că altcineva a scris și pe care le puteți accesa printr-un regim diferit. Da? Audiența: Deci, doar copiați un e acolo și o fac pentru fiecare literă? ANDI Peng: Da, pentru că eu nu fac pasă de valorile unei. Am grijă ca diferența între ele este de 32, nu? Diferența dintre litere mici b și majuscule B este, de asemenea, 32. Și diferența dintre C și majuscule C este întotdeauna 32. Trebuie doar să le pese de diferență între cele două, deoarece toate scrisorile urmează același model, nu? Dacă am diferența între unul dintre ei, Știu în ce constă diferența între toate dintre ele este. Buna intrebare. Da. Toată lumea bună? BINE. Oop. BINE. Deci un alt concept care este va fi foarte util ca tine continua să se dezvolte codul este această idee de a crea funcții sau de abstractizare. Deci, chiar acum, ne-am luat toate algebra. În algebră, vă sunt învățați că nu există acest lucru minunat numit în funcție mașină, în cazul în care, dacă intrare un fel de număr, se trece prin această funcție minunat și din apare un alt ieșire, nu? În cod, același lucru se întâmplă în orice fel de funcție. Așa că am putut fizic scrie în corpul meu de codul meu o declarație care de fapt nu principal indiferent de organismul de cod este de a face. Dar in afara de asta, am poate, de asemenea scrie mai multe funcții diferite că face multe lucruri diferite. De exemplu, am deja au inceput sa foloseasca o parte din ele. Printf-- că este o funcție care altcineva a scris deja că putem apela în codul nostru. Pentru a upper-- în acest caz, upper-- este o altă funcție am scris că pot apela în codul nostru. Și așa cred că de ce avem chiar funcții? De ce nu doar Plop toate în aceeași linie de cod? Se face mai ușor pentru toată lumea. Ei bine, raționamentul din spatele care este, în primul rând, organizarea. Este foarte enervant merge prin codul cuiva și o funcție ca printf. Dacă voi de fapt știa ce Funcția printf determinat să scrie, e, cum ar fi, de 1.000 de linii de cod. Dacă de fiecare dată mi-am dorit la printf ceva, A trebuit să scrie 1.000 de linii de cod, care ar fi foarte enervant pentru a citi, dreapta? Acesta este motivul pentru care am doar a creat această funcție abstract că avem deja pe cineva altceva a scris în altă parte. Și de fiecare dată trebuie să-l folosească în codul nostru, trebuie doar să spun printf. Și care este capabil de a utiliza funcția altcineva a scris în codul nostru. Se face mai ușor organizatoric pentru a citi codul. În al doilea rând, e simplificare. Acesta simplifică pașii pe care le avem pentru a lua pentru a rezolva problema noastră. Printf, funcții cum ar fi printf, funcții cum ar fi la partea superioară sunt toate lucrurile care ne permit să simplifica codul nostru în jos, astfel că este mai ușor. Și ultimul lucru este reutilizare. Deci, faptul că avem o funcție numită printf că putem apela multe diferite ori și îi permite să fie reutilizabile. Dacă ar fi să scrie printf, Am doar o dată scrie. Ea există numai în acest un singur loc. Dacă am vrut să o fac din nou, aș face- Trebuie să copiați și inserați toate astea în a doua linia mea de cod. De aceea, dacă vom crea o functie care există în afara principal noastre, putem apela doar la ea și reutilizarea l ori de câte ori avem nevoie de astfel că este mult mai ușor pentru noi, ca să scrie programe. Deci felul în care ne-ar scrie de fapt o functie este foarte asemănătoare, nu? Aceasta este un fel de prima caz în care am vom vezi o funcție ia pe un stil diferit de void nostru int main. În acest caz, dacă am vrut să scrie o funcție numită Q, nu? Și valoarea int aici este tot mi-a spus, ce vreau acest funcționează pentru a reveni la mine? Dacă vreau să cub un număr întreg, Am de gând să doriți să intrare. Acestea sunt parametrii. Am de gând să intrări o valoare de tip int. Și am de gând să se întoarcă un alt tip de valoare Int. Și aici, în timp ce pot vedea, toate fac este cubaj orice intrare meu este ca ieșire meu și-l întoarce. Deci, toate această funcție nu este ia un fel de întreg. Îl înmulțește de la sine de două ori astfel încât să cuburile din vigoare. Și apoi se întoarce indiferent că producția este. Deci, în acest caz, este de două linii cod care a trebuit să scrie în plus. Dar dacă ne-am dorit pentru a apela Pe acest de mai multe ori, este mult mai ușor să tastați ca unul line aici care este în cub decât trebuie să treacă prin mai multe ori. Deci modul în care, în esență, orice formatare pentru orice fel de funcție va exista este ca aici. Deci avem numele funcției. În acest caz, se numește cub. Și numim aceasta cub pentru că este ușor să vă amintiți. Puteți denumi-l pătrat și acesta poate fi de fapt cubed. Nu contează. Doar un nume pe care esti atribuirea funcția. Acest drept aici, Int, este tip de parametrul care aveți nevoie. Deci, ceea ce face această funcție nevoie pentru a funcționa? Ei bine, are nevoie de o intrare. Am numit-o intrare. Puteți să-l nume ce vrei. Dar am nevoie de ceva de tip int. O să execute efectiv tot ce este în interiorul de aici, corpul funcției. Și apoi tipul de retur chiar aici, acest int-- tot ce mi-a spune este că această funcție este O să se întoarcă la mine în Int. Deci o să ia într-un Int, și este de gând să vă dau înapoi un int. Are toată lumea înțelege modul în care formatare de acest fel funcționează? Misto. BINE. Deci, nu fi îngrijorat dacă acest lucru pare un pic chiar abstract acum. Acest lucru este ceva ce vom vorbi despre. Vom arunca cu capul în mai profundă mai târziu, în cursul. Modul în care orice fel de nivel superior abstracție de aceste lucruri de muncă este faptul că, în memorie, în computer, totul este stocată în acest tip de stivă, va spun. Deci, acolo în partea de sus. Nu știu dacă ați baieti poate vedea că de bine. Voi încerca pentru a mări. Aici, la partea de sus, ne-am au textul fizic de ce computerul este interpreting-- toate zerouri și cele care există în calculatorul nostru. Și apoi avem inițializat Date de date și neinițializate, ceea ce noi numim variabile globale. Deci variabile care există în toate programele și în întreaga ta, în esență, cod. Nu vă faceți griji dacă voi sunt un fel de neclar în această privință. Nu contează cu adevărat chiar acum. Și apoi ne-am ce-i numit o grămadă într-o stivă. Gândiți-vă la o stivă literalmente ca la fel ca un teanc de lucruri, un teanc de diferit lucruri fiind împins pe partea de sus față de cealaltă care stoca diferitele variabile și sintaxă în codul. Și apoi aici, la foarte partea de jos, avem variabilele de mediu de ceea ce se execută în termen de doar dvs. linie de cod mic. Și vom merge pentru a mări doar de pe partea reală stivă. Deci aici, dacă ar fi să zoom în doar pe acest domeniu de stiva, asta este ceea ce pare. Și acest lucru este, de fapt destul de importantă când voi vorbi despre funcții, deoarece notificare că memoria computerului stochează variabilele și funcțiile și parametrii atât dumneavoastră Funcția și principalele tale variabile în locuri diferite. Deci acum, principal este funcția propriu-zisă că sunteți de executare într-un cod. Ați parametrii stocate aici și variabilele locale stocate aici. Variabile locale înseamnă orice fel de variabile care există numai în această funcție. Și pe partea de sus a acesteia, aveți acest functie separata numita cub. Aveți e parametri precum și acele localnici. Și motivul pentru care se poate vezi aici este că ceea ce se întâmplă atunci când cub ia într-o valoare din funcția principală este că, de fapt este copierea că peste. Deci, dacă am vrut să cub 2 și a reveni 8, că 2 este, de fapt introdus ca un parametru și este copiate, asa vei avea o existentă în două locuri diferite în memorie. Și trebuie să fie foarte atent pe amintirea care unul dintre cei esti de fapt manipularea. Și un exemplu de ceea ce sa întâmplat că ar fi foarte, foarte rău există chiar aici. Deci aici, am luat, teoretic, un program de aici, o funcție principală că eu sunt declararea unui int x este egal cu 1. Am declarând un alt y Int este egal cu 2. Și apoi eu o funcționare prin această funcție numit de swap, în cazul în care presupun că este schimbarea cele două valori. Și apoi am de gând să printeaza-le, nu? Asta e ceea ce vreau să fac acest program. Așa că haideți să coboare și să ia o privire. Deci, dacă de fapt am scrie un alt funcție, după cum puteți vedea, avem functia nostru principal aici. Și apoi ne-am nostru a doua funcție aici. De swap nule. Void înseamnă doar că este nu o să se întoarcă nimic. Numele funcției este numit de swap, și este O să admisie două variabile, int un și int b, de la [neauzit] funcția. Deci, în esență, aici, suntem trecere a lui x și y în această funcție. Și dacă ar fi să crea astea-- așa ne-o dorim pentru a crea o valoare temporar, nu? Vom atribui asta o. Și apoi un va acum egal b. Și b va fi din nou în cazul în care valoarea temp fost, care este un, deoarece atunci când doriți să schimb lucrurile, nu se poate ca doar le schimba. Va trebui să țină unul aici, astfel încât să își amintește ceea ce, care este, pentru că o dată ai schimba o, ati uitat ce această valoare inițială a fost, nu? Deci, în teorie, acest program ar trebui să lucreze, nu? Dacă aș fi vrut să schimbe două, acestea ar trebui să schimb. Deci, haideți să-l rulați și a vedea dacă funcționează. Deci, ca voi poate vedea, X a fost o dată 1 și y 2 a fost o dată. Și dacă l-am imprima, x este încă 1 și Y este 2. Hmm, acest program nu pare a fi de lucru modul în care vreau să lucreze. Vrea cineva să ia o lovitură de la ghicitul de ce acest lucru a fost întâmplă? Ea are de a face cu modul în care că lucruri diferite sunt depozitate în diferite locuri din memorie. BINE. Deci, voi nu trebuie să vă faceți griji prea mult despre asta acum. Dar să știi că cub de locale Variabilele au fost a și b, pentru că aici, în funcția noastră, am declarat și b ca variabilele care există în cub, această funcție. Dar, după cum puteți vedea, parametrii care se ia în au fost depozitate aici. Dar nu am fost de fapt revenind nimic. Noi nu s-au schimbat de fapt x și y. Am fost schimbarea doar a și b. Ne-am copiat și y în x ceva numit a și b. Dar noi nu, de fapt manipulat x și y se. Sunt băieți văd cum ce se întâmplă? Este că ne-am copiat pur și simplu peste, dar nu am de fapt păstrat evidența în cazul în care acestea au fost în memorie. Și așa acum computerul este în căutarea, oh, am rula acest lucru prin Această funcție minunat. Dar x și y sunt încă x și y. Nimic nu sa întâmplat lor din cauza faptului că acești parametri și variabile locale sunt stocate într-un alt punere în memorie. Și aceasta este o de nivel superior Conceptul că vom începe să vedeți mai târziu, în cursul. Dar știu doar că acest lucru este o problemă care se poate intampla și că vom dau seama moduri despre cum să se ocupe de acest lucru mai târziu, în cursul. BINE. In regula. Deci ultima conceptul suntem întâmplă cu adevărat pentru a acoperi care va fi util pentru PSET în această săptămână sunt ceea ce se numesc argumente în linia de comandă. Deci, Rob în prelegerea sa a trecut prin un fel de scurt cu privire la modul aceste lucru. În esență știu că când scrii ca o funcție principală, atunci când ne a scris funcții înainte în trecut, am avut void main Int. Și motivul pentru care am avut nule acolo a fost că programele noastre nu au Trebuie să valori de intrare pentru a rula, nu? Când am fugit Mario, nu am nevoie de a de fapt doar de tip în ceva când am fugit Mario. Aș putea cere utilizatorului mai târziu. Dar asta nu va fi întotdeauna cazul. De exemplu, în acest Seturile de problema saptamana, ai de gând să fie cerut ca, în plus față de funcționare programul, ai de gând să doriți să introduceți anumite lucruri în drept ca tine rula programul. Deci modul în care facem asta este numit un argument linie de comandă, care este ca un argument puteți introduce direct ca esti încercarea de a rula programul. Deci, notația pentru acest lucru, e destul de complex cu aspect, dar nu este chiar așa de dificil. Deci Int main-- asta e doar funcția principală. În argc virgulă între paranteze șir argv. Deci tot ce spune este că acest Int argc-- tot ce vă spune este că acestea sunt numărul de argumente computerul ar trebui să se aștepte. Deci, un lucru care într-adevăr important să se țină evidența este numele fizic al programului dumneavoastră conteaza ca unul dintre aceste argumente. Deci, dacă am vrut să am programul meu rula plus o linie de comandă suplimentară argument, de fapt, eu sunt va avea două. Argc de fapt va fi de două. Și apoi string argv bracket-- tot ce este de a face, este un da-mi matrice de siruri de caractere care este va doar pentru a afișa și stoca ceea ce toate aceste argumente în linia de comandă sunt. Deci, de exemplu, în cazul în care am vrut să am această Programul, ./copy INFILE outfile, nu? Asta e doar o comandă tipic Linux. Ce este de fapt argc? Cât de multe argumente în linia de comandă există de fapt în asta? Toate acestea nu este de a face o copie a o INFILE a numelui unui fișier și o copie in un alt fișier, nu? Asta-i tot acest este de a face. După cum puteți vedea, eu o fac pe o singură linie fără a avea nevoie de fapt programul. Ce este argc noastră în acest caz? Câte argumente avem? Audiența: Trei? ANDI Peng: Avem trei, exact. Deci, este foarte intuitiv pentru a doar cred că e doar infile și outfile. Dar știu că numele fizic al Programul rulați conteaza ca unul. Deci, în acest caz, argc este de fapt trei. Ce zici, ce este argv 0? Amintiți-vă, tot de la argumente în linia de comandă au fost depozitate într-o matrice de siruri de caractere. Deci, dacă am încerca să-l accesa, ce ar argv suport 0-mi dai? Audiența: [neauzit]. ANDI Peng: Exact. Mi-ar da punctul slash copie, pentru că asta e elementul 0th, primul element al matrice mea. Ce zici de argv 1? Audiența: INFILE. ANDI Peng: INFILE, exact. Ce zici de argv 2? Audiența: outfile. ANDI Peng: outfile. Acesta este un pic complicat acum. Ce voi că argv 3 va fi să-mi dai dacă am încercat să imprimați asta? Audiența: [inaudibil]? ANDI Peng: Ai avut o mână în sus? Da. Audiența: O alternativă. ANDI Peng: Exact. Deci, amintiți-vă în curs pe care le au, la sfârșitul unei curse ceva numit terminator nul? Vom ajunge în această, de asemenea, mai departe în clasa. Dar să știi că, în notație, modul în care computerul știe că este sfârșitul de matrice este faptul că pune ceva numit un nul terminator sau o liniuță zero. Deci, dacă încercați să accesați argv 3, ai de gând să lovit acest bord 0. Acest lucru este chiar mai mult de o întrebare capcană. Ce zici de argv 4? Deci, aceasta este terminator nul trecut, dincolo de limitele gama noastră. Ce crezi că se va se întâmplă atunci când încercăm să facem acest lucru? Audiența: [inaudibil]? ANDI Peng: Îmi pare rău? Spune că un pic mai tare? Audiența: [neauzit]. ANDI Peng: Da. Acesta este numele Zona vei primi cel mai probabil. Dar să știi că argv 4-- care vă permite să acces locuri în a computerului de memorie pe care într-adevăr nu ar trebui să fie ating, deoarece acum știi ce argv este. Știi că este o matrice de dimensiune 3 care are copie punct, infile și outfile. Dacă încercați să meargă atât de departe dincolo de faptul că că ești trecut terminatorul nul, computerul are, probabil, stocate ceva în argv 4. Și tu chiar nu ar trebui să fie permis accesul în argv 4, pentru că aveți un fișier dulap si ai doar permis accesul la aceste trei rafturi. Dar dacă încerci să ajungă dincolo de raftul de cazul în care vă sunt permise, ai de gând să înceapă încurcați cu alte lucruri în memoria computerului. Asta va fi foarte, foarte rău. Deci, știu doar că. Fii foarte atent pe care le Nu doar începe întâmplare accesarea elemente într-o matrice care nu au fost în ceea ce a vrut să creeze. Da. BINE. Așa că am de gând să faci un alt exemplu terminale aici. BINE. Deci, Rob rapid în curs de altă zi a mers prin acest exemplu, unde a avut int main int string argv argc paranteze, care îmi spune că eu sunt Va trebui argumente linia de comandă. El are, în cazul în care este egal cu argc este egal cu 2-- amintiți-vă, este egal cu egali înseamnă comparație. În cazul în care este egal cu 2, atunci eu sunt va pentru a imprima salut, indiferent primul elementul de matrice este. Print altceva, salut lume. Ce se întâmplă acest lucru pentru a se întâmplă în esență? Poate cineva doar explica în Engleză ce acest program este de a face? Da. Audiența: Dacă cineva tastat într-o comandă și a zis: prima și ultima lor nume, nu va imprima doar Primul și spun, salut, indiferent de numele tau este prima. ANDI Peng: OK, hai să-l rulați. Deci, de exemplu, dacă ar fi să fac acest fișier face salut sa-- salut sa-- ce vrei să intrare? Audiența: Numele și prenumele. ANDI Peng: Numele și prenumele? Spatii? Audiența: Da. ANDI Peng: Poate cineva spune mine acum, ceea ce este argc? Doar acolo? Hopa, îmi pare rău. Lasă-mă să mă întorc. Cât de multe argumente în linia de comandă tu are-- voi nu se poate vedea cu adevărat. Dar voi încerca pentru a mări. Incerc. Da, nu e trei, nu? E slash punct salut, e Andi și e Peng. Deci, ce voi cred că acest lucru Programul va fi de imprimare afară? Oh. Oh, scuze. Numele greșit. E imprimarea, salut lume. Vrea cineva să explice de ce se întâmplă? Da? Audiența: [neauzit]. ANDI Peng: Exact. Deci, aici, sunt condiționate este, în cazul în care este egal cu argc este egal cu 2. Deci, numai în cazul în care nu există două argumente în linia de comandă. Apoi am de gând să imprima, salut, orice ar fi. Dar altceva, am de gând să imprima doar, salut lume. Deci, cineva vrea să-mi dea un exemplu de cum mi-ar fi în măsură să efectiv a lua it pentru a imprima valoarea argv 1? Ce mi-ar trebui pentru a introduce aici? Doar un singur lucru, nu? Deoarece Hello punct de deja conteaza ca primul argument. Am doar una mai mult. Deci, dot salut dacă am face Andi. Buna ziua, Andi. Nu toată lumea înțelege de ce se întâmplă? Da. Audiența: Deci spațiul dintre line-- comanda este [neauzit]? ANDI Peng: Nu. Deci, spațiul într-o linie de comandă argument, X, pentru a spune computer că acesta este începutul unui nou șir. Deci, string argv aceasta here-- magazine toate argumentele rând comenzi în siruri de caractere. Și astfel spațiul în linia de comandă argument-- tot ce face este să-ți spun, aceasta este la capătul unui șir și e timpul pentru a trece la un alt. Da. Acest lucru este destul de important pentru PSET ta, pentru că ești va fi testarea acestora. Deci, nimeni nu are orice întrebări cu privire la asta? Bine, in regula. Da? Audiența: Deci tu motivul ar fi pune întreg calc argument în loc de [inaudibil] ar fi atunci când doriți pentru a introduce informații suplimentare [Inaudibil]? ANDI Peng: Da, exact. Unele programe veți avea nevoie de pentru a introduce un argument linie de comandă că trece și care utilizează acest lucru. Da. Audiența: Și ce dacă [Inaudibil]? ANDI Peng: Ei bine, ceea ce fac am pentru a schimba apoi in programul meu? Audiența: Doar 3. ANDI Peng: De ce este faptul că întâmplă, crezi? Audiența: Deoarece [neauzit]. Audiența: Ar trebui să schimba-l la 2 [neauzit]. Audiența: 1 și 2. ANDI Peng: 1 și 2, exact. Deci, în acest caz, ar fi, probabil doresc să aibă două printf statements-- una care tipărite argv 1 și cel care imprimă argv 2. Aici. Pot să fac asta, de fapt foarte repede. Nu te duci. Oh. Nu este destul de ceea ce ai vrut. Dar dacă voi mizerie în jurul valorii de cu formatarea, se va ieși. Da. Misto. Știu că suntem un pic cam scurt la timp. Dar eu sunt doar de gând să-și petreacă rapid o câteva minute trec prin helpful-- Audiența: Aveți două minute. ANDI Peng: Am două minute? Multumesc. Câteva sfaturi rapide. PSET Deci, pentru aceasta PSET, am foarte recomanda, cum am spus, toată lumea pentru a citi spec. Vei fi scris trei una programs-- numit initials.c, unul numit caesar.c, unul numit vigenere.c. Câteva sfaturi importante care Vreți cu adevărat să păstreze în mind-- astfel există această funcție numit atoi-- cum îmi place să spun, a trois. Neclar dacă e de fapt, cum o spui. Dar tot ce face, e introducerea. Acesta convertește un șir la un int. Deci, o reprezinta ASCII la i întreg. E doar de conversie ASCII Valorile la număr întreg valori. Deci amintesc argv, matrice care stochează toate comenzile linia arguments-- le toate magazinele ca siruri de caractere. Și deci, dacă doriți să fie în măsură să au una dintre ele să devină un număr întreg, ai de gând să aibă pentru a folosi această valoare aici. Modulo, ca și cum am acoperit mai devreme în clasa de astăzi, vă permite să aibă restul de tot ce au. Deci, dacă avem într-adevăr, într-adevăr un număr mare de Caesar, Ce se întâmplă dacă avem la sfârșitul de un șir de Vigenere? Cum ai de gând să fie în măsură pentru a ajunge să-și încheie în jurul valorii de care? Dacă am lovit z și vreau l să se întoarcă la un, cum am de gând pentru a obține care să-și încheie în jurul valorii de? Probabil doriți să utilizați modulo acolo undeva. În al doilea rând, în jurul valorii de a căuta bibliotecă. ctype.h. Asta e un nou bibliotecă avem. Veți găsi o mulțime de foarte, foarte isupper functions-- util, islower, toupper, tolower, isalpha, etc.. Toate funcțiile care vor fi foarte utile atunci când sunteți încercat să dau seama, este acest personaj o literă mică? Cum pot converti acest string la un majuscule? Toate aceste lucruri vor fi foarte, foarte util pentru PSET ta. BINE. Orelor de seara asta sunt la 08:00 11:00 în sala de clasă TEAL mâine precum și miercuri și joi seara. Programul de lucru este în Comunelor. Foarte sugerezi baieti toate începe imediat, pentru că nu vrei să fie ca copil care are probleme joi seara depunerea PSET și este cum ar fi, eu nu știu ce să fac. Am început, am terminat, m-am prezentat. Încercați să vă faceți unele camere, pentru că în probleme de cod apar mereu. Doriți să vă asigurați că te dau o mulțime de timp pentru a putea pentru a finaliza psets. Misto. Voi stea în jurul valorii de aici. Audiența: Este on-line deja? ANDI Peng: Nu știu dacă e on-line deja, dar va fi. Voi închide în jurul valorii de aici, dacă cineva are deja întrebări. Mulțumesc pentru vizită.