>> [MUSIC JOC]
>> SPEAKER 1: Aceasta este CS50 și acesta este începutul săptămânii două.
Deci, să intrăm direct în ceva care este buggy, ca să spunem așa.
Deci, aici este IDE CS50 si am tras în sus în avans acest screen-- naibii
aceasta.
Alertă spoiler.
In regula.
Am tras în sus acest ecran de aici, care are un program foarte simplu.
Dacă vom derula în jos, cel mai de acest lucru este doar comentarii,
Dar aici, în linii 13, prin 17 avem un program.
>> Este punct de vedere sintactic valabil, ceea ce înseamnă că dacă Am compila, se va compila și rula,
dar e buggy.
Acest program susține în comentariile până sus că ar trebui să imprime 10 de stele,
dar nu este așa.
Și se bazează pe experiența dumneavoastră, sau în curând să fie o experiență cu C,
poți discerne logic de ce acest lucru este, de fapt, buggy?
Da?
Audiența: Se merge de la zero la 10.
Asta e 11 iterații.
SPEAKER 1: Da.
Deci, se va la zero up prin intermediul și egal cu 10,
care, desigur, este de 11 iterații.
Deci, o să print, într-adevăr, 11 stele.
Deci, convenția informatică în cele mai multe limbaje de programare
este, într-adevăr, doar pentru a începe numărarea de la zero,
dar conta până la, dar nu prin valoare care de fapt pasă.
>> Acum, acest lucru este un lucru care nevoie de un pic folosit pentru obtinerea
și chiar Scratch, conceput ca este pentru non programatori sau non calculator
oameni de stiinta si pentru copii în mare parte, este conceput pentru a avea
începe numărarea în general, la o.
Și asta e bine.
Puteți începe numărarea absolut la o dacă e mai confortabil.
Și conta până la la 10, dar iti vei da seama mai ales în această săptămână
și dincolo de care tocmai așa multe lucruri în programare
presupunem că 0 este primul cifre cu care puteți conta,
care ai de gând să găsească mai ușor doar pentru a ajunge în acest obicei de pornire
de la zero și de numărare până la valoarea îți pasă acum de la
obține merge.
>> Deci, care a stabilit că.
Am schimbat mai puțin decât sau este egal cu doar mai puțin.
Să aruncăm o privire la un al doilea exemplu aici.
>> Deci, acest program prea susține în ei comentarii până sus că ar trebui să imprime
zece stele, dar nu.
Care este bug-ul aici?
>> Deci, what-- și îmi pare rău, să fie clar.
10 stele.
Câte unul pe linie, dar nu.
Deci, de fapt, lasă-mă să merg mai departe și compila aceasta pentru că este un pic mai puțin
clar pe baza acestei descriere.
Lasă-mă să intru în directorul nostru sursă.
Asigurați-buggy un slash punct, un buggy.
OK, am vedea 11 stele, care este încă problematică,
dar sunt, de asemenea, toate într-o singură linie.
Care este problema aici?
Da.
Audiența: [neauzit].
SPEAKER 1: Da.
Deci, aceasta este o subtilitate care s-ar putea amintesc mă face scurtă mențiune.
Chiar dacă totul pare destul de, și este frumos indentat,
și un fel de pare-Scratch ca în care linia 16 și 17 sunt,
într-adevăr, indentate sub care pentru bucla.
Asta e imaterial.
Computerul nu știu sau vezi spațiu alb.
Spațiu alb este doar pentru noi, oamenii, stilistic.
Computerul știe când aveți acolade, care ar putea, într-adevăr,
rezolva această problemă.
>> Deci, dacă ne-am dus de fapt și pune în mod explicit în aceste acolade
care ar rezolva această problemă prin ceea ce face clar pentru compilatorul
că de fapt, doresc să execute două linii de cod din nou,
și din nou, și din nou.
Dar ceea ce este explicația fundamental?
Dreapta?
Noi nu strict necesar cret bretele tot timpul,
chiar dacă este probabil cel mai practică pentru a intra în acest obicei, oricum
chiar dacă se adaugă două caractere codul. Ce?
>> Audiența: [inaudibil]?
SPEAKER 1: Da, așa că e o altă soluție cu totul.
Dreapta?
Mai ales în cazul în care la prima vedere nu aveți Apreciez ce se întâmplă.
Ei bine, cu siguranță am putea doar face două lucruri deodată
și doar a evita problema cu totul.
Și asta e bine, dar acum, în scopuri de astăzi, ceea ce
este explicația pentru bug-ul?
De ce au fost toate aceste stele de pe o linie?
Da?
>> Audiența: Se pare că în cazul în care aveți o linie de cod,
o poti face fara ele.
SPEAKER 1: Exact.
Aceasta este doar o convenție umană.
Oamenii dau seama că este un puțin enervant sau plictisitor
de a avea pentru a pune acolade toate din timp, dacă tot vrei să faci
este executa o linie de cod.
Deci, oamenii au decis unele timp în urmă că e bine.
Dacă doriți pentru a pune toate de bucla dvs. pe care doar o linie de genul asta,
asta e bine cu single- punct și virgulă la sfârșitul anului.
Dar poți să faci un singur astfel de line fără acolade.
>> Deci, atunci când ghidul de stil CS50 cum va indica,
veți vedea că, în general, este bun obicei
pentru a obține în acest lucru până când sunteți rătăcirea destul de confortabil
din aceste tipuri de convenții și de a face treaba ta.
Atâta timp cât ești de sine consistent.
Și vom vorbi mai mult despre stil un pic mai târziu astăzi.
>> Deci, lasă-mă să deschid un alt program.
Desigur, ar trebui să ne stabilească faptul că 10 la fel de bine.
Lasă-mă să mergeți mai departe și scrie o reală program de repede ca voi suna,
să zicem, bucla dot C. Deci, bucla dot C. Și în buclă dot C am de gând să aibă,
includ I Standard / O dot H int void main.
Și acum hai să facem, într-adevăr, o buclă.
Deci, 4 int i devine zero.
I este mai puțin decât, să spunem, 50.
I plus, plus.
Și apoi aici să mergeți mai departe și se imprimă F.
Și apoi vreau să imprimați I și o nouă linie de, punct și virgulă.
>> Și aceasta ar trebui să imprima toate Numerele de la zero, până la 50?
Câteva cap da din cap.
Câteva nr.
Care este bug-ul deja?
Care este greșeala ușor am făcut?
Da.
>> Audiența: [neauzit].
SPEAKER 1: Da.
Deci, chiar dacă se pare ca acest lucru este ceea ce am de gând,
Amintim că eu, de asemenea, doar un caracter ASCII.
>> Deci, dacă eu spun, de imprimare "I."
Se întâmplă literalmente pentru a imprima I. Deci, dacă am
doresc să plug-in un substituent Valoarea de fapt am nevoie pentru a face acest lucru
și apoi conectați lung în valoarea I dinamic.
În caz contrar, eu sunt doar de gând să obține 50 I de pe ecran.
>> Deci, lasă-mă să merg mai departe și face această buclă, rula,
și, într-adevăr, avem toate drumul până prin 49.
Și dacă derulați înapoi în timp văd numărul zero la început.
>> Ei bine, ce dacă am un fel de bară?
Ce se întâmplă dacă fac acest lucru?
Doar pentru că nu mă gândesc.
Ce-i acest program.
După re compilat și a alerga, de gând să faci în mod logic?
>> Audiența: Nimic.
>> SPEAKER 1: Nimic.
De ce este asta?
>> Audiența: I este conceput pentru zero.
Deci, condiția este falsă.
SPEAKER 1: Da, exact.
Tot codul este corect, punct de vedere sintactic.
Acest lucru va compila, acest cod va rula, dar nu este
de gând să faci ceva util pentru că am inițializa I la zero.
Apoi am verifica, este ca eu mai mare de 50?
În mod evident, nu, nu e.
Deci bucla nu execută deloc.
>> Ce se întâmplă dacă facem ceva un pic mai mult nesăbuit?
Deci, ce se întâmplă dacă facem ca int i devine zero.
Și acum să-mi folosesc în timp ce buclă, care a fost o altă condiție.
Și în timp ce am spus, în timp ce eu este mai mare decât sau egale cu zero, iar apoi aici am
mergeți mai departe și de a salva fișierul, face bucla.
Și sunt pe cale să-l rulați.
Ce am de gând să văd acest timp cu o buclă în timp ce?
Da.
>> Audiența: o buclă infinită?
>> SPEAKER 1: o buclă infinită?
Da, și de ce?
Audiența: Pentru că e mereu zero.
SPEAKER 1: Da.
Deci, eu este inițializată ca zero.
Bineînțeles că este întotdeauna mai mare mică sau egală cu 0 ca urmare.
Deci, eu doar de gând să aceasta infinit.
Și acum, aceasta a venit o dată sau de două ori pentru a capetelor cursului.
Ce se întâmplă atunci când au o buclă infinită?
>> Audiența: Controlul C.
SPEAKER 1: Da.
Deci, de control C va răspunde în cele din urmă.
Din păcate, ne-am imprimate milioane și milioane de zerouri deja
și așa computerul are un fel de ajuns înaintea mea.
Deci, o să ignore mă un pic.
Dar, dacă a lovit doar de control C câteva ori pe tastaturii Mac sau PC,
în cele din urmă ar trebui să, într-adevăr, să rezilieze.
Și dacă nu, vă vom arăta unele tehnici înainte de mult timp în cazul în care
de fapt, poate ucide cu forța de programe, la fel ca în Windows și Mac OS,
dacă este necesar.
Dar hai să încercăm altceva.
Să fapt incrementa I. Este acest lucru încă o să fie infinit?
Lasă-mă să rulați acest.
Iar acum puteți fel de vezi ce se întâmplă.
Acest lucru, de asemenea, este o buclă infinită.
Dar acest lucru este un pic de o întrebare capcană.
Se întâmplă acest lucru pentru a imprima numere pentru totdeauna?
>> Audiența: Nu.
SPEAKER 1: Nu
Ce?
Am auzit niște nr aici.
Someone-- Da.
Audiența: Nu aveți suficient biți pentru a menține într-adevăr merge.
SPEAKER 1: Bine.
Așa că nu au suficient biți pentru a continua.
Deci, ce se va întâmpla?
E doar de gând să se oprească?
>> Audiența: La un moment dat se va închide the--
SPEAKER 1: Se va închide bucla în jos, dar de ce?
Ce se va întâmpla la foarte sfârșitul granițele sale?
Da?
Audiența: Acesta va ciclu Înapoi la numere negative.
SPEAKER 1: Pentru numere negative, sau dacă am fost doar tratarea pozitivă,
zero, cel puțin.
Deci, da, absolut.
Amintiți-vă că am văzut ultima dată că, dacă incrementa biți dvs. de prea multe ori,
și acolo Fore de preaplin capacitatea Int dvs.
sau indiferent de tipul de date este, ești O să încheie în jurul, probabil,
două numere negative.
Sau dacă ați specifica faptul că dvs. Gama ar trebui să fie numai pozitiv,
pe care le puteți face, dar noi nu am văzut asta încă,
s-ar putea ajunge cel puțin înapoi la zero.
Deși, de fapt, da.
În acest caz, negativ numere, caz în care
bucla este de gând să pună capăt pentru că eu nu este, de fapt,
mai mare sau egală cu zero, dacă este negativ.
>> Deci, din păcate, cum timp ar trebui să ne așteptăm?
Chiar acum suntem de până la ceea ce, de 2 milioane de-ish?
Suntem ca 2 miliarde de, vom trebui să aștepte
până când vom putea vedea de fapt, acest simptom.
Dar putem vedea un pic mai repede, maybe-- să vedem dacă putem întrerupe.
Haide.
Chiar și meniurile apar lent.
In regula.
Deci, ne vom întoarce la asta înainte de mult timp.
Este un bun time-- la naiba, pui.
>> Este un moment bun pentru unele anunțuri.
Deci, dacă s-ar putea plăcea să se angajeze în YHack,
care este un eveniment fiind sponsorizat de prietenii noștri de la Yale.
Și, într-adevăr, o parte din cursului TFS la Yale sunt implicate cu aceasta.
YHack este un internațional hack-a-thon găzduit de și a avut loc
la Yale, reunind 1.500 cum ar fi hackeri minte și reclamele toate
peste lume.
Dacă acest lucru este de interes, să ia o privire aici.
Dacă acest lucru este prea scurt pe ecran, să ia o privire la diapozitive de astăzi
pentru URL-ul pentru yhack.org.
Deci, de asemenea, o câteva anunțuri rapide.
Deci, în mod oficial secțiuni va începe săptămână atât aici, cât și New Haven următoare.
Păstrați în minte veți fi obtinerea unui e-mail mai târziu în acest weekend, cel mai probabil.
Este nevoie de o lungă perioadă de timp pentru CS50 la secțiuni,
având în vedere toți oamenii în clasă și toată lumea se deplasează în jurul.
Și toate Fellows de predare " programe sunt, de asemenea, încă solidificarea,
dar Stay tuned pentru un e-mail și, dacă este nevoie fi, puteți re-secțiune după.
>> Study.cs50.net.
Deci, chiar dacă ești un participant constant la secțiuni, își dau seama că aproape toate
din resursele pe care le folosesc în secțiunile sunt disponibile publicului la CS50
Studia la acest URL aici.
Deci, dacă doriți vreodată să re revizuire material din secțiune, sau de a citi mai departe,
sau nu se poate face ceva saptamana, dau seama că slide-uri de propoziții,
și probleme, și definiții, și mai sunt toate acolo, de asemenea.
>> Orelor relua astăzi, și mâine, și miercuri,
și joi verifica cursului site-ul pentru programul.
>> Și, de asemenea, acum lansarea astăzi este CS50 Discutați.
Deci, dacă și atunci când aveți întrebări pentru reciproc sau pentru personalul cursului,
și, în general, de lucru sunt pe un anumit set problemă,
dau seama că nu neapărat trebuie să apeleze la omul următoarea.
Dacă nu e nimeni acolo, puteți ajunge la noi și colegii
online prin intermediul CS50 Discutați.
Deci, aceasta este o discuție bord pentru curs,
și să realizeze că acest este, probabil, cel mai bun
loc pentru a începe atunci când aveți întrebări atunci când în afara orelor de program
în special.
>> Prânz va începe în această săptămână prea.
La Fire and Ice [Inaudibil] în New Haven.
Aruncati o privire la cursului site-ul web pentru a RSVP.
Primul venit, primul servit pentru asta.
Dacă nu obține în această săptămână vom face aceste mai în fiecare vineri
durata.
>> OK, și acum un cuvânt despre clasificare.
În special în intrăm problemă stabili un, care este în această săptămână,
și problema set de două și după aceea.
Cum vom merge despre evaluarea seturi P și evaluarea calității acestora?
Deci, e de patru axe pe care le folosim în CS50, și sunt acestea patru aici.
>> Domeniu de aplicare, care surprinde într-o numeric bază doar cât de mult a setului P
ai aborda.
Este aproximativ corespunde cu efort, și este modul nostru de a captura
ai încercat jumătate P set, toate setului P.
Aceasta este una ușor pentru a obține perfectă scorurile dacă faci, într-adevăr,
încercați fiecare aspect al setului P.
Deci, ține minte asta.
>> Corectitudinea este exact acest lucru.
Are munca ta cod ca caietul de sarcini și sub formă de soluție de probă personalul "
sugerează că codul ar trebui, de fapt, locul de muncă.
Verificați 50, dacă nu ați sa întâlnit totuși, este în P stabilit o specificație
și, în general, va vă dau da / nu răspunsuri
dacă codul este corect.
Cel puțin până acum ca vom Pentru a evalua aceasta pe baza testelor
că vom rula în acest program.
>> Design-ul este mult mai subiectiv.
Acest lucru este cât de bine scris este codul.
Și acest lucru este ceva ce veți obține mai bine la timp,
și este ceva că vom oferă mai mult feedback-ul de calitate pe.
Și de proiectare aș putea Adică, înainte de mult vă
ar putea fi ispitit în unele P setat pentru a face ceva loopingly,
dar să aibă poate trei, sau patru, sau cinci bucle imbricate prim-plan sau în timp ce imbricate
bucle.
Asta în general ar trebui începe de a te face piti
și ar fi, în general, Design rău luate în considerare.
Și veți începe să vedeți în clasă și din moduri de clasă bune de a face lucrurile,
modalități rele de a face lucruri pe care ar putea fi toate corecte, dar nu
neapărat bine conceput.
Ca scrierea unui eseu.
S-ar putea fi capabil de a pune cuvintele pe o Pagina că sunt corect gramatical,
dar eseul sau Teza sunt în este doar
complet incoerent sau neconvingator.
Și astfel încât ar putea fi analogul în THE lume scris de un design rău sau bun.
>> Și stil, de asemenea, este destul de subiectiv.
Dar cel puțin ne așteptăm consecvență.
Acesta este modul în care destul de este codul.
Sunt lucruri frumos indentate?
Sunt variabile vă bine pe nume / Sunt toate de paranteze dumneavoastră și acolade
aliniate așa cum ar trebui să fie?
Avem un ghid de stil CS50 ca setul problemă pe care va indica la.
Cei mai confortabil sunt bun venit să se abată de la acea
atâta timp cât ești de sine coerente.
Și acest lucru, de asemenea, este o lecție vom consolida în secțiune.
Deci, dacă toate acestea a fost un pic rapid, realiza setul P și secțiunile
va intra în mai multă profunzime, înainte de mult timp.
>> Dar, în general, avem foarte puține cupe pentru CS50.
Scorurile sunt, în general, pe o scară de la unu la trei, sau unul până la cinci.
Suntem literally-- și eu nu pot spune acest lucru suficient în prima săptămână.
Trei este bun.
Deci, chiar dacă, da, trei din de cinci mod normal, matematic,
ar putea fi un 60 la suta sau ca un minus D.
Trei este, de fapt, bine.
Și, de fapt, ne așteptăm cei mai mulți studenți din clasa
pentru a începe termenul în jurul valorii de câte două, câte trei și, și patru labe.
Probabil că nu atât de multe de cinci.
Nu prea multe. Cele
Dar, în general pentru a începe în la fața locului că dulce în curba
astfel că, timp progreseaza, există de fapt o cameră pentru,
și oportunități de progresie de sus.
Deci, vă rugăm să nu echivalează cu trei de 60%.
Este mult mai abstract decât atât.
Formula cu care se calculează clasele se ponderează după cum urmează.
Corectitudinea este în valoare de cel mai.
Design este în valoare de un pic mai puțin.
Stilul este în valoare de un pic mai puțin.
Și, în general, acest surprinde cantitatea de timp
care merge în obținerea fiecare din aceste axe doar dreapta.
Stilul este foarte ușor, ar trebui să fie foarte rapid,
dar este un obicei usor pentru a obține leneș despre.
Corectitudinea ar putea să ia ai cele mai multe ori.
Chasing jos unii ar putea bug ia acea oră în plus sau mai mult,
și așa mai departe, de notare în cele din urmă că surprinde.
Și așa, acum un cuvânt mai grave.
Deoarece CS50 are distincție, pentru o mai bună
sau pentru mai rău, de a fi poate mai bine familiarizat
cu problemele academice onestitate decât cele mai multe orice alt curs.
Și într-adevăr, este de cunoștințele mele, care trimitem mai mulți elevi, din păcate,
în scopuri disciplinare în fiecare an, ca urmare. Asa ca,
în interesul complet divulgarea, hai să vorbim pe scurt
despre ceea ce se întâmplă în CS50, și ceea ce poate face, și ceea ce poate fi conștient de.
>> Deci, aici din 2007, atunci când Am moștenit cursului,
este numărul de cazuri Ad Board.
Ad Board este disciplinare Harvard corp, sau acum Onoare sfat,
la care se face referire cazuri cînd elevii fac ceva care cursului
programa consideră nerezonabil.
Nu e nici un model real, aici, aș spune.
Acesta variază de-a lungul ani, dar, în general,
acesta este numărul de cazuri care sunt menționate.
Numărul de studenți care sunt implicate?
Prea variază.
De obicei, anul trecut, pentru exemplu, 29 de studenți de la Harvard
au fost Ad urcat, ca să spunem așa.
29 dintre ei actualii studenți, Doi dintre ei studenți anterioare,
care au fost colaboreaza într-un fel nocivă.
Și apoi, în ceea ce privește procent, de obicei, aproximativ 3%
de clasa care, din păcate, face ca aceste tipuri de decizii.
>> Deci, anul trecut a fost de 3,5% de corp student CS50 lui
care a fost Ad urcat, ca să spunem așa.
>> Deci, ce înseamnă toate acestea înseamnă?
Și ce facem de fapt, nu?
>> Deci, pentru divulgarea completa, am absolut, ca oameni de stiinta de calculator,
au instrumente software la dispoziția noastră și este foarte ușor pentru noi, în echitate,
că alte lui colegi care nu sunt trecerea aceste linii să treacă compara
fiecare depunere in acest an împotriva fiecărui depunere în ultimii opt ani.
Software-ul face acest lucru.
Și în final este ochii omului care decid
dacă sau nu să se refere unele contează pentru adjudecare în continuare,
dar software-ul cu siguranță vă ajută.
Și aceasta, sincer, este de ce cred Avem astfel un număr mare în CS50.
Nu e din cauza CS50 studenți sau elevi CS mai mult
în general, sunt mai puțin cinstit decât orice alți studenți,
e doar avem instrumente și tehnici
cu care să ia această primă trecere.
>> Dar ce facem cu ochii pe toate aceste lucruri
De asemenea, din nou, în interesul recunoscând munca pe care a fi puse
în cu o majoritate super clasa.
Și politica cursului pe onestitate academică,
chiar dacă este o grămadă de paragrafe lung, cu o grămadă de gloanțe
că sunt destul de ușor de citit sperăm, aceasta într-adevăr nu se reduc să fie rezonabilă.
Și cel mai bun regula de degetul mare, care oferim în cadrul programei
este acest lucru, esența de toate lucrările pe care le
prezenta la acest curs trebuie să fie a ta.
Și într-adevăr, în aproape toate cele cazurile menționate pentru măsuri disciplinare
a fost din cauza cineva târziu elev noapte transformat de obicei cod sale
peste pur și simplu la un coleg de clasa, care apoi a adoptat
în totalitate sau semnificativ al acestuia.
>> Dar, de fapt, acest lucru este în regulă.
Și într-adevăr, la sediul ore, bucăți de hârtie
te-ai dat, dacă ai venit de birou ore săptămâna trecută încurajează la fel de mult.
Ești absolut a salutat și încurajat
pentru a discuta despre seturi de probleme cu colegii de clasă.
Pentru a ajuta reciproc, atunci când poticnire.
Dar, în general a statului de degetul mare ar trebui să fi aceasta, "atunci când vi se cere ajutorul,
s-ar putea arăta codul pentru alții, dar nu a lor ar putea vedea. "
Deci, cu alte cuvinte, în cazul în care sunt se luptă cu un anumit set P
și eu stau acolo, în mese sala, sau în bibliotecă,
sau în sala de clasă încercarea de a găsi unele vina,
Eu pot arăta cu siguranță codul meu pe ecran
la persoana care sta langa pentru mine, cu siguranță personalul,
dar, de asemenea un coleg de clasa.
Dar dacă soluția care colegul meu oferă este, oh,
aici să ia doar o privire la ceea ce Am făcut-o, care traversează linia.
>> Și aș îndrăzni să spun că, în general, un lucru rezonabil pentru cei mai mulți oameni
la fața locului, foarte usor de linia de.
Și astfel, a se vedea programa pentru mai multe detalii.
Și acum unul dintre mai mult aspecte controversate
de CS50 programa pe care am m-am gândit ar vorbi la concluzie aici
este așa-numita clauză regret.
Deci, aici e tot amenda de imprimare.
Dar, în general, am văzut în ultimii 8 ani, plus
că, într-adevăr, aproape toate lui CS50 cazuri de necinste academice
au fost rezultatul a doar săraci ceea ce face noaptea târziu decizie.
Rezultatul stres, rezultatul de lipsa de a manca, lipsa de somn,
prea multe seturi P, prea multe termene, prea multe angajamente.
Stres construirea într-un AM 02:00, 03:00 AM, 04:00, cu un termen limită profilează la orizont.
Cei mai mulți studenți în aceste cazuri tocmai am luat decizii proaste
că s-ar putea regreta foarte bine dimineața următoare dacă nu minute mai târziu,
dar pana anul trecut nu a existat nici supapă de eliberare că acești studenți ar putea
de fapt, deschide pentru a aborda, de fapt, cap de problemă pe fără teama de a fi
pornit de la colegiu cu totul.
>> Și, într-adevăr, am introdus această clauză regret, anul trecut,
care spune că, dacă în termen de 72 ore, trei zile,
de trecere o linie prevăzute în programa
ai venit cu nerăbdare să-unul din cursului capete și vom avea o discuție cu privire la aceasta.
Nu sunt încă fi unele rezultat, contrar a ceea ce este
fost raportate în sens contrar.
Există încă unele rezultat care este o actiune de curs,
reducerea la zero, în general, un set P sau de a lua alte măsuri,
dar vom, într-adevăr, mâner noi înșine și nu
consultați-l mai mare au fost rezultatul ar putea fi mult mai grave.
Și, într-adevăr, de a împărtăși ceea ce sa întâmplat anul trecut, în cei opt ani, iar acum
nouă ani, de predare acest curs și după tinkering cu diverse butoane,
cotitură diferite cadrane în ultimii de mai mulți ani pe onestitate academic,
și văzând pe datele nu aparente impact, chiar de discursuri de acest gen,
aceasta a fost mâinile în jos cel mai bun lucru am introdus pedagogic
în opt ani de-a lungul aceste linii în CS50.
>> 19 de studenți s-au prezentat în conformitate cu această clauză, anul trecut.
Am luat nici o acțiune pentru șapte dintre acei studenți,
stabilind că acestea au fost inutil îngrijorat.
Ei nu aveau, în fapt, trecut o linie, dar
a fost un bun de chat pentru a avea toate acestea.
Am adus la zero 11 de scorurile care au fost depuse.
Și într-un caz am cerut o elev de a face o problemă set.
Dar mai convingătoare, sincer, cu aceste 19 chat-uri,
care a fost mult mai mult decât am așteptat să aibă, fiecare dintre ele
10 minute la o poate oră, de asemenea, a adus
la lumină o serie de probleme în ceea ce privește probleme familiale, probleme de prieten,
probleme de sanatate mintala pe care le apoi angajat,
cu elevului binecuvântare, rezident decan, sau prieteni, sau orice alt număr
resurselor de sprijin.
Astfel că aceasta a fost de departe una din cele mai bune utilizări ale timpului nostru
și unul dintre cele mai bune intervențiilor.
>> Cu care a spus, nu a avut nici intrare de pe rata de detecție
de necinste academice în general.
Și îndrăznesc să spun, acest subset de studenți de anul trecut
a fost un demografică pe care le nu identificate anterior, înainte de
și nu au legătură cu înainte.
Și astfel, acestea au fost povești de succes minunate
chiar dacă acestea au fost aduse la lumină în mai puțin de circumstanțe optime.
Deci, ține minte acest lucru așa cum ați face, probabil,
unele decizii proaste vă târziu în noapte,
că există recurs atât de mult timp ca studentul în această situație
proprii și să prezinte astfel încât să putem au acest tip de chat-ul și să se ocupe cu ea
într-un mod care este de învățământ, și apoi putem pune în spatele nostru a doua zi.
>> Deci, fără alte formalități, să ia marginea de pe această conversație,
motivul pentru care puii sunt de până este doar pentru a sparge gheața pentru o clipă.
Și, din păcate, toate sunt de somn, dar ceea ce trebuia să se întâmple aici
a fost toată lumea trebuia respectului si fel de relaxați-vă
după acea conversație foarte grele.
Dar se pare mi-am pus pui de somn.
Dar dacă te duci la a CS50 pui site-ul slash,
le puteți viziona pe tot parcursul zilei.
În special, poate 2:00, sau 03:00, sau 4:00 noaptea
pentru a vedea un pic detensionare acolo.
Deci care este slash pui.
In regula.
Nu a fost distractiv?
BINE.
Deci, înapoi la unele calculator știință, dacă îmi permiteți.
>> Deci, amintim că ultima dată când am început nu cauta doar la principal, care
a fost funcția implicit, atunci când pavilion verde apasat echivalent,
dar am început, de asemenea pe scurt scris unele dintre propriile noastre funcții.
Și până acum nici una dintre aceste funcții au fost deosebit de mare sau miez.
Veți primi în cele mai mari funcții probabil, P set 2, P set 3,
cu siguranta P set de 4 și mai departe.
Chiar acum cele mai multe dintre programele, dacă nu toate dintre ele, cu siguranță pentru P
set 1 se poate face în întregime în principal.
În cazul în care programul este numai cinci linii, 10 de linii,
chiar 20 de linii de mult, perfect rezonabil să-l scrie
toate în principal și să nu complica peste codul, dar ce facem astăzi
și mai departe, de asemenea, încearcă să introducerea unor tehnici de proiectare bune
așa că, codul devine mai complicat și ca problemele
vrei să rezolve mai greu și mai mai interesant aveți, un fel de,
instrumentele din caseta de instrumente cu care pentru a proiecta soluții bune pentru cei.
>> Deci, haideți să aruncăm o privire rapidă înapoi la acest program de la meu de săptămâna trecută, care
a fost zero, funcții dot C și observați că, pur și simplu,
se pare ca acest lucru cu două funcții, principală și numele de imprimare.
Și gândire înapoi sau poate inginerie inversă astăzi,
ceea ce a fost motivația pentru introducerea o funcție în linie 28 numit,
imprima nume?
Sau ceea ce a fost un exemplu de acest din termeni de principiu sau Takeaway,
dacă ar fi.
Unele murmure.
Ce?
>> Da descompunere atât de funcțional este un fel de modul fantezist de a spune,
descompune programul în părțile sale componente
și apoi utilizați acele părți pentru a asambla un întreg.
Deci, asta este doar un fel de o gura deja,
dar acest lucru este, probabil, chiar o exemplu mai bun de ceva
sunat abstracție.
Dreapta?
Abstractizare va fi unul dintre temele recurente în CS50
și, de asemenea, informatică mai mult, în general, din moment ce este
o tehnica cu care puteți rezolva probleme mai eficient pentru că
pot scrie mai multe soluții intuitiv și într-un mod care cântare
și este de înțeles de către alte persoane.
Ce vreau să spun cu asta?
>> Deci, fără îndoială, este mult mai ușor de citit să se uite la un program de acest fel,
super-scurt deși este.
Când vedeți pe linia 22 că există o funcție numită, nume de imprimare.
Acest nume singur spune ceea ce face.
Această funcție aparent ia intrare între paranteze sale,
și se pare că face ceva, imprimă probabil numele.
Și astfel, chiar dacă am absolut ar putea avea
făcut ceea ce am făcut în urmă cu o săptămână, care a fost ia doar această linie reală de cod,
Scapa de acest lucru, și să obțină scăpa de toate astea împreună,
am un fel de captate departe noțiunea de imprimarea unui nume.
Nu-mi pasă dacă utilizați def imprimare.
Nu-mi pasă dacă ai o sută S și un N. backslash Acestea
sunt detalii incredibil de arcane.
Ce îmi pasă ca programator imprimă un nume.
Și astfel, ce modalitate mai bună de a face acest lucru decât prin apelarea unei funcții, nume de imprimare?
Și așa, asta a fost una din motivațiile pentru a face ceva de genul asta.
Ceea ce face codul mai ușor de citit, mai mult reutilizabile, și, de asemenea, auto-descriptiv.
Acum, haideți să aruncăm o privire la un alt exemplu,
care era funcții unul, care am avut aici.
>> Deci, aceasta este, probabil, chiar mai convingătoare, deoarece, în acest caz,
Nu doriți să obțineți doar un int.
Vreau să ajung un Int pozitiv.
Și se pare că pentru a obține un rezultat pozitiv int ce trebuie să faci o grămadă de legwork.
Dreapta?
Nu e un simplu o linie suna cum ar fi numele de imprimare a fost,
care este, desigur, mai puțin convingătoare.
>> Pentru a obține un Int pozitiv, logically-- lasă-mă să derulați înapoi pentru a ascunde acest lucru.
Ce ai de facut?
La fel ca toate instrumentele pe care le in acest moment sunt
lucruri cum ar fi imprimare def de la Standard Bibliotecă și, de asemenea, de la biblioteca CS50
avem Ia Int, și Ia Float, Ia lung lung, obține String,
dar singurul, Germane, acum este de a lua Int.
Deci, în cazul în care singurul instrument aveți în caseta de instrument este Ia Int,
cum vom merge despre punerea în aplicare a l pentru a obține Int pozitiv?
>> Audiența: Creați un jurnal și verificați dacă intrarea pe care au dat
a fost pozitiv sau nu.
>> SPEAKER 1: Perfect.
Exact.
Un alt instrument avem în nostru set de instrumente de la o săptămână sau două în urmă
este doar construcția looping.
Și astfel, da, dacă vom folosi un timp buclă, sau o face în timp ce buclă, sau o înainte
bucla probabil am putea obține departe cu oricare din cele într-o formă.
Putem pune în aplicare noțiunea de get Int pozitiv prin doar folosind Get Int,
și apoi chiar a păstra numindu-l din nou și să păstreze bat la cap de utilizator
până când ea de fapt sau ne oferă ceea ce ne dorim.
>> Și așa acum, acest abstracție de procesul de
de a obține un Int pozitiv într-o funcție numită
Obțineți pozitiv Int este un pic mai mult convingatoare pentru ca uita-te la asta.
Acestea sunt ca 10 plus linii de cod care
sunt implicate în obținerea unui Int pozitiv, și nu-mi pasă cu adevărat cum o faci.
Tot mă interesează este că poate face acest lucru, și așa am
ascunse toate aceste detalii din spatele unui funcție numită Ia pozitiv Int că,
într-adevăr, are acest do în timp ce bucla.
>> Și a vedea săptămâna trecută pentru sintaxa acolo, dar pur si simplu declară N,
și se imprimă afară instrucțiuni pentru utilizator.
Solicită Ia Int și apoi verifică această condiție din nou, și din nou,
și din nou până când utilizatorul cooperează.
>> Deci, acum, câteva teste de corectitudine.
Pentru cei familiarizați probabil cu unele de programare,
de ce este declarat N, de ce creez N afara face în timp ce bucla?
De ce este pe linia 29, și nu pe 33 ca, de exemplu.
>> Audiența: Pentru că atunci când declare exterior, un fel
de mult, scope-- mare
>> SPEAKER 1: Bun.
>> Audiența: --and dacă declara se în interiorul buclei, [neauzit]
deoarece nu știu despre el.
SPEAKER 1: Exact.
Dacă pot simplify-- este o chestiune de domeniul de aplicare.
Și domeniul de aplicare se referă la contextul în care există o variabilă sau este utilizabil.
Și a statului de degetul mare frumos aici este faptul că în general, atunci când declara sau de a crea
o variabilă îl puteți folosi numai în interiorul din cel mai aproape de îmbrățișând acolade.
Deci, ce înseamnă asta?
Dacă am, în schimb, anula acest lucru și du-te cu ceva care se simte un pic mai simplu.
Dreapta?
>> Linia 32 doar arata mai curat pentru mine acum.
Fac ambele lucruri la o dată și apoi atribuirea
mâna dreaptă la mâna stângă.
Problema bazează acum pe această definiție a domeniului de aplicare
Se care N poate fi utilizat în conducte 31 și 32 în interiorul această buclă,
dar în cazul în care prin această definiție nu se poate fi folosit?
În conformitate ce?
Da.
>> Audiența: 35.
>> SPEAKER 1: 35.
Categoric nu 35.
Și, de asemenea unde altundeva?
Audiența: 34.
SPEAKER 1: Chiar este 34 problematic pentru că este
in afara de acolade.
Și astfel, de fapt, să vedem ce se întâmplă.
Dreapta?
Acest lucru ar putea părea un pic intuitiv sau nu s-ar putea,
dar haideți să vedem ce compilator are de spus atunci când
vom merge în directorul sursă de astăzi.
Face o funcție.
Oh, Doamne.
Ei bine, în cele din urmă am terminat că, prin modul în care.
In regula.
Și ceea ce este problema aici?
Foarte arcane să se uite la.
Dar aici e ceea ce am typed-- face o funcție.
Iată ce face induse, care este de fapt
folosind zăngănitul compilator cu unele dintre aceste steaguri
că vom vedea din nou, înainte de mult timp.
Și din nou, uita-te întotdeauna la Prima a fost atunci,
pentru că aceasta ar putea avea doar o cascadă efect de sens pe alte linii.
>> Deci, ce înseamnă acest lucru este că problemă este în funcție 1.c.
Este pe linia 32.
Și e la coloană, sau caracter, 13.
Deci, atunci când editorul de text care poate ajuta să identificați unde problema este.
Deci, dacă am defila în sus, ceea ce este linia 32?
Asta e într-adevăr asta care este deja evidențiat
n variabile dreapta here-- neutilizate.
Dar nu e nefolosit.
Sunt, folosind.
Dar compilatorului confuz, pentru că ea există doar în interiorul acestui domeniu.
Și deci nu se poate folosi aici.
Nu pot folosi aici.
Și compilator, prin urmare, chiar nu-i pasă că eu încerc.
Se pare a fi neutilizate în domeniul său de aplicare actuale.
>> Deci, putem extinde domeniul de aplicare de a face exact ceea ce am început aplice: int n.
Și chiar dacă nu arata la fel de elegant, poate,
și vom lua o linie în plus aici, acum e în domeniul de aplicare peste tot.
Deci, hai să încercăm din nou.
Deci, asigurați-o funcție.
Nisa.
Și acum dacă am dacă am alerga funcție o, hai să-l dau negativ 10,
negativ 1, 0, 1, și într-adevăr funcționează.
>> Deci nu e altă soluție aici.
Știi ce?
Ce se întâmplă dacă într-adevăr sunt lupte cu asta?
Nu știu în cazul în care n-ar trebui să meargă.
Știi ce?
Mă duc să-l puneți toate mod în partea de sus a dosarul meu aici.
Ce s-ar face acest lucru, nu crezi?
Da?
>> Audiența: [neauzit].
SPEAKER 1: Da.
Așa că am făcut-o la nivel mondial, ca să spunem așa.
Dacă aveți o variabilă care este în afara toate funcțiile care este permis,
și codul ar trebui să compileze și n va fi acum accesibile, nu numai în get
Int pozitiv, dar, de asemenea, în main-- care este un pic îngrijorătoare, deoarece există
deja un n în principal, cu atât mai mult pe care, în doar moment--
dar acest lucru ar fi considerat de design rău.
In regula.
Dacă aveți să recurgă la ceva de genul, oh, voi
doar a pus aici pentru că codul pare a compila
nu este, în general cea mai bună practică.
Mai degrabă doriți să alegeți mai îngust domeniul de aplicare posibil
pentru variabilele, ceea ce ar însemna merge cu un design noastră inițială, care
este chiar aici.
>> Acum ca o paranteza, daca au avut un identic cu numele de variabilă aici,
Astfel, c-ar ocupa de asta: deși acest lucru nu se va întâmpla prea often--
este că aceasta este încă foarte bine aici.
Dar această definiție a n, în conformitate 22 va umbra cea globală.
Deci, acesta va funcționa în cadrul principal, iar cea globală
se vor aplica, de fapt, atunci când vă aflați în obține Int pozitiv, dar mai mult pe faptul că
un alt timp, ci doar pentru cei curiosi.
>> Deci, pe scurt, ne-am rezolva această aici.
Acum, haideți să tachineze pe langa alte două piese înainte de a ne uităm la un ultim linie de cod
în acest program.
Obțineți Int pozitiv.
Pe partea stângă a Cuvântul său este int cuvântul.
Ce înseamnă asta crezi?
Până acum am văzut cea mai mare parte gol.
Da?
>> Audiența: Este tipul de variabilă care te întrebat despre.
>> SPEAKER 1: Da, e tipul de, permiteți-mi nu spun variabil, dar tipul de valoare
că eu cer înapoi pentru.
Și într-adevăr, asta e intuitiv aici, sperăm.
Dreapta?
Dacă doriți să obțineți un Int pozitiv, ceea ce este tu
doresc function-- ca nostru voluntari din săptămâna trecută
să vă restituie o bucată de hârtie cu un int pe ea?
Și așa ne-am specificat că așa-numitele tip de returnare a acestei funcții
este de a lua Int pozitiv.
Dacă nu l-am vrea să întoarce nimic, spui nule.
Dacă doriți să-l să se întoarcă un șir de caractere, spui șir.
Dacă doriți să-l să se întoarcă un flotor, spui float.
Dar singurul care se aplică aici În mod logic, pentru că eu sunt, folosind get Int,
chiar dacă eu o să limitarea valori pozitive, este de a reveni un int.
>> Deci invers, ceea ce înseamnă că există un gol în paranteze?
Ce paranteze în general, să definească?
Da?
>> Audiența: Aceasta înseamnă funcția de anii nu sunt de fapt de asistent.
>> SPEAKER 1: Aceasta înseamnă funcția de anii nu de fapt ceea ce a obține?
>> Audiența: O intrare.
>> SPEAKER 1: O intrare, un fel de.
Deci, într-adevăr, în cazul în care paranteză Aici specificați nule,
Asta înseamnă că nu vreau nici o intrare.
Voi rezolva problema mine.
Și într-adevăr, nu trebuie să spune obține ceva pozitiv Int.
Trebuie doar spui, pentru a primi Int pozitiv, și că Funcția se va stinge și de a face treaba.
>> Dar acolo a fost un mic truc Am jucat aici tot acest timp
să vă asigurați că acest cod compilează.
Observați că int-- obține pozitiv Int void-- este pe linia de 27.
Dar din anumite motive aparent ciudat este, de asemenea, aici pe linia 16.
Și doar pentru o bună măsură Voi repeta acest lucru pentru ca este perfect identice.
Și am spus prototip cu un pic de comentariu-o linie.
Ce se întâmplă dacă șterg asta, și acum rulați din nou face funcția 1, introduceți.
Hopa.
Asteapta un minut.
Unde e contul meu?
Nu?
Așteptare.
Face funcția 1.
Nu mergem.
BINE.
Dacă nu ar fi salvat în mod corespunzător.
Deci, cred că e un pic bug aici, unde nu sunt
văzând numele tab în acest moment.
Deci, ce se întâmplă aici?
Declarația implicită a funcției obține Int pozitiv este nul în C99.
Atât de confuz din nou.
Deci, ce este acest indicativ de?
Ei bine, se pare că C este destul de stupid.
Ei bine, e programarea limbă, sau mai degrabă compilatorul este.
Se știe doar ceea ce ai a învățat-o, și e doar
O să știe ceva dacă învățat înainte.
Cu alte cuvinte, în principal în acest moment, eu sunt
încercarea de a apela o funcție numit obține Int pozitiv.
Dar compilatorul nu se va pentru a observa că obține Int pozitiv
există până la linia 26.
Și așa mai departe ceea ce face compilator este doar erori de îndată ce ajunge la linia 17,
spunând declarație implicit de a lua Int pozitiv, care
este doar un mod fantezist de a spune, eu nu știu ce obține int pozitiv este încă.
>> Alte limbi, cum ar fi Java și Python și Ruby s-ar putea privi înainte.
C nu.
Și astfel modul în care repara aceasta este una din cele două moduri.
Fie unul, în cazul în care problema este că obține Int pozitiv nu a mai fost văzut înainte,
Ei bine, permiteți-mi să-l muta în partea de sus.
Asta ar rezolva această problemă.
Dar, în general, e considerate tehnica mai bine
pentru a pune funcția principală de la foarte top astfel încât un om citit codul
știe ce face programul, deoarece principală nu este îngropat toate
modul în partea de jos sau la mijloc.
Este la foarte de sus.
Așa că nu se simte ideal.
Și puteți obține de fapt, în situații în care
Dacă apelurile o funcție un altul, în care se solicită un alt,
puteți obține într-o problemă în cazul în nici poate merge mai sus de altă parte, în mod logic.
Nu este doar posibil.
>> Și astfel mod de a lucra în jurul valorii de acest lucru este de a lua doar
semnătura funcția, astfel încât să speak-- prima linie în cazul în care este declared--
și doar copia, lipiți-l la top, dar nu cu braces-- buclat
doar cu un punct și virgulă.
E ca și cum un mic indiciu de ceea ce este de a veni.
Și, de fapt, tot acest timp când am am văzut lucruri, cum ar fi io.h standard de
și, în mod similar, cs50.h în acele puncte h fișiere sunt acolo alte prototipuri.
Și vom vedea că înainte de mult timp.
>> Deci, pe scurt, atunci când aveți un program de într-un fișier cu mai multe funcții
în afară de principal, ai aproape întotdeauna vrea să le declare
doar cu titlu de prima lor linie, urmat de un punct și virgulă,
la foarte de sus a fișierului.
Asta a fost o mulțime dintr-o dată.
Alte intrebari?
In regula.
>> Deci, haideți să mergem mai departe, atunci la ceva de genul tuse.
Oh.
Cât de potrivit.
In regula.
Tuse.
Deci, aici este o C punerea în aplicare a unui program
am făcut de altă zi în Scratch că foarte simplu doar
spune tuse, tuse, tuse.
In regula.
Și cineva a spus câteva zile în urmă că există
un mod de curățare deja acest cod în sus.
In regula?
De îndată ce te copierea și lipirea de design, probabil, rău.
Cel puțin o dată ajungem la patru sau cinci sau 20 tuse, se simte rău practică.
Tocmai am păstra copie, lipire.
Care este soluția evidentă la curățarea acest program până?
>> Audiența: Buclă.
>> SPEAKER 1: Da.
Deci, utilizarea o buclă.
Și putem folosi o pentru buclă, un timp bucla, orice număr de abordări.
Și într-adevăr, asta e ceea ce facem în versiunea de aici.
Am rescris loc în versiunea unul dintre cough.c
să fie tuse doar într-o buclă de-.
Bine, dar există o posibilitatea de acum să fel de start
pentru a proiecta acest lucru un pic mai mult ca lecția am predat acum o clipă,
care este asta: să presupunem că am vrut pentru a crea o funcție numită tuse,
să considerăm pentru o clipă ce se va arata.
Deci, dacă vreau ceva la tuse, doar am nevoie de
pentru a folosi imprimare f interiorul functiei.
Și într-adevăr sunt.
Și, de fapt, toate acestea timp, în orice moment ești
imprimare ceva la ecranul, un programator
ar numi asta un efect secundar.
Nu mă predarea înapoi cineva o valoare.
Mi-a ia anumite acțiuni care ar putea fi vizual evident.
Dar această funcție tuse, nu-l întoarce pe baza prima sa linie ceva?
Nu, pentru că tipul său de retur este nulă, ceea ce înseamnă doar
nu ma preda nimic înapoi.
S-ar putea face ceva vizual, dar nu mi-e predarea
spate o bucată de hârtie ca saptamana trecuta.
>> Are nevoie de nici o intrare?
Nu.
Și așa e gol aici.
Deci acest prea este un fel de peste-inginerie această problemă.
Dreapta?
Am făcut programul mai complexe, mai multe linii de cod,
Nu am făcut nici o mai funcțional, dar aceasta
ar fi o piatră de temelie, probabil, pentru o mai largă
context cu codul mai complicat.
Dar ce zici de asta?
Ce am done-- doar uitându-se la acest fără să se uite la comentariu
la foarte de sus a ceea ce au file-- Am făcut fundamental aici cu tuse mea
de punere în aplicare care este diferit?
Da, in spate?
>> Audiența: Fă-l astfel încât să puteți au un caracter opriți.
SPEAKER 1: Da.
Deci, acest lucru se simte un fel de frumos.
Dreapta?
E ca și cum adăugarea o caracteristică a ta program sau funcția, în acest caz.
Încă întoarce nimic.
S-ar putea avea un efect secundar vizual, pentru că sună imprimare f.
Dar acum am parametrizat funcția, care
înseamnă că ați specificat luat intrare de tip int și o numesc n,
dar am putea spune orice vreau.
De fapt, ar putea fi doar ori pentru a fi chiar mai explicit.
Și apoi m-am putut schimba doar asta aici.
Dar ideea este că acest lucru este modul în care am a crea o funcție care ia de intrare.
Și dacă vă amintiți flipping prin, probabil, online, într-un singur
de mers pe jos-throughs, The al patrulea și ultim exemplu tuse,
veți observa aici am generalizat codul meu fel de further-- captată
mai departe.
Ca tuse și strănut, ambele sunt despre cum ar spune ceva sau de a face
un fel de sunet.
Salvează ar fi corespunzătoare bloc Scratch.
Și ce am făcut în această versiune, care putem doar scurt la,
este tusea este la fel ca a spune, [TUSE], tuse, și între timp, strănut este
cum ai spune, [ACHOO].
Și așa am generalizat punerea în aplicare a celor
de punere în aplicare acum Această funcție generic,
spun, ceea ce este interesant în scopuri de astăzi
numai pentru că încă nu are un tip de întoarcere.
Dar câți intrări are?
Audiența: Doi.
SPEAKER 1: Doi.
Și deci, dacă doriți să ia în două argumente,
doar le separă cu o virgulă.
Și, dacă doriți să atunci apel această funcție,
observați că tocmai ați apel zicem, citat, citatul,
pentru primul argument, comun n, pentru al doilea argument.
Deci, din nou, doar avem acum blocuri astfel încât să putem, de fapt
punerea în aplicare a unora dintre propriile noastre funcții.
In regula.
Orice întrebări cu privire la aceste?
>> Deci, acum să coaja înapoi un strat dacă acest lucru.
Și scopul, în cele din urmă, este problema set de săptămâna viitoare
va fi pe cryptogrophy-- arta de a codare informații.
Și exact, informațiile va avea tu cripta sau decripta
va fi text.
Și astfel acest tip de invitatii întrebarea de astăzi ca bine,
ceea ce se întâmplă pe sub capota cu text ASCII dincolo de săptămână la zero,
și cum o putem de fapt începe să-l manipuleze?
Deci, aici este numele Zamyla lui.
Și în text, ar putea fi introdus ca în ca funcția șir get.
Și începând de acum, atunci când vezi o string ca asta: Z-A-M-Y-L-un--
incepe sa te gandesti de ea ca și cum fiecare de aceste caractere este într-o cutie de sale
propriu.
Și într-adevăr, într-o săptămână sau așa e timp, fiecare dintre aceste cutii
va reprezenta foarte special un bloc de memory-- o muscatura de memorie.
Deci, fiecare dintre aceste scrisori, în cele din urmă, va reprezenta 8 biți.
Și vom vedea de fapt ce se întâmplă pe sub capota în calculatorul meu.
>> Dar pentru că nu este suficient doar să se uite la Zamyla
prin acest obiectiv, prin care fiecare dintre aceste scrisori este în propria cutie.
Și destul de frumos în C putem accesa fiecare din aceste cutii direct.
Deci, dacă doriți să obțineți primul scrisoare de numele ei, foarte ușor în C.
Dacă doriți să obțineți ultima scrisoare, foarte ușor, precum și
cu o bucată de noi sintaxă.
>> Deci, am de gând să merg mai departe în CS50 IDE și deschide șirul de zero puncte C.
Și în acest exemplu aici, există o serie de lucruri noi se întâmplă.
Deci, în primul rând în linia 19, ne-am văzut acest șir get before--.
Deci, doar ca o verificare rapidă bun-simț, dacă cineva ar putea oferi până verbal
explicația un laic de ce se întâmplă în linia 19.
Ca doar traduce aceasta în Engleză că un coleg de cameră nu este în CS50
s-ar putea înțelege.
Da.
>> Audiența: Au intrare Un utilizator șir și se păstrează într-o s variabilă.
SPEAKER 1: Bun.
Au intrare utilizator un șir și se păstrează într-o s variabilă.
Grozav.
Deci pe-dreapta parte, numim șir get.
Care returnează o valoare care nu sa atribuit
din partea dreaptă a stânga parte într-o variabilă numită s asta e
proiectat pentru a stoca un șir.
Exact.
>> Deci, linia de acum 22, pe comentariul in linie 21,
evident că imprimă șir un personaj pe linie.
Dar cum?
Deci, în primul rând, ne-am inițializa I la 0.
Și atunci cum ajungem la la sfârșitul numelui Zamyla lui?
Ei bine, la sfârșitul Numele Zamyla, am putea
manual tip în ultimul caracter de numele ei într-un fel, sau numărul de ea.
Dreapta?
Dacă ne întoarcem here-- Z-A-M-L-- Y-L-un-- așa că am putut de tip în.
Care este indicele de Ultima scrisoare Zamyla lui?
Dacă acest lucru este 0-- vorbind ca un programmer-- 0, 1, 2, 3, 4, 5,
Am heard-- așa, într-adevăr, ultima literă în numele Zamyla este al șaselea,
dar dacă socotim de la 0, se va fi numărul 5.
Deci, ține minte asta aici.
>> Se pare că este o funcție în C numit strlen, și înapoi în ziua
și la această zi încă, o mulțime de programatori
Alegeți să sincronizați nume pentru lor funcții care suna ca cuvintele
ei încearcă să spună.
Deci strlen este de lungime șir.
Și ce ar fi lungimea șir de S reveni atunci când Zamyla este de intrare?
>> Audiența: Cinci.
>> DIFUZOR 1: Z-A-M-Y-L. Șase.
Dreapta?
Care este lungimea numelui Zamyla lui?
Dreapta?
Și în realitate, șase litere.
Dreapta?
Și ce înseamnă asta pentru bucla nostru?
Vom merge de la 0 până la șase, care
este de gând să ne dea cinci iterații.
Ce facem pe fiecare iteratie?
Ei bine, la sută C, cineva ghicit de altă zi,
înseamnă un substituent pentru ce?
>> Audiența: Char.
SPEAKER 1: Doar un char.
Deci, un singur character-- nu mai multe caractere, cum ar fi un șir.
Și apoi aici e noua linie că avem imprimarea.
Și apoi aici este noul sintaxa.
Dacă doriți să imprimați i-lea de caractere în șir S, ca să spunem așa,
Poți spune pur și simplu Numele șir S,
și apoi deschideți suport pătrat, și apoi închis suport pătrat, cu un i
mijlocul.
Și e un fel de frumos în care un fel de arata ca un pătrat
la fel ca pătrate în care lui Zamyla Există personaje pe care poza acolo.
>> Deci, dacă I ​​a alerga de fapt, acest acum, să vedem ce se întâmplă.
Face șir 0 dot slash șir 0, și atunci eu sunt
O să tastați în numele Zamyla lui.
Nu e nici o promptă, pentru că nu am utilizați imprimare f, dar asta e bine.
Știu doar ce să fac.
Și într-adevăr, se afiseaza Numele Zamyla lui, câte unul pe linie.
>> Acum hai să fim un pic mai nesăbuit.
Să presupunem că nu știam despre strlen și m-am gândit,
Bine, nimeni nu va avea un nume mai mare decât la fel ca 50 de caractere.
Să mergem mai departe și să recompilați acest și rulați din nou, apoi tastați în Zamyla
din nou.
În mod logic, ceea ce este Programul va încerca să imprimați?
Z-A-M-Y-L-O apoi ca 45 bytes necunoscute de memorie.
Și într-adevăr, ne vom întoarce la această idee de memorie.
Dar doar logic, dacă Numele Zamyla este atât de mult,
conform imaginea aici, ce spunem
este să păstreze imprimare, ține de imprimare, ține imprimare, ține de imprimare, ține de imprimare,
tot drumul la caracterul 50, care cine știe ce se va întâmpla.
Deci, haideți să aruncăm o privire de fapt.
Să introduceți Zamyla.
Interesant.
Am avut noroc.
Doar o grămadă de spatiu alb.
Oh.
Există un caracter funky.
Se pare ca un fel de întrebare ciudată marca acolo, dar nu există nume Zamyla lui.
Să ne într-adevăr nesăbuit.
Cum despre noi imprima 500 blocuri în necunoscut?
Să mergem mai departe și să facă acest lucru precum și apoi re-run.
Și să ecran complet, pentru că avem nevoie pentru a vedea mai mult spațiu.
Zamyla.
A primit din nou noroc.
>> Dare vom obține mai mult nesăbuit?
Să ne mai nesăbuit.
50.000 de caractere.
Acest lucru este cel mai sigur nu este o idee bună.
In regula.
Face șir 0.
Aceasta va fi ultima noastră demo.
Zamyla.
Ugh.
BINE.
Deci memoria mea este într-adevăr gol, chiar acum, care este de fapt un fel de convenabil.
Ceea ce am încercarea de a obține sa-- bine.
Și acum am doar mergi la a lua nesăbuit.
500.000.
Make-- să full-screen-l.
Enter.
Zamyla.
Nu mergem.
Nu am nici o idee despre ce este, dar se pare rău.
In regula.
Și, de fapt, în curând, dacă ești printre puținele norocos în ore de birou
și în probleme stabilit unul, s-ar putea foarte bine întâlni acest lucru.
Segmentarea vina nu de fapt au un sens bine definit.
Aceasta înseamnă un fel de greșeală referitoare la un segment de memorie.
Și în termeni de nespecialist, aceasta înseamnă că a atins
memory-- am folosit RAM în calculatorul meu că nu ar trebui să fi avut acces la.
Și asta e ceea ce este atât puternic și, de asemenea, periculos
despre C este că de fapt au acces neîngrădit
la totalitatea memorie de program dumneavoastră sau octeți sau RAM, mai precis.
>> Deci, chiar dacă numele lui Zamyla este de numai șase caractere,
Eu pot merge în continuare oriunde în memorie vreau.
Și, ca o paranteza, dacă ați citit vreodata ceva articol
a lungul anilor despre unele server sau unele programe
obtinerea crăpate sau tocat care este profitat de ceva
numit un buffer overflow exploata că vom fapt
vorbesc despre în câteva săptămâni, asta e în general, referindu-se la un fel pacalind
un calculator în merge bine dincolo de granițele memoriei
că ar trebui să aibă, și găsi ceva suculent
în memory-- o parola, probabil, un mod
de a eluda unele numărul de serie verifica, sau pur și simplu, în general, în stare
pentru a pacali computerul se execută cod care nu a fost destinat.
Dar să revenim la realitate pentru o clipă
în cazul în care acest program a fost puse în aplicare cu strlen,
și să introducă un lucru aici.
Ce este nou între aceste primele trei linii?
>> Deci șir punct h.
Se pare că este această bibliotecă numit String Dot H, sau Biblioteca șir,
a cărui fișier antet, ca să spunem așa, este șir dot h care îmi dă
acces la această funcție strlen.
Dacă aș omite că, compilatorul este O să țipi la mine într-o formă.
Dar știi ce?
Acum hai să ne foarte nuanțată.
În linia 22, nu e ceva gen de inefficient-- prost concepute,
arguably-- despre această linie de cod.
Gandeste-te la modul în care sunt puse în aplicare pentru buclă
și ce măsuri se întâmple din nou și din nou și again-- inițializarea,
starea, codul care este executat, atunci incrementul
sau schimbarea, atunci condiția, apoi codul, atunci schimbarea, atunci
starea, atunci codul, atunci schimbarea, și așa mai departe.
Deci, ceea ce ar putea fi un pic ingrijoratoare sau prost făcut aici?
Da, în albastru.
Audiența: strlen este numit de multe, multe ori.
SPEAKER 1: Da.
Deci, strlen este numit de multe ori, dar ceea ce este
lungimea numelui Zamyla The Prima dată bucla execută?
>> Audiența: Șase.
>> SPEAKER 1: Six.
Ei bine, ceea ce este lungimea numele ei a doua oară codul executa?
>> Audiența: Șase.
>> SPEAKER 1: Bine.
E încă șase.
Dreapta?
Numele Zarla nu are sa schimbat, chiar dacă caut
la doar o parte din literele din numele ei.
Și astfel faptul că eu sunt în mod eficient această întrebare, ceea ce este
lungimea de Zamyla, ceea ce este lungimea de Zamyla, ceea ce este lungimea Zamyla,
de șase ori separate sau șapte chiar, este doar prost,
pentru că asta e neschimbat răspunsul.
Și ce am putut de fapt faci este asta: în șir unul
Am o versiune marginal mai bine aici.
There-- string whoops-- două am o versiune mai bună, în care marginal
Fac asta: în loc de doar inițializarea I la 0, am, de asemenea, cu o virgulă
declara o variabilă numită al doilea N- Nu am să spun din nou Int.
Nu ar trebui, de fapt,.
Dar eu spun n.
Și apoi am inițializa la n strlen de n, astfel încât acum
De câte ori nu strlen se executa în total?
Doar odata.
Și astfel încât aceasta este ceea ce ne referim mai devreme despre design mai bun.
De fapt, o dată codul este corect, merge înapoi și de gândire prin,
sunt eu, folosind cât mai puțin memorie sau ca câteva secunde
sau milisecunde de timp de calculator ca posibil să pună în aplicare unele probleme?
Și am de gând pentru a defila și doar menționa
că există această mențiune de nul în această versiune,
dar vom reveni la asta înainte de mult timp.
Pentru că, pentru moment, haideți să aruncăm o privire la în cazul în care acest lucru se întâmplă să ne conducă.
Deci o, se pare că Acum, că avem capacitatea de
să se uite la caractere individuale, putem parghie ceva
din saptamana 0, care a fost foarte arcane și un fel de neinteresant la momentul respectiv.
Dar acum, și mai ales atunci când ajunge în criptografie într-o săptămână,
se va fi destul de puternic.
Se pare că, cu unele int și plutește de date types--
și caractere și șiruri și alte lucruri-- unele dintre ele
pot fi foarte ușor convertite la altul.
>> De exemplu, atunci când am vorbit despre ASCII ceva timp ago-- aici e
literele de capital A prin M, punct, punct,
dot-- am spus că există o mapare între aceste litere și cifre.
Și, de fapt, ea este valabil pentru litere mici, precum și.
Litere mici a este de 97, capitalul este de 65 o.
Și există un număr în ASCII, care este doar acest cartografiere
Sistem pentru toate celelalte litere.
Deci, ce înseamnă asta?
Ei bine, am de gând să merg mai departe și deschis up reală repede ceva numit
ASCII 0, dintre care cel mai mult este un comentariu.
Și din nou online, puteți oricând privire prin comentarii.
>> Și să ia o privire ce acest lucru se va face.
Așa că are o funcție principală.
Am codificate hard numerele doar pentru acum, pentru că știu ce fac.
Știu ce vreau să văd aici.
Și am initializat I la 65 de ani.
Și Contez sus prin 26 de litere total.
Și ce am de gând să imprima o linie la un moment dat
dacă poate interpreta această linie subliniat?
Ce se tipărite?
Da.
>> Audiența: Ai de gând pentru a imprima litera care
corespunde harta Valoarea scrisoare și valoare întreagă?
SPEAKER 1: Exact.
Am de gând să imprima scrisoarea corespunzătoare valoarea întreagă,
și invers, după cum urmează.
Ei bine, acest, cineva a spus mai devreme, este doar un substituent pentru un char.
Încă mai este.
Acest lucru, desigur, este un substituent pentru o nu int-- o nouă linie.
Și acum observați, prima mea valoare care Sunt conectarea pentru substituent
nu este doar eu vreau să spun, în paranteze, char I,
care char paranteză este spune compilator, am trata
nu ca ceea ce este, ceea ce este un număr.
Trata ca pe un personaj real.
Întrucât a doua valoare am conectarea in-- Eu-- ar trebui să fie doar un număr.
>> Deci, dacă am compila acest program-- astfel încât acesta este face ASCII 0,
dot ASCII slash 0-- doar mă acest grafic la îndemână mic care
imi arata tot a posibilului mapările fără să-l cred
prin sau dau seama pe cont propriu.
Și eu sunt, de asemenea, imprimarea, observați litere mici,
deoarece câteva linii mai târziu, am De asemenea, imprima acest cartografiere
precum și, ceea ce este doar de a spune că, odată ce ați înțeles
ce se întâmplă dedesubt capota, poți să
converti automat înainte și înapoi.
Și, de fapt, dacă vreunul dintre voi a făcut vreodată acest lucru în școala primară
sau auzit despre cineva a lua o notă mitic
și trecerea la lui sau prietenul ei în clasă,
dar tu bruiat scrisori de ca A devine B,
și B devine C, sau ceva mai complicat decât atât, ei bine,
cum te-ai duce despre punere în aplicare a ca un copil?
Ei bine, doar un fel de știu A devine B, B devine C,
dar matematic, ceea ce a fost făcut copilul ăla?
Ce ai fost adăugarea la fiecare literă?
Efectiv, 1.
>> Deci, atunci când vă schimbați de la A la B, care este un fel de schimbare 65-66,
ceea ce înseamnă matematic doar adăugați 1.
Și așa că, dacă ar fi să pună în aplicare că puțin tehnica înșelătoare
pentru profesorul în codul, voi s-ar putea face exact acest lucru doar
prin adăugarea o singură literă împreună.
Deci, înainte de mult timp, suntem O să vedem cum putem
pot profita de asta de fapt scramble adevărat și Unscramble
informații.
În același timp, știu că am început să introducă un cuplu alte biblioteci
here-- șir unul azi.
Și un site foarte util sperăm că vă veți găsi
este numit reference.cs50.net, care cadrele didactice au pregătit,
astfel încât, dacă doriți să căuta lucrări cum strlen,
puteți începe să tastați numele functiei,
faceți clic pe strlen acolo, și apoi o explicație mai puțin confortabil
este de gând să apară.
Sau, dacă doriți oficial Explicație bazat pe Linux,
puteți să faceți clic mai confortabil la dreapta sus, și
va prezenta aceleași informații, dar în termeni mai complexe.
Aceasta este o resursă utilă pentru știu de fapt ce face totul.
>> Data viitoare vom aruncăm o privire la Ovaltine
și mai mult, și să introducă noi înșine la lumea de criptografie.
Înainte de atunci, vom vedea mai târziu în această săptămână.
Și acum, Colton Ogden.
Ne vedem miercuri.
>> [MUSIC JOC]
>> SPEAKER 1: Ce [BLEEP] faci?
>> SPEAKER 1: Sunt mananca desert meu?
Cum îl mănânci?
Cu mâinile?
>> [MUSIC JOC]