>> ROB BOWDEN: Aceasta este secțiune mai confortabil,
dar asta nu înseamnă că, dacă simt ca nu esti mai confortabil
nu vei învăța lucruri aici.
Deci, să începem.
Ai diapozitive merge drept în lucruri.
Sunt eu pe cale să-l ia doar acum?
Trecerea de laptop-uri.
>> ALLISON: Nu vrei sa te prezinti, Rob?
>> ROB BOWDEN: Oh, eu sunt Rob.
Acesta este al meu al cincilea an TF-ing CS50.
>> GABRIEL: Eu sunt Gabriel.
Sunt TF șef al CS50.
Am fost TF anul trecut, și în acest an.
ALLISON: Și eu sunt Alison, iar acest lucru este meu al doilea an TF-ing CS50.
>> ROB BOWDEN: Bine, așa acest lucru pe partea stângă,
sperăm că le-ați văzut-o înainte.
Dacă nu pentru că descarcati-l pentru tine,
ar fi văzut în curs.
Deci, aceasta este aparatul CS50, și el a făcut o oarecum de o descriere a acesteia
în curs.
Dar de fapt e doar tu se execută o exploatare
sistemul de operare în ta sistem, astfel încât să vă putem oferi
programe, fără a fi nevoie să vă faceți griji, oh este aceasta
va lucra atât pe Windows și Mac, sau dacă unii dintre voi
sunt deja folosind Linux, Linux.
E doar ar trebui să fie un joc comun
câmp astfel încât toată lumea are același mediu exact.
>> Deci, dacă nu aveți descărcat deja acest lucru,
trebuie să-l descărcați, pentru că ești avea nevoie de el pentru setul de problemă.
Și este de două gigabyte descarcati, așa că ar putea dura ceva timp.
Pe Harvard că va merge repede.
Aparat așa CS50.
>> Acum, la început, vom vorbim despre doar o adunatura de linie de comandă
lucruri, și astfel prin faptul că, vreau să spun de lucru în acest mediu ceva mai mult de aici.
Și observați toate lucrurile Eu spun chiar aici, chiar acum
sunt de gând să lucreze, dacă ești în interiorul un terminal în interiorul aparatului,
sau dacă sunteți în interiorul fereastra terminalului gedit
în interiorul aparatului.
Deci, aceste medii sunt identice.
>> Dar am de gând să merg un al treilea traseu.
Și observați jos aici puțin adresă IP aici.
Deci, nu trebuie să face acest lucru, dar acest IP
address-- acum dacă Eu-- cu excepția este blocat de acest lucru.
OK, astfel încât adresa IP peste într-un terminal
here-- astfel încât acest terminal peste aici este un terminal în Mac-ul meu.
Deci, acest lucru este în nici un fel în prezent asociat cu aparatul deloc.
Și dacă sunteți pe Windows, atunci ești Va trebui să descărcați ceva
în mod special pentru acest lucru, în special, oamenii au tendinta de a utiliza Putty, P-U-T-T-Y.
>> Deci, ce am de gând să fac este de tip SSH și apoi că adresa IP.
Ei bine, jharvard la acea adresa IP.
Așa 192.168.24.220.
Acest mesaj înfricoșător, ignora-l.
Trebuie doar să tastați da.
Acest lucru este CS50 într-o cutie.
Se cere parola.
>> Și așa într-o mulțime de aceste contexte în cazul în care se cere parola, [inaudibil].
Avem o mulțime de întrebări în cazul în care se spune că nu este de fapt tastarea.
Nu te arata caracterele parola pe măsură ce tastați, dacă ceva,
pentru o caracteristică de securitate, pentru că în cazul în care cineva este în căutarea peste umăr
și văd star star stea stea, atunci ei
știu că parola este de patru caractere.
Deci, ideea este că va cere te pentru parola, de tip.
Nu va pentru a arăta tu personajele,
dar este de fapt de a le accepta.
În acest caz, de fiecare dată când vezi vreodată un prompt de parolă
care se ocupă cu aparatul, Parola va fi roșu.
Așa Crimson.
>> Și acum, aici, în interiorul acestui fereastră care este în Mac-ul meu,
Sunt, practic, având în aceeași părere exact
ca în interiorul unui terminal în aparat.
Deci, nu trebuie să faci asta.
Puteți face tot ce ai doresc în interiorul aparatului.
N-am făcut aproape de fapt nimic în aparat.
Aproape am reduce la minimum întotdeauna că și acum Sunt SSH de lucru în aparat.
>> În orice caz, dacă au un calculator mai lent,
s-ar putea observa o diferenta.
Fac acest lucru pentru că-mi place această fereastră terminal.
Ea are unele caracteristici, cum ar fi Eu pot împărți fereastra,
iar acum pot SSH la prin aparatul.
Am doi SSH se întâmplă dintr-o dată.
În cazul în care computerul este deosebit de lent și lucrați în aparat,
și îți dai seama acest lucru este într-adevăr laggy, indiferent de.
Tinde să fie mult mai rapid daca esti SSH-ed în.
Dar altfel se poate lucra, fie un fel.
>> Audiența: Ce SSH înseamnă?
>> ROB BOWDEN: scoici Secure, ceva de genul asta?
Ce înseamnă SSH?
GABRIEL: coajă Secure.
ALLISON: E coajă doar securizat.
ROB BOWDEN: coajă Secure.
Este un protocol care Tu-- e un protocol securizat, așa criptate.
Oamenii nu pot spiona rețea și vezi ce spui la nimic
ești SSH-ed a.
Și, de fapt, în Olden de zile de la CS50, astfel încât în ​​anul 2009
atunci când am fost un student în anul întâi, modul în care ai lucrat pe seturi de probleme CS50,
Tu ai fost SSH-ed la câteva servere pe care le-a dat acces la,
și ai lucrat pe acolo.
Deci, nu ai avea această aparat grafic.
Nu ai avut gedit.
Tu nu au avut toate aceste lucruri pe care ai putea vizuală pentru punct și faceți clic.
Ai avut de a lucra în această interfață.
Prefer să lucrez în această interfață.
Deci, o parte din ceea ce vom pentru a merge la peste chiar acum
sunt o grămadă de Comenzi că ar trebui
începe să se familiarizeze cu ca te duci de-a lungul în curs.
Și sincer, odată ce ați te obișnuiești cu ei,
este atât de mult mai rapid la lucrează în acest mediu
decât este de a lucra cu căutare, glisare și făcând clic pe lucruri.
>> Deci, aici suntem.
Acum am doar SSH-ed în, și așa implicit ai location--
a văzut unele dintre aceste comenzi din clasa, dar vom trece peste toate din nou.
Locația implicită suntem in este directorul acasă.
Și director, doar un alt cuvânt pentru dosar.
Deci, suntem în directorul home.
Tastați ls, lista de fișiere în acest director.
Evident am creat un blah.c mai devreme.
Deci, avem un director desktop.
Ai observat evidențierea sintaxei?
Evidențierea albastru deschis indică un director și albul drept
indică doar un fișier simplu.
Deci nu vor fi alte culori pe care le vedeți.
Un fișier executabil este, probabil, va a fi verde sau ceva de genul asta.
OK, deci suntem în directorul home.
>> Acum, dacă eu vreau să merg într-un alt director, cd este comanda vreau.
Așa că schimbă director, și apoi treci numele directorului
pe care doriti sa mergeti in.
Deci, aici avem patru opțiuni.
Pot intra în descărcări, iar acum vom vedea aici și-a actualizat acest paranteză
să spun că sunt în ~ / descărcări.
>> Deci, ce este tilda?
E o prescurtare pentru directorul tau de casa.
Deci, aproape tot ceea ce faci este de gând să fie cu privire la directorul tau de casa,
și cu handicap este doar o comandă Eu folosesc o dată într-un an, care
doar imprimă directorul curent.
Și așa veți vedea aici că ~ / Descărcări rezolvă într-adevăr
la / home / jharvard / descărcări.
Deci, / home / jharvard este directorul meu acasă.
>> Deci, putem cd dot dot.
Acum punct punct este un director special care întotdeauna se referă la un director în sus.
Deci, dacă eu sunt în ~ / descărcări, apoi cd dot punct este de gând să-mi aducă la tilda.
Ce credem cd punct punct este de gând să-mi aducă acum?
O să-mi aducă la / home.
Deci, tilda de director de lucru de imprimare, Sunt acum / home / jharvard.
un director de la faptul că, acum se spune aici / home.
>> Acum, cd punct punct.
Acum sunt în directorul rădăcină, și nu se poate face din nou.
Vei rămâne doar în Director rădăcină pentru totdeauna.
Directorul rădăcină are o grămadă de lucruri pe care, dacă doriți să se uite în,
poți.
De exemplu, dacă mă duc în bin, care conține
toate aceste binare, cum ar fi ls, și CD, și toate aceste lucruri.
Deci, aceste comenzi trebuie să există undeva în sistem,
și este în directorul / bin.
Dar aproape tot ceea ce faci este va fi de la directorul tau de casa.
Și cd fără nici un fel de argumente, ai putea spune cd ~, nu trebuie să.
cd este de gând să vă aducă înapoi la directorul tau de casa.
>> Un ultim unul.
cd - este de gând să vă aducă înapoi la ultima directorul care ai fost în.
Așa că am cd'd de două ori la rând, așa meu Ultima director a fost directorul de acasă.
Dacă mă duc să reducă bin, iar acum Să mergem în sus și în utilizare.
Cota de utilizator.
Să mergem la cota de utilizator.
Acum sunt acum în acțiune utilizator.
CD -, înapoi în bin.
Deci, aceasta devine deosebit de utile atunci când have-- și că va comuta.
Deci, cota de utilizator, înapoi bin, cota de bin.
>> Deci, aceasta devine util.
Ați putea găsi te având în mulți, multe, multe directoare imbricate.
Și tu vrei să faci ceva foarte repede într-un director superior.
Te duci la acel director, face modificările și chestii de genul asta,
iar acum vrei să mergi înapoi de unde ai fost.
cd -.
Sunt mereu frustrat atunci când se întâmplă să merg
pentru că directorul I a vrut să facă muncă în.
Intotdeauna mi-am primi frustrat atunci când am făcut- o în două etape în loc de o singură etapă,
pentru că asta înseamnă că cd - se întâmplă pentru a aduce în acea locație intermediar
în loc de unde vreau să merg.
>> Deci, vedem toate fișierele listă.
Știm cum să obțineți în jurul valorii de până acum.
Deci, acum hai sa vorbim despre editarea fișierelor.
Deci, în acest curs, ești aproape întotdeauna de așteptat să utilizeze gedit.
Dacă doriți, puteți lua următorul pas și începe învățarea unui text linie de comandă
editor.
Deci, există diverse opțiuni.
>> Și cele care sunt, probabil, O să fie relevante pentru tine,
avem Nano, Vim, și Emacs.
Deci, Nano este începători linie de comandă editor de text.
Deci, Nano hai să mergem pe blah.c am creat mai devreme.
E doar acest fișier C standard.
Și veți vedea o grămadă de chestii întâmplă în partea de jos a ecranului,
și aparent blah.c conține acest cod C.
>> Deci, în acest editor special, ceea ce se spune la bottom--
acum acest simbol caret, vom vedea acest lucru ^ G, ^ X, ^ O.
Astfel că, în aproape toate context pe care le vezi,
s-ar putea vedea ca simbol caret în alte locuri on-line, de pe Stack Overflow,
ceva de genul asta.
Ea se referă aproape întotdeauna de controlat.
Deci, pentru a ieși vreau să fac De control X. control X, iese.
Și eu pot folosi săgeată meu chei pentru a se deplasa.
Observați că nu pot punct și faceți clic cu ușurință.
Ai nevoie de a utiliza săgeata chei pentru a se deplasa.
Ar putea fi o setare la punct și faceți clic.
>> Dar să facă unele schimbări.
Acum, de control X pentru a merge ieșire.
Se va spune Salvați tampon modificată.
Acum prompte, y pentru da, n pentru nr.
De control C pentru a anula.
Voi spune doar da.
File name pentru a scrie.
Valoarea implicită este fișierul care este deja.
A lovi Enter.
OK.
Acum am doar editat acest fișier, a salvat-o, iar ea este schimbat.
>> Deci, Nano este cea mai ușoară editor de text te obișnuiești.
Alternativele sunt Vim și Emacs.
Acestea sunt editoare de text de nivel superior care au o curbă de învățare foarte abrupt.
Deci, preferința mea personală este Vim.
Și are o mare varietate de opțiuni.
Și odată ce te obișnuiești să-l, nu vei
vreau să merg la orice alt editor de text pentru că pur și simplu
au atât de multe lucruri disponibil pentru tine în aceste,
dar este nevoie de un adevărat lungă perioadă de timp pentru a învăța.
Deci, poate vrei doar pentru a forța te chiar acum să te obișnuiești cu ea,
dar aș spune că merită.
Dar este greu.
>> Și apoi Emacs.
Ma lupt mereu în Emacs, deoarece Știu cum să fac absolut nimic.
Se pare că Emacs nu este în mod implicit instalat pe aparatul.
Probabil, vom adăuga că ca un instalații implicite.
Odată ce ați învăța unul de Vim sau Emacs, nu e
nici un motiv convingător pentru învăța vreodată de altă parte,
dar este un stil complet diferit.
OK așa că e editarea fișierelor de text.
>> Audiența: Dacă ați fost blocat în Vim chiar acum, cum fac we--
>> ROB BOWDEN: Nu sunt mai multe moduri în Vim,
și există întreg tutoriale despre învățare Vim.
Deci, dacă se întâmplă să fie în modul de inserare în ordine
de introducere a textului, pe care le puteți introduceți că în diferite moduri,
dar i este cum ajungi în modul insert.
În sau ieși din orice speciale Modul in care va aflati, doar de evacuare.
Și doar tu bash de evacuare pentru a obține din orice moduri imbricate în dumneavoastră.
Doar OK, acum m-am întors în modul normal.
>> Și astfel în modul normal, un colon.
Tu vezi aceasta apare în partea de jos.
Și apoi q.
Deci, q va părăsi dacă ați efectuat modificări, care Eu---am făcut schimbări?
Am făcut modificări aparent.
Deci, dacă ați efectuat modificări, se va spune puteți pune un semn de exclamare.
Am de gând să-l numesc un bang.
Astfel, puteți pune un ban la doar a ieși fără a face nimic,
sau WQ colon vor salvați și ieșiți.
Deci, w, în general, este de a scrie.
Deci, scrie fișierul.
Pot să scriu și ieși.
Sau ai putea avea doar slam QX, q bang doar
pentru a ieși de acolo, indiferent orice modificări pe care le-ați făcut.
>> Bine, deci acum hai go-- putem crea fișiere.
Să începem eliminarea fișierelor.
Și voi arunca doar într-o singură nouă comandă rapidă, atingeți.
Deci, atingeți foo.
Bar Touch.
Atingeți Baz.
Dacă aș ls, acum vom vedea că există acele fișiere.
Sunt complet gol.
Deci, rămâne este doar un simplu mod de unul, [inaudibil].
Doi, punct de vedere tehnic doar la stat ea, se actualizează marcajele de timp.
Deci, orice fișier pe care îl creați are un marcaj de timp asociat cu ea.
Deci, Baz a fost creat pe 14 septembrie, la 16:21.
Acum este 16:22, așa că, dacă Eu ating din nou Baz, ne-am
a se vedea că Baz a fost cel mai recent modificat la 16:22.
Dar altfel eu aproape niciodată uita-te la marcajele de timp cu privire la fișiere.
Deci, rămâne, aici eu sunt doar folosind pentru a crea unele fișiere rapid.
>> Bine, asa ca acum este rm comandă care ne pasă de aici.
Și putem rm boo.
Spune elimina regulat fișier boo gol.
Și putem de tip Y, iar acum se indeparteaza.
rm Baz.
Scoateți fișier gol regulat Baz și tastați n pentru nr.
Acum nu este eliminat.
Deci, bar și Baz încă mai există.
Foo este plecat.
GABRIEL: Continuă să vorbești.
ROB BOWDEN: Great.
Deci, mesajul enervant aici, scoateți empty-- regulat
ce faci acolo?
Scoateți fișier gol regulat.
Deci, dacă nu vrem să fie deranjat de acest mesaj,
putem arunca în acest -f pavilion, și așa că e forța.
Și acum, dacă eu -f rm, nu e de gând să spune vrei să eliminați acest fișier.
O să o facem.
Și ls, nu văd mai bar acolo.
>> Acum, că este un potențial comandă periculos.
Ea tinde să nu prea rău.
Ne vom întoarce într-un al doilea modul se poate obține cu adevărat periculos.
Și să creeze un director temp.
mkdir, o altă comandă.
Deci, mkdir este o comandă care face un director.
Iar acum prin E vedem această lumină frumoasă albastru subliniat directorul temp.
Nu pot cd în temp.
Și pot mkdir foo.
cd în foo. bar mkdir.
cd în bar.
>> Deci, vom vedea, putem obține cu ușurință în unele cuiburi destul de adânc.
Acum, cum pot elimina un director?
rmdir.
Deci, dacă am încerca direct la rm, cum am făcut cu un fișier obișnuit,
bar rm se va spune nu se poate elimina bar.
Este un director.
E o comandă specială pentru eliminarea directoare, un fel de.
Bar așa rmdir.
Acum bar este plecat.
>> OK, deci rmdir am destul de mult nu folositi niciodata.
Motivul being-- permite acum lui face un bar fișier obișnuit aici.
Boo așa rmdir.
rmdir.
Nu a reușit pentru a elimina foo.
Director nu este gol.
Deci, nu puteți utiliza elimina dir pe o director, care are lucruri in ea.
>> Deci, aveți câteva opțiuni.
Puteți merge în acel director, eliminați tot manual, iar apoi ieși
și rmdir director.
Care, evident, sună enervant.
Ce se întâmplă dacă există mii de de fișiere în acolo?
Ei bine, ai putea rm *.
Vom vorbi despre * într-o secundă.
Aceasta înseamnă de fapt toate lucrurile.
Dar mai bine, r așa rm.
Deci, rm -r-- într-o mulțime de contexte, -r înseamnă recursiv,
care vom vorbi despre ceea ce mijloace recursive în câteva săptămâni.
Dar aceasta înseamnă în esență deplasare totalitatea acestui director
și scoateți tot.
>> Foo -r astfel rm va spune coborî în directorul foo?
Da.
Îndepărtați regulat gol fișier foo / bar?
Da.
Scoateți director foo?
Da.
Deci, acum foo și totul în cadrul acestuia a fost eliminat.
>> Acum, că pot obține deosebit de enervant when-- să atingă 1, apăsați 2, atingeți 3.
Ar putea avea o grămadă de fișiere.
Dacă aș fi vrut, aș putea crea mii de fișiere de aici.
Și foo -r rm se întâmplă a fi destul de enervant.
Da, da, da, da, da, da.
Cu mult mai multe fișiere vă a se vedea cât de repede de mai multe ori
Mi-ar fi de tip da.
Ei bine, tocmai am văzut mai înainte cum putem scăpa de care au nevoie să tastați da, -f.
Deci, mkdir foo foo cd rămâne 1 2 3.
OK, foo -rf așa rm este de gând să elimina orbește foo în întregime.
Nici un prompt.
Nici nimic.
Foo este plecat.
>> Așa că am tendința de a utiliza acest comanda tot timpul.
Acestea fiind spuse, este o comandă foarte periculos,
pentru că dacă fac ceva de genul acest lucru, nu va mai solicita.
Acesta va fi plecat.
Și se întâmplă destul de frecvent, și chiar la cursuri de nivel superior CS.
Uneori, vom vedea ceva în cazul în care cineva
spune că accidental nostru rm rf-ed casa mea director și tot setul meu P este plecat.
Și e devastator, dar nu exista nici coș de gunoi.
Nu e nici nu e nimic pentru tine pentru a prelua.
E doar dus.
Chiar mai rău ar fi ceva de genul rm -rf /.
Așa că ne-am discutat că directorul rădăcină.
Ea deține toate fișierele de pe sistemul dumneavoastră.
Lucrurile au tendința de a obține destul de murdar când scoateți lucruri cum ar fi ls,
și CD-uri, precum și toți cei.
>> Audiența: Care este diferența între rm, rf, și rm *
ROB BOWDEN: Deci rm * -
>> ALLISON: Întrebarea a fost ceea ce este diferență între rm, rf, și rm *.
>> ROB BOWDEN: Deci rm *.
Stea, în general, mijloace toate conținutul acestui director.
Încerc să mă gândesc la alte moduri de a arata stele.
Ei bine, a juca de fapt, în general, înseamnă a se potrivi orice model.
Deci, dacă am un fișier numit dog1, atingeți dog2, atingeți cat1, atingeți cat2.
Deci, ls * 1 se va imprima cat1 și dog1, pentru că stele este umplut
în aplice: cea trebuie să fie acolo, dar stele poate fi pisică sau de câine.
E un wild card.
Asta e cuvântul caut.
Wild card.
Sau aș putea ls câine *, și Am luat pentru a vedea dog1, dog2.
Deci, acestea sunt listarea fișierele care se potrivesc cu acel model special.
Puteți utiliza ls în acest fel.
>> Ls * stele Meciuri nimic.
Deci, o să imprimați toate conținutul acestui director
din moment ce toate se potrivesc.
Nu va pentru a imprima nimic în directoare de nivel superior.
Dacă am un sub-director, foo, și atingeți 1 2 3-- așa că acum, dacă rm * stele,
elimina cat1, cat2, dog1, dog2.
Nu se poate elimina foo.
Este un director.
>> Deci, stele și se extinde la toate fișierele din directorul.
Deci, punct de vedere tehnic rm * este ca și cum spune cat1 rm, cat2, dog1, dog2, foo.
Întrucât -rf rm, tehnic stea ar fi realiza ceea ce ne dorim, dar rm -rf--
dacă am ieși din această director, temp -rf rm,
care va intra în temp și elimina recursiv totul.
>> Deci, stele și este separată prin aceea că acel Se înțelege by-- astfel încât acest lucru
că eu sunt rulează în acest lucru care ma determinat pentru comenzi
și apoi de executare și de a face ei, eu numesc acest cochilia mea.
Și astfel acest shell este ea însăși un program.
Și dacă am vrut, am ar putea rula în / bin / bash.
Shell-ul se numește bash.
Și acum am observat ceva sa schimbat ușor,
si asta pentru ca setările mele pentru coajă sunt oarecum diferite.
>> Dar acum am tehnic de funcționare o coajă în coajă meu original,
și eu pot ieși din asta coajă, și acum M-am întors la cochilie nivel superior.
Scopul de a spune că este-- steaua.
Deci, steaua este ceva de înțeles de către bash.
Deci, rm -rf, pavilion -rf este înțeleasă doar prin rm.
Se știe că, atunci când trece un -rf pe care le
doriți să-l eliminați recursiv toate fișierele fără a întreba.
Vedeta se înțelege ceva de bash că atunci când spui rm *,
bash nu este de gând să spun hei rm *, eliminați stele.
Bash va spune rm * elimina cat1, cat2, dog1, dog2.
Va mod automat pentru a extinde toate fișierele din directorul.
>> Și în mod similar tilda este un alt simbol că bash înțelege.
Când spui cd ~, bash extinde care a directorul tau de casa.
Alte întrebări până acum?
OK așa că vom începe să mergi repede.
>> Finalizare Tab.
Doar să-l arunce acolo.
O mulțime de oameni nu realiza aceasta există.
Deci, dacă am de tip CD dow, I vreau să merg în descărcări.
Nu am nevoie să tastați nloads.
Eu pot lovi doar Tab.
Deci, recunoaște că Dow este un prefix care
nu se potrivește cu nimic altceva în acest director,
asa ca va finaliza asta pentru tine.
Acum pot intra.
>> De asemenea, am face asta recursiv.
Foo așa mkdir.
Să mergem în foo.
bar mkdir.
Deci, merge înapoi la casa mea director, eu pot vedea descărcări.
Acum, fila lovit din nou, merge în mod automat pentru a umple în foo.
E singurul director.
Tab lovind din nou, în mod automat de gând să umple în bar.
Așa că acum sunt în (~ Downloads / foo / bar).
>> Deci, această completare tab, ori de câte ori am ajuns la ore de birou,
și stau peste umărul cuiva,
și se duc rm D-O-W-N-L-O-A-D-S, eu sunt pe moarte.
Tab doar, tab, tab, tab.
Deci, tab folosit cu siguranta.
Și în mod similar și jos, o mulțime de oameni
doar că sa întâmplat nu s-au lovit în sus și în jos.
Va trece prin cea anterioară comenzi, asa ca daca ai fugit pur și simplu ceva,
și doriți să-l rulați din nou, țineți doar până ajungi la ea.
OK.
>> Atât de rapid, alte lucruri.
Să ne întoarcem în temp.
Să crea unele fișiere.
Deci, aici, eu sunt doar O să enumera câteva cuvinte.
câine, pisică, miau.
Să facem câine, pește.
Deci, acum rep este un foarte comenzi utile pe care le
utilizați pentru a căuta de-a lungul fișierele pentru un anumit text,
și tehnic poți să faci cu adevărat expresii complexe pentru o pentru a se potrivi.
>> Deci, aici, dacă am grep, și ce vreau să cauți?
Să spunem că eu sunt în căutarea pentru pisici, și Vreau să caute toate aceste fișiere.
Deci, cum fac toate aceste fișiere?
Star.
Deci, într-un fișier, am pisică.
Eu, probabil, ar putea avea a numit-o ceva mai bine,
pentru că arată ca numerele de linie sau ceva.
Dar într-un fișier am o linie cu pisica.
În fișier doi am o linie cu pisica.
Așa că acum pot privi in ​​interiorul dosar, și a se vedea Oh, da, că fișierul a avut pisică.
Notă dosar trei nu a fost compensată pentru că pisica nu este acolo.
Pot grep pentru miau.
Fișier Numai doi are miau.
>> Deci, acest lucru poate combina, din nou, cu -r, care
așa cum am spus mai înainte înseamnă adesea recursiv.
Și așa că am putea veni aici, grep r pentru orice exemplu de-- să editați
aceasta doar pentru a arunca o pisica acolo.
Deci, grep -r de orice instanță de pisică de-a lungul acest director.
Și se va recursiv cauta subdirectoare.
Deci, în Baz, nu e pisica.
În temp / 2, nu e pisica.
Și în temp / 1 nu e pisica.
Deci, asta e căutarea în fișiere.
>> Acum puteți utiliza, de asemenea, o descoperire.
Și așa a găsi este în mod specific despre Cautati fișiere cu un nume dat.
Așa că hai să facem ceva mai mult.
Să mergem în descărcări.
Atingeți dog1.
Atingeți cat2.
Atingeți cat_dog.
Atingeți catcat.
>> Deci, vreau să găsesc toate fișiere cu câine în numele.
Deci, gasiti, iar pentru cea mai lungă timpul nu mi-am amintit
cum găsi lucrat, până în final, am citește ceva care a făcut-o atât de clar.
Deci, gasiti, recursiv în mod automat.
Nu aveți nevoie să treacă un -r.
Deci, gasiti punct.
Nu am vorbit despre punct încă.
Întrucât dot dot mereu înseamnă un director în sus.
Dot înseamnă întotdeauna directorul curent.
Așa că am putut rm -r punct în același mod în care pot rm -rf *.
În cele din urmă ei realiza acelasi lucru.
rm -rf punct se va îndepărta Întreg directorul curent.
>> OK, pe care nu vreau să fac acolo.
Dar găsi punct.
Deci, recursiv căutare de curent director, iar acum totul
după ce aceasta sunt o grămadă de steaguri pe care le utilizați pentru a exclude lucruri de la revenirea.
Deci, gasiti punct întoarce tot ceea ce Puteți găsi din directorul curent.
Acestea sunt toate fișierele recursiv căutare.
Vom vedea unele dintre cele dintr-un al doilea.
>> Dar, în caz că vă întrebați cum fac că, așa Command K, cel puțin
în terminalul meu în Mac reuseste sa respinga.
De control L, în general, reușește aceasta pentru orice tip de terminal.
Puteți introduce, de asemenea, clar.
Și dacă vreodată te într-o scenario-- ciudat
aceasta mi sa întâmplat un cuplu time-- în cazul în care culorile solicitările dumneavoastră
sunt toate incurcat, sau nu sunt capabili să vadă nimic
fiind introdus atunci când tastați, pentru că uneori cum ar fi culoarea de fundal este setată
la fel ca și culoarea planului frontal iar acum nu poti vedea fonturile.
De resetare este ceva care pur și simplu resetează să fundalul negru implicit,
față alb, sau orice setați-le la.
>> Deci, unde rămăsesem?
Gaseste punct.
Deci, acum totul singur cu această Punct limitează rezultatele
a ceva care se potrivește modelul dat.
Deci, aici vreau să căutare tot cu pisica numele.
N-am nimic.
De ce este că acest caz?
Ei bine, eu sunt doar în căutarea ceva cu exact pisica numele.
Dacă vreau să caute ceva că are ceva de model, și cat--
ghilimelele punct de vedere tehnic nu sunt necesare, dar eu le-aruncat acolo.
Deci, acum se constată că catcat asta e singurul lucru care
are ceva arbitrar model urmat de pisică.
Pot pune pisica *, iar acum găsi catcat, cat_dog, cat2,
pentru că cei care sunt toate lucrurile cu pisica la început, urmat de nimic.
Puteți combina acest lucru.
Dacă doriți să căutați toate fișierele C pe care le ai, s-ar putea face * .c.
Am blah.c aici.
Deci, asta e o fabrică găsi.
Puteti sa cautati.
Ea are o grămadă de steaguri pentru restricții suplimentare.
Și unul pe ele, să spunem -d.
Așa depreciat.
Oh, asta nu e ceea ce vreau.
Nu -d.
Tip d.
Deci, gasiti dot - tip d.
Deci, ceea ce a făcut ca tocmai eu caut pentru toate fișierele din directorul curent
cu un-- d standuri pentru Tipul de director directory--.
Aceasta returnează toate directoarele în directorul curent.
Și de tip F este tot regulat fișiere, toate non-directoare.
Așa că e doar o exemplu de alte modalități în care
pot restricționa căutarea celălalt decât doar numele fișierului.
>> Au trecut 30 de minute.
Încă în desfășurare.
>> ALLISON: Voi briza prin.
Va fi bine.
>> ROB BOWDEN: Deci alte lucruri.
Acum bang, semn al exclamării.
Așa că, în general, means-- bine, să vedem un exemplu.
Astfel! F, ceea ce este că de gând să faci?
Ei bine, se pare a avea repetă descoperire punct de tip f.
Ce zici! G?
Că grep doar pisică r *.
Deci, bang, puteți utiliza pentru a repeta o comandă recent facut.
Deci, dacă scriu! Gre, se va re-run comenzile care au inceput cu cele mai multe gre
recent.
>> Și puteți vedea toate acestea Comenzi cu istoria.
Așa istorie.
Acestea sunt toate Comenzile am dat azi.
Și bine, nu e literalmente limitat la ziua de astazi,
dar am folosit numai acest aparat de astăzi.
E întregime de către dumneavoastră a antecedente de shell bash,
cu excepția faptului că taie la un moment dat.
Audiența: Ce se întâmplă dacă faci Istoria [inaudibil] comandă și o eroare
în rezultatul va imprima the--
>> ROB BOWDEN: Da, în cazul în care există o eroare într-una din aceste commands--
Să spunem, că este un comandă eroare nu a fost găsit.
Încă apare în istorie.
Bine.
Alte întrebări cu privire la nimic?
Așa că e Bang.
>> Acum, comandă într-adevăr util, omule.
Astfel că vă oferă Ghid pentru o anumită comandă.
Deci, haideți să spunem ls om, așa aceasta dă dovadă mă ls.
Listeaza continutul director.
Și acest lucru este în cazul în care eu văd că acolo sunt aceste diferite steaguri care există.
Deci, vom vedea că ls -l există dacă ar fi să citim că. ls -l
dă-mi această listare completă a Director cu care detine dosarul,
dimensiunea fișierului, amprenta de timp modificate.
Deci, ls -a este un alt una care s-ar putea de fapt folosesc oarecum frecvent.
-Al este steagul meu cel mai frecvent acest ls trecut.
>> Deci, -a, observa există o mulțime mai multe fișiere decât doar ls.
ls -a.
Ce e în comun cu toate aceste fișiere?
Ei încep cu un punct.
Deci, aceasta este o convenție în Linux, care fișierele care încep cu un punct sunt ascunse.
Deci, aceasta înseamnă pur și simplu că Când ne-am doar ls drepte,
sau suntem în căutarea acestui director utilizând echivalentul finder, sau Windows
Explorer echivalent, pe care le Nu vreau să văd aceste fișiere dot.
Ei poluează doar punctul de vedere al lucrurilor.
Deci, ele sunt ascunse dacă nu în mod special
le solicită cu ceva de genul -a.
Deci, eu pot CD în .local, și văd care care este ea însăși un director cu
un director partajat, și aplicații, și bla bla bla.
Deci, dot, fisiere ei doar ascunse.
>> OK, deci altele importante.
Am un cuplu pot sări.
Să real, vorbesc repede despre lucrurile fișier de redirecționare.
Deci, există o serie întreagă complex de lucruri pe care le puteți face cu acestea,
ci doar să-i văd, să zicem, ecou.
O altă comandă.
Comandă într-adevăr prost.
Tot ce face este de imprimare ceea ce am spus la.
Deci, ecou salut.
Este doar un ecou salut pe ecran.
Bună ziua lume.
Ecouri salut lume.
>> Deci, o comandă sau o simbol că bash înțelege
este mai mare de acest simbol, și că este de ieșire într-un simbol fișier.
Deci, dacă am ieșire asta foo, există acum un fișier
numit foo, în interiorul care este salut lume.
Astfel observa că atunci când am ecou Suntem pe punctul de țeavă lume în foo,
nu a ecou salut lume.
În schimb, a fost pus în fișier foo.
Și o altă comandă doar să-l arunce la tine, cat.
Asta-i o modalitate ușoară de doar complet lista conținutul fișierului
așa că nu trebuie să deschideți un editor de text pentru ao vizualiza.
Astfel încât conținutul de fișier foo sunt hello world.
Și aș putea pisică blah.c, conținutul este aceasta.
>> Din nou, acestea sunt comenzi care, nu fac aștepta aveți-le pe toate memorat.
Ideea este le-ai văzut.
Poate că lucrați la ceva, și tu ești
ca și cum m-am săturat de a deschide acest fișier.
Aș vrea să pot privi doar la conținutul foarte repede.
Ai putea face asta, atunci privi înapoi și spune oh I
amintesc ceva de genul că există, și e pisica.
>> Astfel că este de gând să-un fișier.
Acum, nu există cu adevărat nici bun exemplu de citire dintr-un fișier încă.
Ce-i ceva care să ceva de la standard?
Orice comandă simplu Linux?
Când vom ajunge la ea, într-un cuplu săptămâna toate piece-- bine,
în această săptămână aveți o piesă în cazul în care începe să luați de intrare de la utilizator.
Și așa, de obicei, ce tastați că de intrare de la tastatura.
În loc să tastați care de intrare de la tastatura,
în schimb poți țeavă într dintr-un fișier astfel încât atunci când faci Mario, ./mario,
țeavă de orice fișier dat, și care va rula programul mario.
Nu așteaptă de intrare la tastatura, în schimb e
doar de gând să citiți linii din fișierul foo.
>> Deci, mai mare decât foo-l pune în fișierul foo, și mai puțin de alim
ia lucruri din dosar foo și folosește care ca intrare la acest program.
Și doar să-l văd, am putea, de asemenea, ecou foo bar Baz, și apoi în loc de una
mai mare decât, să facem două în foo.
Ce are asta face?
Pur și simplu adaugă la dosar.
Deci, în loc să observați dacă eu ecou bla în foo și apoi pisică foo, e doar bla.
Așa că, atunci când ieșire într-un fișier ea, rescrie complet acel fișier.
Dacă doriți doar să adăugați, dublu [? greder. ?]
>> Și ultima este țeavă.
Țeavă devine mult mai complicată, în cazul în care este nevoie de ieșire de o singură comandă
și se hraneste in urmatoarea comanda.
Deci, ceva comun, istorie.
Așa că, uf, nu vreau să se uite la asta.
Arătați-mi toate comenzile din istoria mea unde am grep-ed pentru ceva.
Nu, e confuz.
Arătați-mi toate comenzile în cazul în care mi se pare.
Toate găsi comenzile am fugit vreodată.
>> Așa istorie.
Acum ieșiri istorie pentru a ecran această listă de comenzi,
dar nu vreau să ieșire se la ecranul.
În schimb am de gând să-l țeavă în grep.
Deci, haideți să grep pentru toate instanțele de descoperire.
Deci, acum, în loc să grep intrare, în loc de--
grep este capabil să se ocupe ca input-- suntem folosind grep ușor diferit aici.
Deci, în loc de a tasta pe lista lucruri ne-am dorit pentru a căuta
și a zis: grep este de a lua ca intrare.
Deci, dacă eu nu găsesc doar grep, aceasta așteaptă pentru mine să tastați lucruri.
Deci, pisica salut găsi.
Buna ziua.
Găsi.
Observați de fiecare dată când tastați găsi se recunoaște faptul că am scris descoperire.
Deci, în loc de aceasta, va Fișierele de căutare pentru descoperire.
>> Deci, istoria este acum de gând să ieșire o listă cu toate comenzile.
Suntem inscrie că producția, și noi te alimentandu-l la grep,
și așa se scuipa toate cazurile de descoperire.
Motivul pentru care am spus că ar fi confuz este dacă Eu-- este încă confuz.
Dacă aș grep pentru grep.
Observă că e destul de mult mereu arătând comanda Tocmai am
primeste pentru că comandă în sine are grep interiorul acestuia.
>> OK, deci orice întrebări cu privire la ceva?
Și o voi transfera la peste acest moment.
Sperăm că acest lucru este un frumos imagine de ansamblu asupra tuturor comenzilor
care nu aveți nevoie pentru a avea memorat, dar acestea se completează până
un solid de 95% din ceea ce am face la linia de comandă.
De asemenea, ține cont de faptul că linia de comandă în sine, bash este un limbaj de programare,
si asa ca atunci cand ajungi la el, ar putea dori să facă lucruri cu adevărat complexe.
Și deci are lucruri cum ar fi bucle, și FI, precum și toți cei
care ai de gând să te obișnuiești cu limbaje de programare.
Dar asta este dincolo de domeniul de aplicare al acestei secțiuni.
OK, deci nici o întrebare?
ALLISON: Nici unul?
GABRIEL: Ai de gând sa--
ALLISON: Pot să o fac pe a mea, dacă doriți.
Putem vedea ce se întâmplă.
ROB BOWDEN: Off la Allison.
ALLISON: Woo.
Ești un act greu de urmat, Rob.
Vrei să comutați cu tine?
Sau ai, OK.
Am de gând să încerc și nu destul de fi la fel de lungă durată acolo.
Să vedem dacă această voință lucra așa cum doriți.
Poate?
Haha!
Da.
>> Deci, eu sunt doar de gând să meargă foarte repede prin variabile, bucle, condiționale,
și un pic de compilator.
Dacă aveți întrebări la orice moment, vă rog să mă opresc.
Tipii ăștia mă va reaminti să repet întrebarea dumneavoastră în cazul în care am uitat,
dar nu trebuie să fie prea rău.
>> Deci, variabile, da.
Nu avem nici unul dintre dumneavoastră Piese răzuibile aici.
Sunt sigur că majoritatea dintre voi, dacă ai avut un fel de joc
pe care ați creat cu Scratch, ai avut pentru a urmări ceva de genul scor,
sau timp, sau ceva de genul asta.
Astfel, cei portocaliu strălucitor piese pe care le vedem acolo
sunt doar sub formă de Scratch variabile, și veți siguranta
fie folosind variabile de-a lungul programele.
Dacă nu sunteți, nu sunt într-adevăr sigur ce faci.
>> Dar oricum, mare lucru, definirea variabilelor.
Cu C fiecare variabilă are pentru a avea un tip declarat,
așa că am dat o foarte una generală în partea de sus.
Deci, veți avea dumneavoastră tipul și apoi orice
vă decideți pentru a apela variabila.
Deci, în acest caz, tip în lista de variabile.
>> Avem trei exemple.
Char de unele de calitate, de un A, care este ceea
Sunt sigur că toți vrem pentru a obține în această clasă.
Puteți defini mai multe variabile pe o singură linie
atâta timp cât acestea sunt toate de același tip, care este a doua exemplul nostru acolo
în cazul în care aveți trei variabile, x, y și z.
Sunt toate flotoare.
Și apoi puteți, de asemenea, în acest ultim exemplu cu scorul int și numărul
de echipe, puteți le-a inițializa chiar acolo.
>> Deci, în exemplul de mijloc în care ne-am Trebuie doar float de x, y și z,
cei care nu sunt inițializate încă.
Ei nu au nici o valoare.
Sau ei au valori de gunoi.
Și dacă încerci și să le utilizeze, compilatorul va striga la tine.
Trebuie să declare atât și inițializa variabilele.
Deci, în acest ultim este de ce facem amândoi.
Suntem de declarare a variabilelor de scor și numărul de echipe,
iar noi suntem initializarea lor, oferindu- le valorile lor inițiale de 7 și 4
respectiv.
Rece.
Toată lumea bine?
Minunat.
>> OK, deci unele convenții.
Dacă voi ați citit prin stilul de 50, acestea
sunt doar lucruri pe care le-ar dori pentru să pună în aplicare în stilul tău.
Nume atât de semnificative.
Dacă începeți de asteptare lucruri doar x, y și z, în special
cum intri în mai lunga programe, ești
probabil, va confunda tine și să fie
ca ceea ce este această variabilă referindu-se la.
Nu am nici o idee ce înseamnă asta.
>> Deci, dacă este menit să dețină un scor, numesc în plasă.
Dacă este menit să dețină unele răspuns sau ca rezultat, dau un nume de genul asta.
Pentru bucle, pe care le va intra in slide-ul urmator,
variabile scrisoare sunt bine.
ROB BOWDEN: I, J, K și sunt doar convenții pentru pentru bucle
că toată lumea le așteaptă să fie numit i, j, și k.
Puteți apela them-- văd rând coloană sau apel rând, uneori,
pentru două bucle imbricate, și care este, de asemenea, un fel de standard.
Dar i și j este pe deplin elucidat.
>> ALLISON: Da, am și j ești cu totul în regulă.
Pentru claritate ca în unele seturi P,
s-ar putea face sens pentru a avea mai mult lucruri descriptive acolo doar
pentru a ține evidența ea.
Dar cred că i, j, k și cred că marea majoritate dintre noi toți utilizare.
>> ROB BOWDEN: Cu aceste convenții, astfel încât stilul este important.
Este una dintre cele patru axe pe care ești clasificate,
și este atât de ușor pentru a merge peste P-ul stabilit, la sfârșitul și asigurați-vă că
că nu există greșeli stilistice.
Deci, asigurați-vă că sunteți tab corect.
Asigurați-vă că variabilele sunt numite.
Lasă unele comentarii.
Este foarte ușor pentru a obține aceste puncte.
Nu trebuie să ne gândim la nimic în scopul de a obține aceste puncte.
Nu trebuie să dau nimic.
E doar ceea ce face arata destul.
>> ALLISON: De fapt, ne-am au stil 50, care
vă va spune unde te pui în sus dacă te pui pe stil
și vă va spune exact ceea ce ai Trebuie să se stabilească și modul în care trebuie să-l repara.
Este, de asemenea, doar bine să menționăm asta e politica de curs
că, dacă sunteți la birou ore și codul dvs. este o mizerie,
putem refuza să ajute dvs. până când se pare mai frumos.
Deci, începe dreaptă, păstra stil consistent,
te, de asemenea, doar de gând să facă viețile voastre un întreg mult mai ușor atunci când
sunteți încercarea de a trece prin depanare.
Dacă încercați să dau seama în cazul în care vă lipsește o acoladă
și ei sunt peste tot, ești doar face viața ta mai greu.
Astfel încât să fie în concordanță cu stil.
Îți promit că va face viața mai ușoară.
Va face viața mai ușoară.
Toată lumea va fi mult mai fericit.
Și asta e ceea ce vrei.
GABRIEL: Grad ta va fi mai mare.
ALLISON: Da, și gradul dumneavoastră.
Dacă TF ta e ca tine, tinde să fie favorabil.
Bine, și apoi doar al doilea punct aici.
Initializations consistente.
Deci, așa cum am văzut, puteți declara și inițializa lucruri.
Variabile multiple pe aceeași linie.
Un lucru ne-ar nu vă place să faci este să declare unele variabile
și nu le inițializa pe aceeași line pe care le inițializarea alții.
>> Deci, în cazul în care a făcut nici un fel de sens,
avem exemplul aici în cazul în care suntem de declarare a int
în variabilele de sferturi Dimes și mărunțiș,
dar trimestre și mărunțiș nu au nici o valoare inițială.
Noi nu le-am inițializat, dar chiar în mijloc acolo
am deja inițializate Dimes la 0.
Deci, fie face sferturi, Dimes, mărunțiș.
Sau sferturi egale cu 0.
Dimes egal cu 0.
Mărunțiș egală cu 0, sau orice aceste valori initiale sunt.
>> Mare lucru cu stil, fie consecvente.
Dacă aveți dubii, să fie coerente.
Dar urmați ghidul nostru de stil prea.
Rece.
Toată lumea bine acolo?
>> Audiența: Unde e ghidul de stil?
ALLISON: Ghidul de stil este on-- ceea ce este site-ul?
>> GABRIEL: Cred că e manual.cs50.net/--
ALLISON: Stil?
>> GABRIEL: Style.
Da.
>> ALLISON: Da.
Deci, întrebarea, în cazul în care este stilul de 50.
manual.cs50.net/style.
Da?
>> Audiența: Dacă suntem de definire variabile, este în regulă
dacă ne-am pus ca [inaudibil] ca scor int și apoi int poartă.
Deci, ați spune că acum ne-am Trebuie să-i definească împreună?
>> ALLISON: Deci întrebarea, ar trebui aveți cod redundant
atunci când sunt definitorii variabile, cum ar fi scor int și
pe următoarea linie int joc?
ROB BOWDEN: Nu sunt sigur cazurile în care codul redundant este rău.
Nu aș lua în considerare codul redundant.
N-am declara aproape multiplu variabile pe aceeași linie vreodată.
Și dacă ceva, este pentru că Eu de obicei lăsa un fel de comentariu
explica ce variabila este pentru.
Așa că voi spune scor int slash slash.
Ține evidența indiferent.
În total slash slash.
Deci, este mult mai grosolană în acest fel sa-i pune pe aceeași linie.
Eu doar nu le-a pus pe aceeași linie.
>> ALLISON: Mă simt ca și cum ar preferință personală în acest moment.
>> Audiența: Asta merge pentru pentru bucle și alte chestii prea?
ROB BOWDEN: Ca în interiorul?
La fel ca int i este egal cu 0 virgulă lungime este egală cu ceva?
Că nu ai de ales.
Cu bucle pentru inițializarea part-- deci ați putea fi văzut numai
int i este egal cu 0 și virgulă i mai puțin decât orice punct și virgulă i, plus, plus.
Că int i este egal cu 0, punct de vedere tehnic puteți, de asemenea
face ceea ce am văzut mai înainte cu sintaxa virgulă.
int i este egal cu 0 virgulă j este egal cu 3 virgulă k este egal cu 5.
Nu aveți o alegere de a împărți că până în mai multe rânduri,
și asta e standard.
Văzându-l acolo este bine.
ALLISON: Awesome.
Ei bine, segue convenabil în bucle.
Deci da, aici avem câteva exemple de bucle care voi a văzut în Scratch.
Și, desigur, toate acestea doar poate fi recreat în C.
Și ei practic vă permite să repete unele secțiuni de cod
până la o anumită condiție este îndeplinită, pe care le vom
intra in dreapta dupa ce vorbesc despre buclele cu condiționale.
>> Deci, avem trei tipuri principale.
Pentru, în timp ce, și de a face în timp ce, ceea ce vom merge tot prin chiar acum.
Deci, în primul rând unul este pentru bucle.
Deci, pentru unii stare, executa acest bloc de cod.
Avem acest mic misto diagrama aici în partea de jos.
Dar, practic ai în pentru dumneavoastră, ca primă linie,
ai de gând să inițializa variabilele.
>> Deci, ca am vorbit despre, i este egal cu 0 sau i este egal cu 10.
Orice ai nevoie ca variabilă a fi e
va fi inițializat acolo, a declarat si initializat la o anumită valoare.
Deci, atunci avem o Stare ce se intampla
să fie verificarea noastră variabilă împotriva ceva.
Deci, în cazul în cazul tipic în care poate vrei această secțiune de cod
să execute cinci ori.
Deci, vom avea int i este egal cu 0, și noi vrei sa fie, atunci când i este mai mică de 5.
Deci, această condiție este doar O să verificați de fiecare dată.
În cazul în care această condiție evaluează la true, este
de gând să ruleze cod, care este exact ce această diagramă mic este afișat.
>> Și așa îl execută.
Se actualizează o variabilă, care este ceea ce vedem
în ultima parte a noastră pentru buclă de inițializare acolo.
Deci, o să continui să faci asta până la această condiție nu este îndeplinită,
și apoi va ieși bucla si continua
se deplasează pe cu restul de programul tău.
Toată lumea bine acolo?
Rece.
>> Deci, aici e un exemplu, foarte asemănător la ceva doar am vorbit despre.
Deci, vrem doar să le imprimați acest lucru este CS50 10 ori.
Deci, vedeți, aici avem pentru noastră, și apoi ne-am
inițializa variabila i să fie egal cu 0.
Stare nostru este de verificare că este mai mic de 10.
Deci, evaluează la adevărat atunci când am primul începe, iar apoi actualizează variabila nostru
de fiecare dată când se execută de fapt și printuri out acest lucru este CS50.
Și se va termina după 10 de ori.
Rece.
>> Deci, în timp ce buclele sunt de până următoare.
Și, după cum vedeți aici, tocmai am unii în timp ce această întrebare condition--?
>> Audiența: Cum pot sări de fapt, doar nu un singur număr,
dar două numere [inaudibil] i, plus, plus, plus?
>> ALLISON: Deci, întrebarea a fost cum puteți actualizați variabila cu mai mult de un
la un moment dat.
Deci, eu, plus, plus va modificare de unul de fiecare dată.
Dacă ați fi dorit pentru actualizare de doi, ai putea face i este egal cu plus 2.
>> ROB BOWDEN: Ai văzut plus este egal în curs încă?
>> Audiența: [inaudibil].
>> ALLISON: Este eficient același lucru ca i egal i plus 2.
Deci, o să-l ia și actualizare prin două de fiecare dată.
Plus echivalează este doar ceva numim zahăr sintactic.
ROB BOWDEN: Da, cei care există pentru destul de mult toți operatorii aritmetici.
Ori asa ca am egală cu ar dubla numărul.
j divide egal 3 este la fel cum j este egal cu j împărțit la 3.
>> ALLISON: Or minus este egal cu 2 ar fi decrementa i de două de fiecare dată.
ROB BOWDEN: Chiar egali Ministerului Apărării.
Nu ati vazut operatori la nivel de bit, dar caret egal și ampersand egal,
toți cei exista.
>> ALLISON: Deci, o mulțime de ori, în special împreună cu prima pereche de seturi P,
veți fi probabil incrementare de unul, așa că am, plus, plus, plus, plus j
sunt toate lucrurile ai de gând a fi în mod tipic folosind.
Dar această condiție actualizare este complet sub controlul tău.
Puteți să-l actualizați, prin orice creșteri sau în orice mod a vă decide să.
Poate tu chiar vrei sa fie un număr aleatoriu uneori.
Dar da, există o mulțime de lucruri pe care le puteți face cu asta.
Tu nu ești limitat la i, plus, plus.
>> ROB BOWDEN: Doar așa vei Știu că există, de asemenea,
există într-o altă formă, plus plus i.
Deci, dacă sunteți vreodată căutarea online și se întâmplă pentru a vedea, plus, plus i,
destul de mult înseamnă același lucru.
ALLISON: cool.
Bun?
Minunat.
Deci, în timp ce bucle.
Foarte asemănătoare.
Ai niște condiții.
Principalul lucru pentru a observa aici este loc de a avea
trei părți diferite să înființeze, avem unul.
Tocmai am niște condiții care fiind verificat.
Și în același mod, atâta timp cât această condiție se evaluează la true,
codul este de gând să ruleze.
Și dacă e falsă, ea se va termina, mutare
pe următoarea parte a programului dumneavoastră.
Deci, aceasta este un fel de like-- ceea ce este un bun exemplu de verificare
pentru a putea condiții normale?
GABRIEL: În timp ce adevărat.
ALLISON: Ai putea face în timp ce adevărat.
Ei bine, 1 este egal cu 1.
>> ROB BOWDEN: Puteți face o while-- doar loc de a folosi o buclă,
puteți codul întotdeauna o pentru buclă într-o buclă în timp ce,
așa că am mai mare decât 0 sau în timp ce am mai puțin de 10.
>> ALLISON: Awesome.
Și apoi ne-am face în timp ce buclele, care este mare pentru validare de utilizare, în cazul în care
doriți să obțineți ceva de la dvs. de utilizator, a se vedea dacă e valabil,
si apoi continua de acolo.
Deci, unul dintre lucrurile să știe este cu un face în timp ce este asta o să execute,
iar apoi se va re-executa în cazul în care această condiție este îndeplinită.
>> Deci, probabil, cel mai bun mod de a face acest lucru este doar pentru a vedea un exemplu aici.
Deci, după cum am menționat, de folosire Validarea este într-adevăr useful--
sau de a face whiles sunt într-adevăr util cu validarea utilizator.
Deci, aceasta este doar de gând de a re-solicita unele utilizator
până când introduceți un număr pozitiv, care ar putea fi utile pentru set P
în această săptămână.
Și astfel, în acest caz, atunci când ne rula inițial acest program,
se va imprima introduceți un număr pozitiv.
O să obține unele de intrare de la utilizator,
și apoi se va verifica că intrarea împotriva condiției
care le-ați stabilit pentru aceasta.
>> Deci, în acest caz, se va verifica.
Se va spune, OK, este de intrare noastră negativă,
sau este 0 sau negativ, care ar fi invalid.
Deci, atunci s-ar re-prompt.
Întrebare?
>> Audiența: Este același lucru atunci ca un în timp ce bucla dacă tocmai ați copiat codul
și a pus-o [inaudibil] în timp ce buclă?
>> ALLISON: Deci, întrebarea a fost ar fi aceasta să fie aceeași ca doar un timp
buclă, dacă ar fi să pur și simplu copiați bucla în timp ce mai sus.
Deci, în acest caz, buclă în timp ce este O să verificați starea întâi.
Deci, în acest caz, dacă am încercat pentru a scrie ca doar o buclă în timp ce,
s-ar spune în timp ce de intrare este mai mică de un.
Dar nu avem o intrare pentru ea.
>> Audiența: Dacă [inaudibil] în timp ce buclă inclusiv acest cod,
dar apoi ai făcut față codul de mai sus bucla in timp ce, de asemenea.
Tocmai ai avut acest cod [Inaudibil] în timp ce buclă.
ALLISON: Ar fi același lucru, da.
Deci, ai putea write-- doar în loc de a avea un da do--.
GABRIEL: Dar asta e mai elegant.
ALLISON: Da, e mai elegant.
Aveți posibilitatea să obțineți în proiectarea și fleacuri, dar da, poți să faci asta în totalitate.
Orice alte intrebari?
OK, rece.
>> Deci, am vorbit foarte mult despre condiții cu toate aceste bucle pe care le avem,
așa că de fapt asistent în Condiții în expresii booleene.
Din nou, voi utiliza în C, astfel încât doar un fel de tranzitia
de mai mult interfață grafică de fapt de codificare.
>> Rece o, atât de mare, în cazul în care.
Practic doar ne permite să introducă o anumită logică în programul nostru și verificare
Condiții sys.
Deci, în acest caz, OK, este n mai mare decât 0?
Da, este, astfel încât să puteți executa acest lucru.
E doar verificarea unele condiție pe care le-am
set, pe care cred că toți suntem confortabil cu verificarea condițiilor.
Rece.
Deci, dacă mai este celălalt ta, vă pot spune OK, dacă acest lucru este adevărat,
face acest lucru în primul rând.
În caz contrar, te vreau să implicit și de a face altceva.
Ca și în acest caz, voi alege fie o număr pozitiv sau un număr negativ.
Ai doar două opțiuni.
Aveți nevoie de ea pentru a executa indiferent de ce intrările dvs. de utilizator.
Astfel încât să puteți spune de bine, este mai mare decât 0?
Rece.
Tipărește un număr pozitiv.
În cazul în care nu este, imprimați un negativ.
Toată lumea bine?
>> Și apoi un lucru să recunoaștem este că, dacă în cazul în care condiția este îndeplinită,
else nu va executa, de asemenea.
Doar una dintre acestea va executa la un moment dat.
Deci, este un compromis.
Tu nu te pentru a avea atât.
Fie avea prima condiție.
Ori avea în cazul în care sau altceva, nu ambele.
Care apoi pot face lucruri chiar mai complicat,
pentru că poți să faci în cazul în care, altceva, și apoi altceva.
Deci, în acest caz, ne vom au trei condiții.
Și din nou, numai unul dintre acestea este O să sfârșesc prin a fi executat.
Deci, s-ar putea fi mirat Ei bine, ce dacă
ceva ce se pot întâlni două dintre acestea.
Poate că indiferent ce introducere îndeplinește atât condiția
căci dacă și else if.
Singurul lucru care va rula
>> ALLISON: De îndată ce constată ceva că îndeplinește condiția pentru care
evaluează la adevărat, asta e ceea ce aceasta va rula și nimic altceva.
Deci, dacă ai avut este acest număr între 0 și 5 pentru o prima dvs.,
sau este acest număr între 3 și 5 pentru else if parte,
și tu de intrare number-- I-am spus 0 și 5 si-- 4.
Se va lovi primul.
O să spun OK, acest număr este cuprins între 0 și 5.
Executa și se lasă.
Acesta nu va lovi această a doua opțiune.
Rece?
Minunat.
>> OK, avem, de asemenea, declarații comutator dacă doriți să obțineți chiar more-- sau rău,
comutator este următorul.
Primesc înainte de mine aici.
Din nou, multiplu în cazul în blocuri în cazul în care așa cum am spus
Este, de îndată ce veți găsi o condiție care este întâlnit și în cazul în care o altfel dacă altceva,
lasă.
Dacă aveți nevoie pentru a verifica mai multe lucruri, ești
de gând să doriți să utilizați acest lucru pentru că se va verifica de fiecare dată aici.
Deci, acest lucru va rula prin intermediul și în cazul în care e mai mare sau egal cu 90,
se va imprima asta.
Și se va desfășura prin intermediul și verifica fiecare dintre acestea.
>> Audiența: Deci, acest lucru ar fi mai mult de buggy [inaudibil].
Ar fi ca și cum această [inaudibil]?
>> ALLISON: Întrebarea este ar fi aceasta buggy sau face acest lucru face ceea ce vrei.
Este într-adevăr depinde de ceea ce ce vrei de la programul tău.
>> Audiența: Vreau să spun ca daca ai pus 90 în.
ALLISON: Dacă ați pus 90--
Audiența: [inaudibil].
GABRIEL: Vei obține două lucruri.
ALLISON: Vei obține două lucruri.
Da, două.
>> ROB BOWDEN: Two?
>> ALLISON: Nu.
>> ROB BOWDEN: Patru.
Dacă ați pus 90, o să spui a primit un A, ai un B, ai o C,
ai un D.
>> Audiența: [inaudibil].
ALLISON: Corect.
Asa ca am depinde de ceea ce vreau de la tine de program.
Uneori trebuie să verifica mai multe lucruri.
Veți obține mult mai adânc în ceea ce design bun este ca te duci mai departe.
Cel mai important lucru pentru realizeaza este faptul că acest
va verifica toate cele patru condiții aici.
Întrucât în ​​cazul în care aceasta ar fi o dacă altcineva dacă altcineva în cazul în care altfel, s-ar lovi ca prim caz,
s-ar imprima ai un A și făcut.
>> ROB BOWDEN: Chiar dacă ne-am a decis să schimbe acest lucru în cazul în care
si mai mare sau egală cu 90, dacă si mai mare sau egală cu 80,
și mai mică sau egală cu 89, dacă n mai mare sau egal cu 70,
și n mai mic sau egal cu 79, astfel că va fi corect.
Că va face ceea ce ne dorim, dar încă verifică fiecare ea.
>> Deci, în timp ce în primul scenariu, dacă ne-am introduceți 90 cu doar dacă altfel dacă altcineva dacă,
și intrăm 90, atunci se va corecta.
Se va verifica primul unul, print ai un A,
skip totul, pentru că a constatat deja unul care funcționează.
Toate cazurile se exclud reciproc bazat pe dacă altcineva dacă altcineva dacă.
Deci, acesta va executa în primul rând, dacă, atunci se face.
Va merge până la capăt.
>> Întrucât, dacă vom schimba acest lucru este ceea ce am fost
spunând cu mai mică sau egală cu 89.
Se va verifica prima.
Va imprima.
Va verifica cea de a doua.
Nu va pentru a imprima.
Verificați treia.
Nu merge pentru a imprima.
Verificați patra.
Acum merge pentru a imprima.
Deci, în acest caz, else if versiune, deoarece aceste cazuri,
se exclud reciproc, este o mai bună utilizare în cazul în care altcineva dacă altcineva dacă,
pentru că va avea mai puține controale ale condițiilor
decât această versiune.
ALLISON: Awesome.
Deci, un alt lucru pe care îl putem faceți este să declaratii de comutare.
Practic o declarație comutator ia în unele variabile,
în acest caz este n, și determină caz ​​în care să execute.
Deci, aceasta este, de asemenea, una în care cazurile tale ar trebui să fie un fel de reciproc exclusive.
Deci, în acest caz, în cazul în care noi avem una, e
O să se potrivească indiferent de faptul că variable-- indiferent de valoarea lui n
este la unul din aceste cazuri, deci 1, 2, sau 3, și imprima linia corespunzătoare.
>> Și apoi dacă observați aici, Avem, de asemenea, un implicit,
care vă puteți gândi de a ca altfel tale.
Deci, dacă vă alege orice alt număr în afară de 1, 2, și 3, în acest caz
este doar de gând pentru a imprima invalid.
Decide când să folosească FI față de dacă elses față de switch-uri se întâmplă
să fie ceva ce voi va a se vedea de proiectare înțelept ca tine începe să scrie
programe mai complicate, și nu exista nici reguli greu și rapid
de când să le folosească.
Este într-adevăr depinde de context ta.
>> ROB BOWDEN: Și doar să-l arunce acolo
deoarece este secțiunea mai confortabil.
Switch-uri, ele tind să be-- deci esti limitat
în numărul de moduri în care le pot folosi, pentru că FI,
condiție poate fi destul de de mult tot ce vrei.
Cu switch-uri din cazuri trebuie să fie numere,
sau tehnic pot fi caractere, dar de caractere, așa cum vom vedea, sunt numere doar.
Așa că trebuie să fie numere, dar switch-uri sunt într-adevăr mai eficiente decât în ​​cazul în care
altfel dacă altcineva dacă, pentru că chiar luând exemplul before-- bine,
exemplul de calitate pare a fi bun.
>> Ei bine, să spunem aici, să facem în schimb acest lucru ca pe o dacă altfel dacă altcineva dacă scenariu.
Deci, dacă n este egal egal cu 1, imprimați ai ales un număr mic.
În cazul în care altcineva dacă n este egal este egal cu 2, ai ales un număr mediu.
Altfel dacă egali este egal cu 3, mare.
Altceva invalid.
>> Deci, haideți să spunem că a fost scenariul nostru.
Deci, haideți să spunem că introduceți 4, astfel încât ne așteptăm invalid.
Modul în care, dacă altfel, dacă altceva în cazul în care abordare este de gând să lucreze este
verifică prima condiție.
Nu e mulțumit.
Deci, vom verifica a doua condiție.
Nu e mulțumit.
Verificați treia condiție.
Nu sunt îndeplinite.
Deci, vom merge la altcineva și imprima invalid.
>> Modul în care lucrările de comutare este compilează jos
în ceea ce vom pentru a apela un tabel de salt.
Principalul idee fiind că atunci când introduceți 4,
se poate merge imediat la valorile implicite.
Ea nu are nevoie să verifice am caz I 1?
Nope nu e asta.
Cazul 2?
Nope.
Cazul 3?
Nope.
Implicit.
OK, aceasta trebuie să fie în cazul în care I doresc, iar apoi executa asta.
Nu, sare imediat la valorile implicite.
Sau intru 2, e imediat de gând să meargă la 2
fără a fi nevoie să treacă prin caz 1.
>> Deci, în acest fel, realist în zilele noastre e
nu atât de mult de un câștig de eficiență.
De obicei, calculatoarele sunt destul de rapid, iar asta nu e frumoasa.
Dar este adevărat că switch-uri sunt mai rapide.
Dacă sunteți într-adevăr încerci pentru a optimiza, utilizați un comutator.
>> ALLISON: cool.
Și apoi ne-am operatorului ternar.
Asa ca stiu am menționat mai devreme cuvântul de zahăr sintactic.
Deci e doar lucruri care fac codul mult mai concis.
Deci, aceasta este una dintre acele cazuri.
>> Deci, operatorul ternar este semn de întrebare colon așa cum vom vedea în șir linie
s este egal cu n mai mare de 100 semn de întrebare scăzut ridicat de colon.
Deci, practic cum functioneaza acest lucru este e n mai mare decât 100 este o condiție.
Deci, eu cred că se poate face sens.
E ca și cum pune o întrebare.
Se spune oh, este n mai mare de 100.
Cine știe?
Și dacă se evaluează la adevărat, o să vă dau
primul lucru pe care-i enumerate acolo, ceea ce este mare.
În caz contrar, va da scăzute.
Deci, aceasta este doar o foarte simplu și modalitate eficientă de a face ca o dacă altcineva.
Asta e tot ce acest lucru este.
>> Și dacă ar fi să scrie această ca în cazul în care altfel condiționate,
ar fi dacă n este mai mare 100, întoarce mare.
Altfel, randamentul scăzut.
Aceasta este doar o mult mai mod concis de scris-o.
>> ROB BOWDEN: Deci acest exemplu particular este de fiecare dată când faci ceva
ca aceasta, aceasta este modelul în cazul în care am folosi ternar foarte frecvent.
Deci, nu am vorbit despre domeniul de aplicare încă, dar eu urăsc văd punct și virgulă șir s.
Dacă n mai mare de 100, s egal mare.
Altfel, s egal redus.
Astfel încât model, cele cinci linii de cod literal 100% din timp
pot fi transferate în ceea ce a fost acolo sus cu un ternar.
Deci, ternar, o linie de cod.
FI altceva, cinci.
Asta e un exemplu I punctul out de fiecare dată.
Acest lucru ar fi loc minunat pentru un operator ternar.
E atât de curat.
Dar oamenii au tendința de a nu-l folosească.
>> ALLISON: Ia-o departe Gabe.
>> GABRIEL: Deci, acum voi toți aflat în curs în această săptămână
că totul într-o calculator este binar, nu?
La fel ca lămpile de aici.
Puteți fi fie pornit și oprit.
Și de tot ceea ce, vreau sa spun literalmente totul.
Unele numere și caractere, și siruri de caractere, și chiar codul pe care scrie, atunci când
acesta se compilat pentru mașină cod și chestii de genul asta,
așa că totul se reduce la 0 și 1 ".
>> Și așa că atunci când am de-a face cu numere întregi, care
este ceva care este foarte tehnic simplu, ar trebui să fim capabili să facă lucruri
cum ar fi adăugarea ei, care este probabil unul dintre cele mai simple lucruri
puteți face pentru a două numere întregi, nu?
Deci, adunare și scădere funcționează la fel ca functioneaza in notație zecimală,
cu excepția aici e binar, nu?
Deci, este în baza doi.
Deci, se adaugă 1 plus 1.
Care dă 0, 1 și poartă peste.
Și doar continui sa faci asta, asa ca acum vine mai interesant întrebare.
>> Știm cum să reprezinte toate numere întregi pozitive în calculator,
dar hai să facem acest exercițiu.
Prefă voi sunt toate în 1960 sau ceva încercarea de a crea un calculator,
și va trebui să vină de o modalitate de stocare minus 1,
de exemplu, sau minus orice întreg pentru care contează.
Cum ai face asta?
Orice idei?
Doar arunca ceva la mine.
Da?
>> Audiența: [inaudibil] desemnează un special în cazul în care dumneavoastră [inaudibil].
>> GABRIEL: Puteți desemna un bit special, care va fi 0 sau 1.
Să spunem că o daca este pozitiv și 0 dacă este negativ.
Apoi restul de biți este doar pentru a stoca numărul.
Rece.
Deci, asta este o idee foarte bună.
Avem, eu nu știu, 200.
Și dacă primul bit este pornit, atunci e plus 200.
Dacă este oprit, acesta este de minus 200.
Rece.
>> Există doar un singur mic problemă cu acest lucru,
care este în cazul în care vom încerca să rezuma lucrurile.
Deci, imaginați-vă, avem 11,111 aici, și suntem însumarea acest lucru cu 00,100 orice.
În cazul în care cei doi sunt pozitive, e în regulă.
Dar, apoi, dacă unul dintre le este negativ, cum ar fi
să spunem că acest bit aici este cel care este responsabil
for-- am de gând să fac o separate-- deci asta înseamnă că acest număr aici
este pozitiv.
Acesta înseamnă că această Numărul de aici este negativ, nu?
>> Dar atunci când ești O să le rezuma, tu
nevoie de un if spunând oh dacă acest lucru este 0,
atunci sumă meu va fi ceva diferit, nu?
Deci, există un ușor mod mai inteligent de a face
că, în ceea ce se numește complement față de doi.
Deci, practic ceea ce am faceți este să definim minus 1
pentru a fi un lucru care, dacă am adăuga până la 1 ne dă 0.
Permiteți-mi să repet acest lucru.
Deci, haideți să spunem că asta aici este 1.
Care este lucrul care în mod natural în numere întregi pozitive
adăugat pentru că ne dă 0?
Ce dacă am încerca să-l adăugați la acest număr?
Mergem la have-- OK, deci hai să adăugați.
Vom avea 1 plus 1 este 0, iar apoi își desfășoară peste.
Și apoi vom obține 0 din nou.
Primesc confuz.
Și ai de gând pentru a obține 0 și 0 și 0 și 0 și 0 și 0.
O mulțime de 0 lui.
>> La foarte ultima, nu suntem va fi capabil să-l transporta peste,
pentru că să zicem avem de-a face doar cu un octet, deci numai 8 biți.
Deci, ce computerul face în mod implicit este doar a uitat despre asta [inaudibil],
OK?
Deci, aceasta este ceea ce se numește complement cei doi a.
Noi pur și simplu defini minus 1 să fie lucru aici că dacă adaug că la 1
s-ar da 0.
Și asta e destul de cool pentru că noi nu prea
Trebuie târziu să pună în aplicare un alt tip de sumă
în funcție de care este un negativ sau un număr pozitiv.
Asta face sens?
>> Deci, un lucru pe care o facem aici, în scopul de a converti
între pozitiv și negativ întreg este apoi ne-am răsturna totul,
iar apoi adăugăm 1 la acest număr.
Dacă încercați să-l faci singur pe o bucată de hârtie,
vei vedea că are sens.
Dar dacă iau acest număr aici, aceasta este de cinci.
Deci, dacă am răsturna totul aici, așa 1, 1, 1, 1, 1.
Flip, flip, flip-.
Și apoi m-am adăuga 1 la acesta.
Am de gând să aibă exact minus 5.
OK?
>> Acest tip de are sens, deoarece în cazul în care încercați pentru a rezuma acest lucru cu numărul
că am avut înainte, care asta-- să întoarceți din nou.
Acesta a fost de 101 și o mulțime de 0 lui.
Dacă încercați să adăugați aceste două numere împreună,
ai de gând să aibă exact 0.
OK.
Orice întrebări?
>> Audiența: [inaudibil]
>> GABRIEL: Ce vrei să spui?
>> Audiența: Negativ pentru pozitiv [inaudibil].
>> GABRIEL: Nu, flip- și adăugați 1 mereu.
Da.
OK, deci de caractere codificate de asemenea binare.
Avem tabel ASCII, în timp ce De asemenea, a văzut în curs, nu?
Deci, este de fapt o cartografiere a lucrurilor.
Și aici eu nu pot sublinia suficient că pentru un calculator, o și 65
sunt literalmente același lucru.
Deci, dacă am scrie ceva de genul char c este egal cu o, am putut, în același timp
doar scrie 65 aici, și-l ar fi exact la fel, OK?
Nu e nici un fel de diferență.
>> Noi, de obicei tendința de a pune de caractere in variabile de tip.
Char, nu pentru că sunt, în esență, făcut pentru asta, ci pentru că
de convenție umană.
Dar puteți face pur și simplu cu numere întregi în loc de variabile de tip char,
și vei fi bine.
Singura diferență reală între un char c și un i int
este ca un întreg are patru octeți în mai sisteme, în timp ce un char are un octet.
Sunt, în esență, același lucru în ceea ce privește datele.
Deci, ce se va imprima aici?
Aici suntem imprimarea unei cifre cu ajutorul printf cu un plus de 1, și la fel ca numere întregi,
caractere pot fi rezumate astfel de caractere pot fi, de asemenea, însumate.
Deci, aceasta este exact 65 de ani.
Deci nu va fi 66, și aici avem
65 plus minus un pic mai mare A, care va fi, eu nu prea știu.
Dar va fi exact diferența între literele mari
și și literele mici, astfel vom obține un mic, nu?
Da.
Deci, acest lucru se întâmplă pentru a imprima o personaj care este exact acesta.
Bun?
Orice întrebări?
>> Aici avem o grămadă de diferit Tipuri de variabile numerice.
Vorbim deja despre int.
Float este doar un mod sa-- acest lucru este într-adevăr amuzant, pentru că atunci când am aflat pentru prima dată
pentru a programa înapoi în ziua cu Python, primul program am vreodată
a încercat să scrie, am văzut că a existat o tip numit și un tip numit float.
Și float a fost pentru toate numerele reale.
Deci, apoi m-am întrebat de ce ar trebui să Eu folosesc vreodată un int atunci?
Pentru că dacă pot folosi toate numere reale, cu un flotor,
Mi-ar opri doar folosind int, nu?
Pentru ca numere reale sunt la fel ca mai generic.
>> Se pare că acest lucru este nu este cazul în computere
pentru că sunt, în esență, diferite lucruri.
Deci, valori întregi și reale, operațiunile pe care le face pentru a le
sunt esențial diferite, deoarece de modul în care acestea sunt depozitate, OK?
Mergem să vorbim un pic pic mai mult despre faptul că într-o secundă.
>> Deci, dublu este doar un float mai mare.
De obicei, în cele mai multe sisteme, un flotor este de patru bytes, la fel ca un întreg.
Și o dublă este de opt bytes.
Un lung lung este de fapt doar un simbol pe care le adăugați la un tip ca int.
Tu spui lung lung int ca aceasta.
Lung int lungime x pentru a face mai mult.
Deci, în cele mai multe sisteme, care vor da opt bytes loc de obicei patru.
Și puteți picătură de fapt, in, astfel încât se poate spune doar mult timp lung,
și care funcționează asemenea, OK?
Puteți face, de asemenea, alte lucruri, cum ar fi int nesemnate, sau pur și simplu din nou nesemnate
ar lucra, de asemenea.
Și care ar face x fi o variabilă ca totul este pozitiv,
așa că nu poți avea într-adevăr negativ numere în modul în care am văzut aici.
Deci, în urma minunat Punct și de precizie plutitoare.
Acesta este unul dintre motivele pentru care doriți să utilizați int loc de flotoare,
pentru că int sunt 100% precise, nu?
Este exact acel număr.
Pentru puncte plutitoare, dacă spune răspuns egal cu 1 pe 10--
Se întâmplă să am această exact program de aici, float.c.
Care imprimă la 20 de zecimale.
1 împărțit la 10, și că De obicei este de 0,1, nu?
Dar aici dacă facem float și apoi l-am alerga,
vom vedea că nu e chiar 0,1.
E ceva 0,149.
>> Și de ce e asta?
Pentru că nu poți reprezenta într-adevăr fiecare posibil număr real unic în memorie
pentru că există uncountably mulți dintre ei.
Deci, suntem capabili punct de vedere tehnic doar pentru a reprezintă o cantitate finită de ele
cu o cantitate finită de date.
Dar e foarte interesant.
Acum, acest lucru îl imploră Întrebarea de modul în care ar fi
du-te despre reprezentând acest lucru cu biți, nu?
Deci, cum sunt stocate flotoare?
Cu numere întregi a fost ușor.
Dar cu flotoare vrei pentru a maximiza domeniul,
și doriți să fie în măsură să reprezinte un număr foarte mare și un număr foarte mici, cum ar fi
0.000001, în același timp.
Deci, din nou, același joc.
Are cineva vreo idee cum am putea du-te cu privire la reprezentarea pluti în memorie?
Doar arunca nimic.
Da, vă rog.
>> Audiența: [inaudibil] ca în cazul în care a fost de două int și o
fiind [inaudibil] și o ființă totul după virgulă.
GABRIEL: OK, rece.
Deci, două numere întregi diferite.
Puteți avea 12,45, așa că e 12 și 45.
Frumos.
Ce ere ai de gând să spui?
Același lucru?
Da?
>> Audiența: [inaudibil] notație în cazul în care vă separă de bază.
>> GABRIEL: notația științifică, Da, asta e, de obicei, ceea ce se întâmplă.
Deci, aceasta este ceea ce se numeste mantisa.
Asta e ceea ce este de fapt număr și apoi exponentul
este doar în cazul în care virgula e, nu?
Deci, aceasta va fi ceva ale formularului 1, 2, 3, 4, 5 ori 10
la 4 minus.
Tocmai am dat seama that-- da, exact.
Apoi acest 10 la minus 4 este de gând să definească în cazul în care virgula este, în regulă?
În Brazilia, vom folosi virgula.
Aici voi folosi un punct.
Deci, un punct.
>> Și acest lucru este cool, pentru că atunci poți concentreze o mulțime de biți pe acest tip
aici, pe mantisa, iar apoi e va fi de precizie dumneavoastră actuale.
Și puteți face acest lucru fie în zecimal sau în sistemul bazat binar.
Există diferite modalități de a pune în aplicare acest lucru.
Întrebări?
Da?
Audiența: Câte locuri după zecimal [inaudibil]?
>> GABRIEL: Aceasta este o întrebare complicată, pentru că niciodată nu e într-adevăr de 100% precise,
pentru că așa cum vedeți aici, pentru unele numere este 100% precis.
Cred că dacă am pus 0,5 aici, aceasta va fi de 100% precis.
O să fie 0.500000.
Deci, în acest caz, e perfect.
Dar în alte cazuri, este mult mai puțin perfectă.
În experiența mea, ca pana la patru, cinci zecimale este destul de precisă.
Dacă utilizați un dublu, o să fi mult mai precis decât atât, OK?
>> ROB BOWDEN: Deci, doar pentru a arunca unele mai multe context la flotoare,
Nu-mi amintesc 100% cum spec de flotoare de lucrări, de fapt,
dar eu nu voi aminti mereu care pluteste începe să obtinerea murdar.
Deci, ideea este că atunci când vei ajunge într-adevăr, într-adevăr numere mari sau foarte, foarte
un număr mic, vom începe înrăutățește și mai rău
la diferențierea între două flotoare apropiate.
>> Deci, cum îmi place să mă gândesc este cu virgulă mobilă imprecizie,
există două flotoare care dacă am încerca să le preciza
în C, în ciuda faptului că sunt numere diferite,
ei vor fi interpretat în același număr,
pentru că nu le putem stoca în mod diferit.
Avem nevoie de a utiliza aceleași biți.
Și așa că atunci când vom ajunge la într-adevăr, un număr într-adevăr mare,
vorbesc ca 10 la 300 sau ceva, e la acel moment
că 10 la 300 sau 5 ori 10 la 300
nu pot fi diferențiate de la de 7 ori 10 la 300.
Așa că e un destul de mare diferență între cele două numere.
>> Dar atunci când ajungi jos la lucrurile limite normale,
ai tendința de a fi destul de bun la diferențierea.
Și apoi când ajungi jos foarte mic, te, de asemenea, asistent din nou destul de rău.
Deci, ca o grămadă de 0.0000, devine destul de rău.
GABRIEL: Da, așa o notă de rapid.
Nu face acest lucru.
Nu încercați niciodată să compare plutește folosind egali egali,
pentru că chiar dacă acestea sunt aproape același, aproape la fel, nu este același lucru.
Deci, ceea ce face de obicei este scădeți ei, să ia valoarea absolută a că,
și a vedea dacă acesta este mai mic decât 0,0001 sau ceva de genul asta, OK?
Și se răcește.
Știu o mulțime de oameni au unele de fundal în Java,
în special cele care au făcut AP informatică, nu?
Și Java este un limbaj de că pe baza C cea mai mare parte,
are un cuplu diferențe foarte mari.
Dar pentru bucle, și FI, și chestii de genul că, ei sunt toți aceeași sintaxă.
Am câteva programe aici pentru a arăta acest lucru.
>> Deci, de exemplu, o lume simplă salut.
Acest lucru este salut lume în C, care baieti sunt cu siguranta familiarizat cu,
și acest lucru și acesta este în Java.
Deci, în Java, avem această clasa publica, salut lume,
și public void static args principal, și de coarde.
Args șir de gând să apară în C foarte scurt timp.
Dar să nu mergem acolo încă.
Chiar acum avem anulate aici, ceea ce înseamnă că principala nu este să ia nici un argument.
Și apoi ne-am System.out.println, și asta e
un fel de echivalent pentru printf.
Aici nu avem cu adevărat nevoie backslash n deoarece ln imprimare face asta pentru tine.
Se adaugă backslash n la capătul liniei.
>> Dar dacă te duci în ceva de genul o pentru, tine
se poate observa că acestea sunt destul de mult același lucru.
Deci inițializare, și condiție, și actualizarea
este-- am ratat un spațiu here-- sunt destul de mult același lucru, cu excepția Java
are un nivel ridicat mai multe lucruri puține.
Aici putem face plus I și Java va automat
face acest lucru i aici, care este un număr întreg, într-un șir de caractere,
și apoi adăugați două șiruri împreună.
Aici, în C trebuie să facem &% d.
Linia aici, pentru arată exact la fel.
>> Și dacă ne uităm la cazul în care, IS De asemenea, arata exact la fel, nu?
Deci reale diferențele mari sunt în acele lucruri pe care le vezi aici.
Static publice, gol, și apoi public class dacă.
Deci, Java a ceea ce este numit o mașină virtuală.
Și este foarte puternic bazat pe ceea ce este numit programării orientate pe obiecte,
care este un foarte, foarte frecvente paradigmă de programare în zilele noastre.
Și acest lucru clase este ceea ce vezi, ceva de orientare obiect,
este să creați o clasă și apoi pot obține obiecte din acea clasă.
Noi nu vom vorbi prea mult despre faptul că, în CS50,
dar asta e cu siguranta ceva foarte cool,
mai ales dacă vrei să mergi în dezvoltare web mai sofisticate
la sfârșitul cursului, ca să prezinte proiectul final
și unele cadre frumoase și alte chestii.
>> Deci, practic ideea este că Nu vreau să re-pune în aplicare ceva,
astfel încât să creeze ceva care este foarte generic, cum ar fi forma,
și apoi să creați forme diferite de ea,
și apoi de la fiecare din aceste forme, să creați
unele forme mai specifice în trei dimensiuni sau ceva de genul asta.
Și ei au această ierarhie ei moștenesc de celelalte, așa
toate funcțiile și toate variabilele care forma mare are aici, toate acestea
vor avea, și toate acestea sunt Va trebui, și așa mai departe și așa mai departe.
Deci, asta e ideea de bază.
>> C nu are asta, dar C ++ are acest tip de facilitate.
Și Java este puternic influențată de orientare obiect,
asa ca asta e motivul pentru care vezi Clasa de aici tot timpul.
Și alt lucru este această mașină virtuală Java.
Așa că, cred, este o idee foarte inteligentă.
Deci, ce oameni care java inventat făcut este
ei nu au vrut să compila codul lor de două ori
dacă ar trebui să-l ruleze într-un Windows, sau un Mac, sau Linux, asa ca ceea ce fac ei
Se aleargă literalmente ceva de genul aparatul,
dar nu veți vedea într-adevăr se întâmplă.
Deci, se execută o mașină virtuală în interiorul computerului, care
este de fapt ca un sistem de operare mini.
Și că de operare Scopul sistemului în viață
este doar pentru a rula ceea ce se numește byte code.
>> Deci, în loc de C, modul în care ne-ar compila acest lucru este în cazul în care face, și apoi executați
./if.
Am uitat backslash în.
In Java, v-ar face în primul rând Java C pentru a compila, if.c.
Nu e C. lui dot java.
Și atunci trebuie să nu rula ./.
Veți obține acest nou dosar if.class, dar nu poți într-adevăr
rula if.class acum doar așa cum am făcut-o înainte.
Acesta nu este un executabil.
Trebuie să fugi.
Trebuie să-l hrănească în un program numit Java,
și că programul este mașina virtuală, și apoi faci if.class, sau în cazul în care.
Da.
Și apoi funcționează.
OK deci acesta este un fel de mașină virtuală se întâmplă.
C nu are că, deci, dacă ar fi să a pus acest program într-un calculator Windows,
aceasta nu ar funcționa în C. În Java o face.
Întrebări?
Rece.
Asta în cazul în care pentru secțiunea de super pentru ziua de azi.