[MUSIC JOC] DAVID MALAN: Bine. Aceasta este CS50, iar acest lucru este sfârșitul săptămânii 2. Îmi pare rău, nu am putut fi acolo cu voi toți astăzi, dar ești pe mâini foarte bune. Permiteți-mi să introducă CS50 propriu Rob Bowden. ROB BOWDEN: Și, desigur, atunci avem de a face haz de faptul că el ne-a trimis o verticală video și arată acest lucru. [VIDEO PLAYBACK] [MUSIC JOC] [PASII] Videoclip -Asta nu a trebuie să te uiți în acest fel. Acesta ar fi putut fi prevenite. Spune nu la video verticale. Videoclipuri pe linie verticală întâmpla atunci când țineți camera foto în mod greșit. Videoclipul dvs. va încheia să arate ca un rahat. - [GRUNT] -Nu Sunt mai mulți oameni dependenti pentru a face videoclipuri verticale în fiecare zi. Nu este fisura sau nimic, dar este încă foarte rău. Există două tipuri diferite de oameni care sunt afectate cu VVS. Primul grup tratează videoclipuri ei trage cum ar fi imagini. Ei nu înseamnă nici un rău. Ei pur și simplu nu înțeleg că în timp ce se poate transforma o imagine, nu se poate transforma într-adevăr un film. [CRASH] - [MONKEY SUNETE] -cele Alt grup de oameni este care nu dau un [BLEEP]. Sindromul Video pe linie verticală este periculos. Imagini în mișcare au fost întotdeauna orizontală. Televizoare sunt orizontale. Ecranele computerelor sunt orizontale. Ochii oamenilor sunt orizontale. Noi nu sunt construite pentru a viziona clipuri video verticale. -Am Dragoste video verticale. -Nimeni Nu îi pasă de tine. -Dacă Această problemă a nu sunt controlate, și tu va începe să arate patru videoclipuri la o dată doar pentru a salva de lățime de bandă. Videoclipuri verticale -Letterboxed ar fie de mărimea unui timbru poștal. -Și Se va răspândi peste tot. Ecrane au fost întotdeauna orizontală. Dacă videoclipuri verticale deveni acceptate, cinematografe va trebui să fie înalt și slab. -Și Toate cinematografele ar Trebuie să te rupt în jos și reconstruit. Și de momentul în care au fost reconstruite, Mila Kunis ar fi vechi și urât. -Birds Va prăbuși în ele și să moară. -We'll Toate primi rigid gât de la uita în sus. -Si Nimeni nu va sta în rândul din față vreodată. -George Lucas va re-eliberare de stele Războaie again-- ediția slab. -Nu Nu a fost niciodată cu adevărat în măsură să spun povestea pe care am vrut să-i spun. Acest lucru a fost o mare șansă pentru mine să experimenteze cu o noua tehnologie. -Esti un nesimtit. -În Fiecare dată când un dispozitiv mobil este utilizat pentru a înregistrare video, tentația este acolo. Doar spune nu. Spune nu la George Lucas. Spune nu la vechiul Mila Kunis. Spune nu la video verticale. -Si Daca vezi pe cineva o faci, spune, "Nu fotografiați că dummy drept!" [MUSIC JOC] [END PLAYBACK] [Aplauze] [AUDIO OUT] ROB BOWDEN: --simple formă de criptografie, care este, în principiu criptarea și decriptarea mesajelor secrete. Deci, aici avem o jucărie foarte simplu. Iar ideea este inelul exterior se rotește în jurul inelului interior. Și puteți vedea, poate dacă am mări în, that-- este greu pentru a vedea. Dar, cum ar fi, numărul 1-- bine, care sa mutat. Numărul 1 hărți la scrisoarea X, numărul 2 harti la scrisoarea J. incredibil de dificil nu pentru a sări înainte. Scrisoare 2 hărți pentru J. Numărul 3 hărți la D. Deci cu acest inel poate da cineva un mesaj 1, 2, 3. Pentru unii motiv voi doresc să le spun XJD. Dar le poate da unele mesaje de numere, și atâta timp cât acestea au acest inel, ele poate decripta ce încerc să spun. Deci este posibil să fi văzut acest exemplu special de criptografie înainte dacă în jurul valorii de sezonul de Craciun ai uitat O poveste de Crăciun. Dacă nu ați mai văzut o înainte, apoi doar activa TBS la literalmente în orice moment în Ajunul Crăciunului, pentru că ei doar arata spate în spate pentru a reveni la spate în spate toată ziua. Și video relevant este acest lucru. [VIDEO PLAYBACK] -Fi Cunoscut la toate și diverse că Ralph Parker este prezenta numit membru a Micii Orfane Annie Secret Circle și are dreptul la toate onorurile și beneficiile care apar la aceasta. Semnat Micul orfane Annie. Contrasemnat Pierre Andre cerneală! Onoruri și beneficii deja la vârsta de nouă! [Strigând la Radio] -Haide. Să mergem mai departe cu ea. Nu am nevoie de tot ceea ce jazz despre contrabandiști și pirați. Mâine seară Ascultă cu aventura de încheiere a Pirate Ship Negre. Acum, este timpul pentru Mesaj secret lui Annie pentru tine membrii Cercului Secret. Amintiți-vă copii, numai membrii Secret Circle lui Annie poate decoda mesaj secret lui Annie. Amintiți-vă, Annie este în funcție de tine. Setați ace pentru a B2. Aici este mesajul. 12. 11. 2. -Sunt În prima ședință secretă. -25. 14. 11. 18. 16. Oh, Pierre este în mare în seara asta voce. Aș putea spune că această seară Mesajul a fost foarte important. -3. 25. Asta e un mesaj de la Annie ea. Amintiți-vă, nu spune nimănui. Secunde -Cinci mai târziu, eu sunt singurul în cameră în casa în care un băiat de nouă ar putea sta în intimitate și decoda. Aha! B! M-am dus la alta. E. Primul cuvânt este "să fie." S. venea ușor acum. U. 25. Asta e R. Haide, Ralphie! Am merg Trebuie! -Voi Fi dreapta jos, Ma! Mai sa fie. T. O. "Asigurați-vă că" - asigurați-vă că ceea ce? Care a fost Micul orfane Annie vrea să spună? Asigurați-vă că ceea ce? -Randy Trebuie să plece! Vrei să ieși? Drept -Toate, mama! Voi fi în dreapta! Am fost apropie acum. Tensiunea a fost groaznic. Ce-a fost asta? Soarta planetei poate atarna in balanta! -Ralphie, Randy trebuie să plece! -Voi Fi chiar afară, pentru numele lui Dumnezeu! Aproape acolo! Degetele mele a zburat. Mintea mea a fost o capcană de oțel. Fiecare por vibrat. Era aproape clar! Da. Da. Da. Da. Asigurați-vă că pentru a bea Ovaltine dumneavoastră. Ovaltine? Un comerciale crummy? Fecior de curva. [END PLAYBACK] ROB BOWDEN: Deci așa Ovaltine se referă la criptografie. Practic CS50 doar publicitate Ovaltine, asa ca am putea fie o reclama crummy pentru Ovaltine. In regula. Deci, acum stiinta real calculator. Amintiți-vă, luni, am rămas scufundări mai adânc în șiruri. Deci, am fost de-a face cu șirul "Zamyla." Și am fost recunoașterea faptul că putem trata "Zamyla" ca o secvență de caractere. Și amintiți-vă că am învățat notația suport. Deci, în cazul în care acest lucru au fost depozitate într-un șir de "S," apoi dacă am spus s suport 0, care ar indică Z. majusculă Si daca am spus s suport 1, care ar indica prima litere mici A, și așa mai departe până la s suport 5, ceea ce ar indica trecut o. Acum amintiți-vă că lungime de acest șir este de 6, dar indicii în șir sunt 0 prin 5, Z prin care dura. Deci, acest lucru se potrivește acum într-o imagine mai mare de memoria computerului, RAM-ul. Deci undeva programul care rulați computer trebuie să-și amintească Zamyla undeva în memorie. Deci, pot avea un voluntar? Da te rog. Și ceea ce este numele tau? Decan: Dean. ROB BOWDEN: Dean? Mă bucur să te cunosc, Dean. Deci, vino aici, și vom avea te trage pe aspectul nostru frumos puturos de memorie. Acum îmi place să mă gândesc la memorie ca o bandă lungă de bytes, dar doar pentru scopuri de afișare ne vom pur și simplu la stânga la dreapta, de sus în jos. OK? Deci, am de gând să arate o program-- Getstrings.c. Și atunci tot acest program este face solicită patru siruri de caractere de la utilizator cu GetString și apoi de imprimare indiferent de faptul că primul șir intrat a fost. Suntem ignorând doi prin intermediul a patru. BINE. Deci, aici now-- când Am prima s1 cerere. Deci ești computerul. Și vă sunt de punere în aplicare getString. Astfel încât să solicitați un șir de mine și spun, OK, Dean. Da sirul "Dean". Deci, undeva în memorie pe Trebuie să ne amintim "Dean". Deci, scrie în memorie undeva. Perfect. BINE. Deci, acum ne-am s2. Și S2 va fi o cerere de getString. Deci, am de gând să introduceți un șir. Am de gând să intre "Hannah." Deci intra "Hannah" undeva în memorie. Da. A-H. OK, asa ca acum s3. Și că va fi un alt solicita getString. Și așa că acum intră "Maria". In regula. Și apoi există o ultimă cerere getString, s4. Deci, eu nu știu. Ce zici să mergem cu antidisestablishmentarianism. Deci intra că în memorie. Da. Deci, nu doar "Rob." BINE. Deci, acum, de ce a facut explic lăsați aceste spații? De ce ai acest gol spațiu aici, aici, și aici? Da. Deci observați când mă duc pentru a imprima s1-- deci, dacă am a avut "Hannah" de funcționare până lângă "Dean", cum știm, atunci când șirul "decanul" se termină? Deci imprimarea s1 șir poate avea doar tipărite "DeanHannahMariaRob" în cazul în care nu are nici un indiciu de când "Dean" de fapt se termină. In regula. Deci, în memorie modul în care de fapt reprezintă în acest scop de un șir este cu backslash zero. Deci acest spațiu este exact ceea ce ne-am dorit. Ar trebui să fie un backslash zero. Acest lucru va fi un backslash la zero, și acest lucru va fi un backslash zero. Și puteți avea un premiu fabulos pentru a fi un voluntar perfecta. Ia o minge de stres! BINE. Deci, acest personaj backslash zero cum indică sfârșitul unui șir. E cum, atunci când orice program dat vrea să imprime un șir de caractere, e how-- amintesc am învățat funcția strlen săptămâna trecută? Lungimea șir? Este modul în lungime string este în măsură să a determina cât timp un șir este. Doar ține iterarea peste caracterele până când se găsește backslash caracter zero. Deci cel mai important lucru pentru a realiza despre caracterul backslash la zero este este reprezentat de toate zerouri în biți. Deci observați că acest lucru este distinct din caracterul zero. Deci caracterul zero dacă vă aduceți aminte în exemplul că a dat la sfârșitul de curs în cazul în care harta de caractere sa-- ca hărți de capital la A la 65 de ani. Minuscule un hărți pentru 97. Litere mici b ar fi 98. Astfel încât numărul 0 hărțile sa-- Eu nu fac cunosc pe partea de sus a capului meu. 44 sau 45. Undeva în această regiune. Deci caracterul 0 este un număr real. Dar la zero backslash hărți la toate la zero biți. Deci, există o distincție între backslash la zero, care vom suna terminatorul nul. Există o distincție între backslash zero și caracterul zero. In regula. Deci, vorbim un pic mai mult despre siruri de caractere. Deci, apoi vom vedea aici este modul în care ar fi prevăzute în memorie. Deci, această idee de siruri de caractere ca o secvență de characters-- astfel încât computerul oficial termen sciency pentru secvență este o matrice. Deci am numi un șir o serie de caractere. Și acolo sunt de fapt alte date tipuri care putem face tablouri din. Deci, pentru a motiva acest lucru, uita-te la un exemplu. Vom numi ages0.c Voi copiați și inserați șablonul nostru. BINE. Deci, în acest program ceea ce vrei sa faci este apuca vârsta de trei studenți în curs. Deci, știm Int age-- și acum am de gând să spun 0. Deci, ați putea dori să spună age1, dar în scopuri vom vedea în foarte scurt timp, Voi spune int age0 egal getint. Deci același apel la getint pe care le-am folosit eu Nu se întâmplă să fie determinat spunând, "Dă-mi vârsta." Ci doar le-a solicitat. Și age1 egal getint. Și int age2 egal getint. Deci, din nou, trei elevi, dar în cele din urmă indicii variabile sunt age0 prin age2. BINE. Deci, acest program va face tot ce vrem cu age0, age1, și age2, dar în cele din urmă acest program lucrează pentru trei elevi. BINE. Deci, acum ce dacă vreau patru elevi? Ei bine, am de gând să trebuie să se întoarcă în codul meu, schimba comentariul, iar acum avem un int age3 egal getint. BINE. Deci care vede problema aici? Care e problema cu acest tip de instalare? Da. Da. Deci ne crea o variabilă pentru fiecare elev. Acum, că funcționează, dar în cele din urmă ceea ce am acum dacă spune, "Vreau să apuca vârsta de opt elevi sau 16 elevi sau cu toate acestea multe studenții sute de studenți din CS50 sau mii de studenți în campus sau miliarde de oameni din lume? Deci în cele din urmă acest lucru nu este durabilă. De fiecare dată când te vezi copierea și codul lipire ca aceasta, te, în general, ar trebui să se simtă că există o cale mai bună. Deci, aceasta este în cazul în care vom introduce o declarație matrice. Deci, atunci când declară un tablou, aceasta este ceea ce formatul general se va arata. Vom spune tipul. și apoi vom da numele pe care matrice, la fel cum am defini orice variabilă dată. Și apoi în cele din urmă pe care o folosim această notație suport din nou dar într-un context diferit de cum am fost folosind-o mai devreme. Deci, aici acest lucru arata ca un obișnuit declarație variabilă care le-am văzut. Deci am văzut int x și virgulă înainte. Ei bine, acum am putea vedea ceva ca int x paranteze 5. Și pune această idee în Programul getint că have-- astfel încât să putem pune în aplicare acest în același mod. Să spunem în CS avem tendința de a folosi n reprezintă numărul de ceva. Deci, aici vom stoca patru studenți. Și acum putem spune varsta int suport nu N- destul l yet-- să declare o serie de patru elevi. Deci, cum va arata in Memoria va fi similar cu acest lucru. Ștergeți acest. Și vom avea undeva în memory-- Voi pune acest acolo. Deci, undeva în memorie. Unu doi trei patru. Avem patru numere întregi într-un rând pentru această serie de patru numere întregi. Deci, în prezent, ceea ce este Dimensiunea de unul dintre aceste cutii? Da. E patru octeți. E 32 de biți. Deci, acum acest lucru este diferit din matrice pe care le văzut mai devreme, matricea de caractere. Într-un șir de fiecare cutie a fost doar un octet, pentru că un caracter este doar un octet. Dar cu o serie de numere întregi, fiecare caseta trebuie să fie patru octeți în ordine pentru a se potrivi un întreg număr întreg. Deci, asta este ceea ce o serie de patru int ar arăta. Și apoi înapoi la codul. Acum vrem să efectiv magazin întregi în care matrice. Deci, acum aceasta este o foarte, foarte, foarte model comun, care va la un moment dat devin memorie musculară. Deci, int i este egal cu 0. i mai puțin n. Am plus plus. Categorie de vârstă i este egal cu getint. Deci, acest lucru pentru bucla, acest format, tu ar trebui sa foarte folosit pentru a. Deci, aceasta este, în general, modul în care vom itera peste aproape orice matrice. Acum observați acest tip de explică de ce de la început nu am avut pentru bucle merge pentru Int i este egal cu 1, i mai mică sau egală cu 10. Motivul fiind că, începând de la zero, face ca acest lucru bine cu tablouri. Deci, matrice sunt zero indexate. Dacă această matrice este de lungime 4, indicii sunt de la 0 la 3. Deci prin primul repetare a acestei pentru bucla vom fi stabilirea vârstei suport 0 egal cu un apel la getint. Deci, tot ce sa întâmplat pentru a intra la tastatura. În a doua trecere, suntem setarea age1 egal cu getint. Pass al treilea rând, age2. Age3 treci finală. Deci, dacă în prima trecere a buclei Am introduceți numărul 4 de la tastatura, atunci vom introduce o 4 aici. În cazul în care a doua trecere am intra 50, vom pune un 50 aici. La a treia trecere am putea introduceți negativ 1, 1 negativ, și în final, dacă am intra 0-- și acum amintiți-vă că acest lucru a fost indice trei. După ce am buclă înapoi, i este va fi incrementat la 4. i nu mai este mai mică n, care este 4. Și am iesi din bucla. Deci, ceea ce ar fi în neregulă cu asta? [Inaudibil]? Audiența: [inaudibil] Da. Deci matrice are doar patru locuri, ceea ce înseamnă ca indici 0 prin 3. Deci, dacă acesta ar fi cazul, aș ia pe valoarea 4 la un moment dat. categorie de vârstă 4 va fi stabilirea orice se întâmplă să fie aici la ceea ce am de spus, intre 6. Care va fi setarea asta 6. Dar noi nu știm ce e aici. Acest lucru nu este de memorie care am avut acces. Deci, dacă vă aduceți aminte de prelegerea anterioară, el a fost imprimarea valori de Zamyla și la un moment dat el a lovit acest segmentare vina. Deci, va fi, probabil, văzând multe greșeli de segmentare ca tine punerea în aplicare a unora dintre seturi problemă. Dar aceasta este una dintre modalitățile în care puteți întâlni o segmentare vina, atunci când veți începe accesarea de memorie în moduri pe care nu ar trebui să fie. Deci nu am avut acces la această locație și acest lucru este un bug. Deci acest lucru este mai bine. Acum există încă o mică problema cu acest cod. Și asta e de fapt ca suntem inca blocati la patru studenți. Acum, dacă vreau să folosesc opt elevi, OK. Nu e mare lucru. Eu pot merge în, schimba comenteze, și de a schimba n. Acum, acest lucru va lucra cu opt elevi. Dacă am compila și rula acest acest lucru, va arăta mine-- se va solicita întregi pentru opt studenți și va funcționa doar. Dar e mai puțin de ideal pentru a trebui să recompilați programul de fiecare dată Vreau pentru a modifica numărul de studenți pe care vreau să intre vârstele de. Deci îmbunătățirea finală pe acest lucru, deoarece vom vedea here-- suntem O să solicite numărul de persoane. Aici avem un număr de persoane în camere sau orice varsta de persoane în cameră. Dar am de gând să solicite numărul de persoane în cameră din partea utilizatorului. Deci, acesta este exact același do-timp bucla pe care le-am văzut înainte. Este exact același do-timp bucla pe care le pot fi de punere în aplicare pe platourile de filmare problema. Deci, atâta timp cât acestea sunt Introducerea unei n mai puțin de 1, deci nu trebuie să existe la puțin o persoană în cameră. Atâta timp cât acestea sunt Introducerea unei n mai puțin de 1, apoi vom păstra cere din nou. Vă rugăm să introduceți numărul de oameni în cameră. Acum, odată ce avem numărul de oameni în room-- așa că am putea intra că există sunt 200 de persoane în această cameră. Atunci aici vom veni și să declare o serie de dimensiuni 200. Suntem declarând matrice care este suficient de mare pentru a ține 200 de varsta. Venind în jos, e pentru bucla ca vei primi foarte folosit pentru a. Deci, iterarea peste această matrice, atribuirea fiecare locație în matrice un număr întreg, și apoi în cele din urmă aici suntem doar obtinerea un exemplu de itera peste care matrice, pentru a nu atribui valori, dar pentru a avea acces valori. Deci, aici vom vedea că noi spun, un an de acum, persoana% i se va fi% i ani, în cazul în care prima% i este i plus 1. Deci i este această variabilă index. Iar cea de a doua% I este mergi la a fi valoare stocată în matrice varsta plus 1. Deci, acest plus 1 este doar pentru că suntem saying-- acest plus 1, vârstele i plus 1. Acest plus 1 este doar pentru că suntem spune, la un an de acum persoana va fi acest vechi. Deci, de ce este acest eu plus 1? De ce avem un plus 1 acolo? Da. Da. Deci, amintiți-vă matrice sunt zero indexate. Deci, dacă ne-am tipăriți asta pentru cineva să citească doar de ieșire, apoi, probabil, ei vor să vadă ceva ca persoană o, persoană numărul unu, va fi de 20 de ani. Persoana numărul doi va fi de 15 de ani. Mai degrabă că nu voi vedea persoana Numărul zero, este de 15 de ani. Deci, compilarea acest lucru și doar a vedea ce se pare like-- Creați spațiu. Face vârstele Întocmește. Rularea vârstele. Vedem Numărul de persoane în cameră. Așa că voi spune că există trei persoane în cameră. Vârsta persoanei numărul unu, să zicem 15, 20, 25. Și acum voi spune de un an de la acum vor fi de 16, 21, 26. Să vedem care aceasta funcționează cu o n care nu este egal cu 3. Deci, dacă spun număr de persoane este de 5, o, doi, trei, doi, unu, un an de acum vor fi două, trei, patru, trei, doi ani. Așa că am putut la fel de ușor n-au să fie de 10.000. Acum voi sta aici pentru destul de o vreme a intra vârstele, dar aceasta functioneaza. Deci, acum în memorie undeva am au o serie de dimensiuni 10.000, astfel în cele din urmă 40.000 bytes, pentru că există patru octeți pentru fiecare dintre aceste numere întregi. Deci, există o serie de Dimensiunea 10.000 unde putem stoca cu varste cuprinse intre acei 10.000 de oameni. In regula. Întrebări despre toate astea? Da. Ce se întâmplă dacă ți-a dat un număr negativ? Să vedem ce se întâmplă. Deci, în acest număr special case-- de oameni in camera, cel negativ. A respins ca, pentru că aici am întâmpla să gestioneze faptul că dacă n este mai putin de un vom cere din nou. Dacă încercați să declare un matrice de dimensiune negativ, în general, nu funcționează. Deci, hai să încercăm. Să ignorăm orice Valoarea ei de intrare pentru n și spune doar varste int negativ. Să vedem dacă se compilează chiar. Nu sunt sigur. Nu. Deci, varsta este declarat ca un matrice cu o dimensiune negativă. Deci avans recunoaște o serie nu poate fie de dimensiuni negativ și respinge. Acum, dacă nu ne-am descurca această buclă în timp ce do-corect, dacă nu am fost de verificare dacă n este mai mic de 1-- să spunem ne-am nu au avut acest lucru la toate și în loc am apuca doar un număr întreg. Indiferent de ceea ce că întreg este, declaram o serie de această mărime. Deci compilatorul nu poate eventual se plâng acum. Dacă am compila astea-- astfel că nu se poate plânge, deoarece nu se poate ști că eu sunt merge pentru a introduce un număr negativ, care ar putea fi invalid. Pentru tot ce știe, aș putea introduceți un număr pozitiv, care este perfect valabil. Așa că am imagina, dacă am intra negativ 1 persoane în cameră, segmentarea vina. Deci bine. Așa că haideți să adaugi acest înapoi doar păstrați-l ceea ce a fost inițial. Deci, asigurați-vârstele. Acum, dacă vreau să încerc o negativ age-- Să spune că există cinci persoane în cameră. Vârsta persoanei numărul unu este negativ 4, persoana trei este zero, persoană three-- OK. Deci, aici, un an de acum, numărul persoană unul va fi negativ de 3 ani. Deci, probabil, nu are sens. Dar asta e doar pentru că în căutarea la codul Tot ce facem solicită getint. Acum, dacă am fi avut Funcția GetPositiveInt sau am făcut pur și simplu acest un fel de buclă în timp ce același acolo, atunci acest lucru ar funcționa foarte bine. Dar, în acest special caz, pur și simplu nu se întâmplă să fie de manipulare valori negative. Orice alte întrebări cu privire la matrice? BINE. Deci am văzut acum tablouri. Și vom necesitatea de a utiliza acest lucru pentru argumente în linia de comandă. Deci, în problema set two-- Știu că mulți dintre voi ar putea fi încă lucrează la set problemă o, dar problema a seta două se apropie. În problema set de două, ai de gând să trebuie să se ocupe cu siruri de caractere, tablouri, și argumente în linia de comandă. Deci, ce sunt argumente în linia de comandă? Acum, puteți vedea aici o puțin teaser pentru exact ceea ce este O să se întâmple. Vedem Int argc principal, Inc, paranteze string argv. Deci, în primul rând să încercăm să interpreteze ce care încearcă să spună. Acum bine. Deci, la linia de comandă ar trebui să fie obtinerea folosit la unele dintre aceste comenzi acum, și v-ați rula probabil, cd în terminalul înainte. Deci, dacă spunem cd pset1, Știi că ar trebui fie schimbarea în directorul pset1. Acum observați că nu ați scris un program ca acest lucru înainte. Fiecare program pe care le-ați scris, v-ar alerga, să zicem, dot slash Mario, dot slash lacomi, și apoi ar putea să vă solicite pentru intrare. Acum, asta e ceea ce nu director schimbare face. Când rulați CD, nu atunci spune, care directorul vrei să CD în? În schimb, ai spus, cd pset1, și doar merge în directorul pset1. Deci, în mod similar, avem alte exemple. face salut. Când executați face, nu atunci spune, ce program doriți să? Trebuie doar spun, la linie de comandă face salut. Move este un alt exemplu. Acesta ne mutați mario.c fișier up un director. Deci, acum stim cu acest exemplu suntem într-adevăr trece două argumente. Există mario.c ca primul argument, și punct punct este al doilea argument. Și când tu a alerga face, te vezi comanda foarte lung line-- comanda foarte lung tipărită la linia de comandă. Astfel încât timp command-- acest este doar o scurtă parte din ea, dar acum avem trei argumente în linia de comandă. Punct bord la zero, salut, și hello.c. Deci, acestea sunt de linie de comandă argumente, argumente că sunteți trece la linie de comandă, astfel încât să nu trebuie să vi se solicite atunci când executați programul. Ar fi frustrant dacă atunci când Ai fugit clang spus, "OK, care program-- care fișier te compilarea? Hello.c. Ce steaguri ar tine dori să intre? bord o. Ce ai dori fișierul să fie numit? Alo. Nu, tu a alerga doar zăngănit lovești o salut hello.c. Deci, privind înapoi la asta. Acum argc argc-- este conteaza argument. Este numărul de linie de comandă argumente intrat în linia de comandă. Ei bine, argv-- tehnic v vine de vector, ceea ce înseamnă în esență matrice. Dar puteți ignora asta. Argv-- avem șir argv, astfel încât între paranteze string argv. Deci aceasta este o altă formă de paranteze nu ați mai văzut înainte. Suport așa că am văzut notație atunci când ne-am spus, cum ar fi, string s egal Zamyla. s suport 0 accesează Z. caracter Am văzut, de asemenea, atunci când paranteze am spus vârstele int bracketing 5. Care a declarat o serie de dimensiuni 5. Deci, aici este o versiune a paranteze nu am mai văzut până acum. Deci, acest tip de șir argv care ar fi complet familiar că ar fi doar un șir. Acum paranteze indică că aceasta este o matrice. Deci suporturi string argv mijloace că argv este un tablou de siruri de caractere. Acum punct de vedere tehnic un șir este o serie de caractere. Deci, aceasta este acum o matrice de o serie de caractere. Dar este mult mai ușor să se gândească la acest lucru ca doar o serie de siruri de caractere. Deci, de ce s-ar putea paranteze fie gol? Cum ar fi, de ce nu putem spune, suport 5, suport n? Da. Da. Nu știm cât de multe intrări de acolo vor fi. Deci, dacă ne uităm la exemplul zăngănit, spunem clang bord o salut hello.c. În acest caz particular, nu se întâmplă să fie de trei argumente în linia de comandă. Și astfel brackets-- vom vedea într-un al doilea nu ar fi trei. Este punct de vedere tehnic ar fi patru. Dar paranteze, ne-ar să zicem, există trei. Dar acum, dacă ne-am uitat la mișcare mario.c dot dot, suporturile ne-ar dori să pună două în ele. Și există o mulțime de comenzi care au un număr variabil de linie de comandă argumente. Deci, ce această versiune a notație suport indică este că argv este un tablou de siruri de caractere. Dar nu știm cât de multe siruri de caractere sunt în matrice. Și cum putem să știți cum mai multe siruri de caractere sunt în matrice? Asta e ideea argc. argc ne spune cât timp argv este. Deci, ultimul lucru de a păstra în minte este că, punct de vedere tehnic, comanda se numără printre din argumentele de linie de comandă. Deci cd pset1, există două argumente în linia de comandă. Programul în sine, CD, apoi partea argument real de ea, pset1. Orice program care le-ați scris până acum a avut o linie de comandă argument-- dot slash Mario. Că este singurul argument linie de comandă. Deci, acum se uită la zăngănit lovești o salut hello.c. Deci, ce este argc? 4. Deci argc este de 4. Zăngăni, suport așa argv 0 este zăngănit. argv suport 1 este liniuță 0. argv suport 2 este Bună ziua, și argv suport 3 este hello.c. Ok, deci întrebări cu privire la acest, iar apoi vom uita-te la câteva exemple programatice. BINE. Deci, vom arunca o privire la hello3.c. Deci, acest lucru ar trebui să fie familiar de la unul dintre primele exemple c am avut unde ne-ar spune doar, salut lume, dar acum acest lucru este mai generală. Deci, aici suntem spune salut % s backslash n suport argv 1. Notice-- așa până acest moment, aceasta este ceea ce dosarul meu șablon a semăna. Am avut int main (void), iar apoi aș face ceva în funcția principală. Acum, în loc, odată ce începe a face cu argumente în linia de comandă, avem nevoie pentru a afirma o diferite forme de principal. Deci, se uită la hello3 din nou, principalele merge să ia două argumente now-- Int argc, numărul de argumente în linia de comandă, și șir argv paranteze, real siruri de caractere a intrat în linia de comandă. Deci, am de gând să schimb asta șablon pentru a reflecta acest fapt. Acum ori de câte ori scrie un program, dacă nu trebuie să ia orice linie de comandă argumente, apoi utilizați doar int main (void). Dar acum, când scrii programe de argument de linie de comandă, care ai de gând să faci pentru problema set two-- Deci, acum că rulați programe care au nevoie pentru a lua argumente în linia de comandă, aveți nevoie de principal al acestui formular. Deci here-- acest lucru este utilizarea de mare de argumentul de linie de comandă. Deci, imprimarea argv 1. OK Să compila și a alerga acest program. Face hello3. Compilează. Dot slash hello3. Și să spunem, "Rob." Buna ziua Rob. Dacă spun, "Bună ziua Maria," salut Maria. Buna ziua Maria. Hannah încă spune: "Hello Maria ", pentru că eu nu sunt a face ceva cu argv nostru 2. Argv 2 acum ar fi "Hannah." Argc ar fi 3. Ce se întâmplă dacă am făcut acest lucru? Deci, salut null. El a atins pentru scurt timp cu privire la faptul că, tehnic, getString s-ar putea întoarce null, dar vom avea o mult mai mult în ceea ce este de fapt nul. Dar ia ca o chestiune de fapt ce nu este, în general rău. Am făcut ceva greșit, dacă se imprimă "hello null." Și motivul pentru care am făcut ceva în neregulă este-- bine, când am fugit punct hello3 slash, argc a fost 1. Asta înseamnă că lungimea argv a fost 1. În cazul în care o serie este de lungime 1, singurul indice valid este zero. Și astfel aici argv 1 este în afara gama de această matrice. Acesta a fost similar cu înainte, când am încercat pentru a stoca 6 afara sfârșitul șirului. Așa că încerc să acceseze ceva în afara contează argv, si primim null. Deci, o versiune mai bună a acest, o îmbunătățire, verifică în mod explicit argc. Deci, dacă argc este egal cu 2, înseamnă că am fugit ceva de genul dot slash hello3 Rob. Și se va imprima "salut Rob." Dacă nu este egal cu argc 2, atunci este doar de gând pentru a ignora orice ai pune la argumentul de linie de comandă ca argumente în linia de comandă. Sau dacă nu ați pus nici la toate, e doar de gând să ignore faptul că și spun doar, "Salut tu." Deci, compilarea asta. Face hello4. Și să fie difuzate hello4. Rularea în felul acesta, ceea ce ar trebui să fie tipărite? "Salut tu." Salut tu. Ce zici de hello4 Rob? "Bună ziua Rob." Și, în sfârșit, salut Rob Maria este doar "salut You", din nou, pentru că nu a intrat într-adevăr ceva care se aștepta. Ați introdus mai multe nume decât s-ar putea descurca, așa că doar implicit la Hello te comportamentul. Deci, întrebări cu privire la această? Sau argumente în linia de comandă? OK, deci a lua o privire la o cuplu mai multe exemple de utilizare linie de comandă arguments-- primul am argv bord 1 punct c. Deci, comentariile da ceea ce acest program ar trebui să facă. Dar observați now-- acest lucru pentru bucla, acest potrivește modelul exact Spuneam mai înainte. Doar se întâmplă să fie folosind argc loc de n. Acum argc este într-adevăr n. Este lungimea matrice argv. Deci, sunt iterarea peste argv matrice printf-ing fiecare valoare argv. Deci, dacă am face acest lucru. Face argv 1. Ea compilează. Dot slash argv 1. Doar rulează acest lucru, printuri dot slash argv 1 din moment ce a fost singura linie de comandă argument-- numele programului. Nu va fi întotdeauna la least-- argc nu poate fi mai mic de unu, deoarece nu va fi întotdeauna cel puțin fie numele programului pentru a rula. Deci, argv 1 Rob va imprima argv 1 și apoi pe noua linie "Rob." Deci, în prima iterație de această buclă, i este 0. Argv 0 este numele programului. Dot slash argv 1. Și apoi argv 1 este primul meu argument de linie de comandă, care este Rob. În acest moment, suntem egale cu argc. Am iesi din bucla si am terminat. Deci, acest lucru va lucra pentru o arbitrare Numărul de argumente în linia de comandă. Observați se imprimă argv 0, argv 1, argv 2, argv 3, 4 argv. Și nu există nici argv 5. argc este egal cu 5. Deci, la argc-- la i este egal cu 5, am iesi din bucla. BINE. Deci întrebări pe care, înainte de uita-te la un exemplu mai complex? Deci, argv 2. In regula. Așa că încă de imprimare argumentele de linie de comandă. Dar acum avem observa un imbricate pentru buclă. Deci, ce este acest faci? Deci prima bucla este de a face exact ceea ce a făcut înainte. Suntem încă looping peste fiecare argument în linia de comandă, dar acum acest al doilea loop-- ne-am de asemenea, văzut așa ceva înainte. Când a fost iterarea peste Zamyla imprimarea Z-A-M-Y-L-A. Deci, acest al doilea buclă pentru Int J este egal 0, n este egal cu strlen de suport argv i. Așa că haideți să ne gândim în primul rând pentru the-- să se plimbe prin. Să ne gândim ce ar fi computerul fac dacă am fugit acest program doar ca dot slash argv bord 2. Deci, dacă am fugit acest cod, atunci argc va fi egal cu 1. Și șir argv-- există doar O să fie un index în argv, și care va fi egal cu dot slash argv 2-- numele programului. OK, asa ca acum am este egal cu 0, i mai puțin de 1, am plus plus pentru int j este egal cu 0, n este egal cu strlen de suport argv 0, astfel încât în prima iterație a acestui buclă. argv suport 0 este slash punct argv 2. Deci, ce este lungimea care șir? Ei bine, dot slash A-R-G-V bord 2. Deci, strlen de care va fi de 8. Deci j este egal cu 0, n = 8. Atâta timp cât j este mai mică de 8, j ++. Și cu asta am de gând să fie imprimarea un singur caracter, care este argv suport i bracketing J. Deci, numai eu este zero. Mai avem încă doar un singur argument de linie de comandă. În această prima iterație a pentru bucla, suntem O să fie de imprimare argv suport 0 0 suport. Și apoi J va incrementa. Și am de gând să imprimarea argv suport 0 suport 1. Și apoi argv suport 0 suport 2. Deci, aceasta este prima noastră întâlnire de matrice multi-dimensionale. Amintiți-vă mai devreme că am spus că argv este punct de vedere tehnic o serie de tablouri de caractere. Deci, aici, dacă i-am spus ceva de genul string s egal suport argv I, și apoi i-am spus, s suport J, acest ar fi realizarea același lucru. Acum, ați văzut s suport J înainte. Asta e doar a accesa J-lea Caracterul de acest șir. Deci, cu acest lucru, ne sunt obtinerea de caracter-J-lea a argv i-lea. Deci, ceea ce ar trebui în cele din urmă acest ieșire? Face argv 2. Ea compilează. Dot slash argv 2. "Rob Maria Ana," și să ne dea unele cameră. Deci, vedem că acest lucru este scoate punct pe o linie proprie și slash pe o linie proprie și o pe o linie proprie. Este imprimarea fiecare caracter individual de fiecare argument în linia de comandă. Și apoi între ele, din cauza acestei noi linii suntem de imprimare aici, în între ele se va imprima o nouă linie. Deci acest lucru este similar cu bord argv înainte 1, care imprimă fiecare argument de linie de comandă, dar acum suntem de imprimare argumentele de linie de comandă și apoi iterarea prin fiecare Caracterul de fiecare argument în linia de comandă pentru a obține această ieșire. OK? Deci, întrebări cu privire la această? Un lucru de remarcat este faptul că linie de comandă arguments-- astfel încât acestea sunt separate de spații ca v-ați aștepta în mod natural să fie. Deci, un șir poate avea spații în ea. Nu e foarte important, dar dacă am dorit al treilea argument de linie de comandă pentru a avea un spațiu în ea, apoi m-am ar putea spune ceva de genul asta. OK? Deci, asta acum mai are doar trei linie de comandă-bine arguments-- 4. Dot slash argv bord 2, Rob, Maria, și Hannah Bloomberg. BINE. Întrebări cu privire la aceasta? Nu e nimic special despre caracterul spațiu. Se întâmplă să fie că de linie de comandă tratează caracterul spațiu și modul în care separa fiecare argument. In regula. Deci, atunci set Problemă two-- ai de gând să fie uita la criptografia secrete-cheie. Deci, similară celei exemplu am văzut dintr-o poveste de Crăciun, ai de gând să fie punerea în aplicare a unora algoritmi care, dat un mesaj, ai de gând să fie în măsură pentru a cripta acest mesaj că numai cineva cu care secretă cheie, cu inelul decodor, ar trebui să poată decripta. Astfel încât este Standard Edition. Ai de gând să fie punerea în aplicare a două versiuni diferite. Dacă se întâmplă să aruncăm o privire la hacker Edition acum, vom da te un șir de genul asta, ceea ce reprezintă o parolă criptată. Deci, obiectivul tău este să dau seama ce parola decriptat este. Acum, acest lucru este de fapt modul în care parole sunt stocate într-o mulțime de computere, și doar stochează această șir de caractere aleatoare. Trebuie să dau seama cum să obțineți din acest șir de caractere aleatoare a ceea ce a fost parola originală. Și, în sfârșit, după această set problemă, ar trebui să fi capabil să înțeleagă ce înseamnă acest lucru. Deci, va învăța cum să decripta acest tip de șir aleator. În mod similar, dacă vă aduceți aminte de săptămână 0, s-ar putea fi văzut această adresă URL. Și ar trebui să fie în măsură să decripta acest în cele din urmă. Tu nu ar putea fi fericit atunci când decripta o și faceți clic pe link-ul. In regula. Asta e pentru ziua de azi. Astfel încât să vedem săptămâna viitoare! [Electronic Music JOC]