[Powered by Google Translate] [2 tedna, Nadaljevanje] [David J. Malan, Harvard University] [To je CS50. - CS50.TV] V redu. To je CS50, in to je konec tedna 2. Če pričakujete, da bo lačen, v tem času jutri vemo, da bomo za sklic kot majhno skupino jutri, v četrtek, 13:15. Tam je to URL tukaj, če želite RSVP. Vesolje je omejeno, zato vas prosimo, oprostite, če je obrazec zapolnil čas, ki ga izpolnite tole. Še en URL, čeprav je, da bi bilo koristno, je to. V skoraj času enega meseca, tečaj se bo na voljo še toliko bolj na splošno prek EDX, prek katerega bodo ljudje na internetu lahko sledite skupaj, sodelovanje v okviru zelo aktivno, v resnici. Prišli bodo z uporabo aparata CS50 in CS50 Razprava in najbolj različnih programskih orodij, ki smo jih že bili z uporabo tega semestra. In ena od pobud bi radi prevzeli kot poskus letos je videti, koliko vsebine lahko prevedete v druge ustne in pisne jezikih. Torej, če imate morda interes za sodelovanje pri tem projektu s katerimi bomo zagotovili English prepisov in podnapisov za predavanja teku na in kratke hlače, seminarji in drugi profili in podobno, če govorim tekoče ali berljivost nek drug jezik, mi bi radi, da vas vključijo v ta projekt, s katerim boste lahko na enem ali več videoposnetkov jih prevede v jezik, ki ga poznamo zelo dobro. Da bi vam občutek vmesnika, tam je spletni uporabniški vmesnik da bomo uporabljali, da bo v bistvu ustvarili uporabniški vmesnik, kot je ta. To se je učil me nekaj Halloween nazaj, in na desni strani tam v črni barvi dostavo v teh časovnih žigov, boste videli različne stvari, ki ste jih dobili iz mojih ust, da je dan, in nato pod njo boste lahko prevesti v drug jezik točno to, kar je preslikava med, v tem primeru, angleškem in, recimo, španski. Tako da je pravzaprav zelo uporabniku prijazno orodje. Lahko nazaj in hitro naprej zelo hitro z bližnjicami na tipkovnici. Torej, če bi želeli sodelovati v tem poskusu in so vaše besede videti in brati s potencialno tisoče ljudi, tam, prosim, vas prosimo za sodelovanje. Ena beseda o mucka od ponedeljka. Da ne smo poslali preveč grozljivo sporočilo, se zavedamo, da je, kot kažejo uradne ure in kot kažejo oddelki, oblikovanje tečaja je zelo da so učenci sodelujejo in se pogovarjam z dela zaradi težav zbirk in težave skupaj, in res je linija samo pridejo na, Ponovno naj bi delo, ki ga na koncu lahko predložijo svoje. In tako čisto po pravici povedano, v uradnih ur je popolnoma normalno, to je popolnoma mogoče celo pričakovati, da bo klepet s prijateljem nekaj zraven tebe. Če on ali ona se bori z nekaterimi temo in si tako, "No, naj vam vpogled v nekatere vrstice kode, ki sem ga napisal,» da je v redu, se to zgodi, in to je zelo ugodno, mislim, da s procesom učenja. Če je linija dobi prečka, ko je glava nekako nagiba tukaj za veliko preveč sekund ali minut za to res pravkar bila sprostitev priložnost za prijatelja, in seveda, ko se stvari izmenjujejo prek e-pošte in Dropbox in podobno, Tudi tam je postavka. Torej, z vsemi sredstvi, se počutite udobno in navdaja za klepet s prijatelji in sošolci o psets in več in le spoznali, da tisto, kar v končni fazi predložiti Morala bi biti plod vaše ustvarjanje in ne kdo drug. In tako eden od domensko specifičnih težav za pset2, , ki bo izšla konec jutri zvečer, je, da se potopite v svet kriptografiji , ki je umetnost za šifriranje podatkov ali premešavo, in to na koncu se nanaša na svetu varnosti. Zdaj, varnost za večino od nas prihaja v obliki dokaj preprostega mehanizmov. Vsi nas imajo imena in gesla, in vsi imajo zelo slabe imena in gesla, verjetno. Če vaše geslo je isti na več spletnih mestih, to verjetno ni najboljša ideja, kot bomo razpravljali proti koncu semester. Če je geslo napisano na lepljivo opombo - ni šala - na monitorju, tudi to ni nujno najboljša oblika, vendar precej pogost pojav. In če ga ne uporabljate kriptografije za šifriranje gesel, so še posebej ranljivi. Torej, če mislite, da ste super pametni, ki jih imajo skrite Wordov dokument nekje na trdem disku, ki je vse svoje gesel vendar je v mapi, da nihče ne bo videti v, da tudi ni zelo varen mehanizem. In kaj bo prinesla pset2 je to umetnost kriptografije in šifriranje podatkov, tako da so stvari, kot so gesla, vse bolj varno. Okoliščine v tem, da z negotovimi podatkov prihaja priložnost za šifriranje in ga scramble. In tako je to, na primer, je primer šifrirano sporočilo. To je dejansko nekaj reče v angleščini, vendar to očitno ni popolnoma jasno. In bomo cel krog danes draži narazen, kaj je ta skrivnost sporočilo tukaj. Toda v resničnem svetu računalnikov, stvari ne izgledajo kot bi lahko bile angleški stavki. Na primer, to je tisto, kar boste morda našli na standardnem Linux ali Mac računalnikom ali UNIX v datoteko, ki je bila nekoč, ko se imenuje datoteka skupine. Danes je bil prestavljen na drugih mestih. Ampak, če pogledaš na pravem mestu, v sistemu, boste videli ne samo svoje uporabniško ime ali drugih oseb v sistemu, vendar pa boste videli šifrirano različico svoje geslo. Dejansko je beseda grobnica je nakazovalo, da je naslednja stvar šifrirano, in ta niz na videz naključnih črk in številk in znakov in tako naprej mogoče dešifrirati samo s splošno vedo nekaj skrivnosti - Skrivnost besedo, skrivnost številka - in tako dejansko umetnost kriptografije navsezadnje izvira zaupati neke vrste in vedo nekaj, kar nekdo drug ne. Torej bomo raziskovali to v malo bolj podrobno danes in v pset se nadaljuje. In sedaj beseda o ustreznosti / neustreznosti. Še posebej, ker so nekateri izmed vas vrgli v pset1, Aparati, in zelo nov svet za sebe, zavedaš, da frustracije in zmedenost in samo tehnične težave so precej ki jih lahko pričakujemo, še posebej s prvim pset, kjer se je samo toliko novega, Samo seznanjanja z ls in cd in vse te skrivnostne ukazi in novo okolje, in da je ločena od dejanskega materiala in se programiranja. Torej zavedati tudi, da gotovo obstajajo uradne ure, ki obstajajo kot podporne strukture. Skupine začeli to prihaja nedelja. Najpomembneje pa je, če se počutiš tako, da to ni svet za vas, Zavedajo se, da res ne vzemite čas. In če ne bi bilo za to priložnost pred leti me jemanja razred / neustreznosti, Iskreno, jaz ne bi nikoli niti stopil v razredu. In lahko spremenite do, recimo, 5. ponedeljek v letu, tako da, če ste na robu zdaj spoznali, da namesto glavo v nekaterih drugih vodah v celoti, Ne samo meni, gotovo se preusmeri na / neustreznosti. Tudi tu ni ravno ta kultura tukaj na Harvardu sprejemati stvari / neustreznosti ker vsi res želi doseči ali presegla, vendar odkrito povedano, to je čudovit način, da poskuša nekaj iz da morda ne poznate, pa boste na koncu delaš, v večini primerov zelo dobro, morda veliko na svoj presenečenje. In bolj konkretno, kaj si mislim o ustreznosti / neustreznosti običajno počne, še posebej, kot ste verjetno doživeli s pset0, če daš na 10 ur, 15 ur, 25 ur na nekaj pset in ti si samo tolkel glavo ob zid in to je pridobivanje zelo pozno ponoči ampak ste posneli pset 90% poti in si ne more ugotoviti, eno stvar, / neustreznosti res potrebno rob off razreda, kot je ta, kjer lahko nekako veselo rekel: "Vem, da ni popoln, ampak sem delal mojo rit off na to, da sem kar zadovoljen s tem, kje je končal, " in da bo izpolnil pričakovanja za / neustreznosti. Torej, imejte to v mislih. V redu. Tisti med vami, ki so si prizadevale, da uporabite Harvard University Wi-Fi, vem, da obstaja CS50 SSID, Wi-Fi povezave, plava po , da boste imeli več sreče za. To je nekoliko ironično, da je geslo za to, če bi želeli, da se poskusite povezati s to Za boljše hitrosti - in nam sporočite, če to ni bolje - je 12345, vse tja do 8 ker je 8 bolj varen kot 5. Torej, če potrebujete Wi-Fi gesla, brezžično povezavo z CS50 tukaj, 12345678, in post na CS50 Pogovorite se, če imate še vedno občasne težave z omrežno povezljivostjo, in bomo o tem obvestili pooblastila, ki jih poznate, za ta prostor. V redu. Tako hitro teaser, zlasti za tiste, ki ste fan fantje ali dekleta vseh Apple stvari. Kaj sem izkopal iz nekaj let nazaj, je bila to sliko tukaj, iUnlock.c, samo zato, da bi nekako bolj konkretna in bolj zapletene nekaj več osnovnih programov C smo bili pisanja. Zato sem odprl to datoteko, iUnlock.c. To je na voljo na predavanja strani za danes. Na levi strani si lahko ogledate dolg seznam funkcij. Torej človek, ki je napisal to napisala veliko funkcij, več kot le glavni. Bil je cel kup knjižnic tukaj, če bomo začeli pomikati skozi, kaj to sploh je, je bila prva, verjamem, crack za izvirno iPhone. Ko boste želeli Bjekstvo iz zapora iPhone izvirno, kar pomeni, da untether od AT & T in dejansko namestiti posebno programsko opremo, in počnejo stvari, da Apple ne želite, da ljudje naredijo, nekdo vzel čas, da ugotovimo, kako točno bi lahko izkoristili pomanjkljivosti programske opreme, napake, žuželke, v programsko opremo Apple, in tako se je rodil iUnlock.c, - da, če ga pripravijo na računalnik in jo namestiti na iPhone , ki je bil povezan z računalnikom prek, recimo, kabel USB, To bi vam upravne ali root privilegije na vaš iPhone in pustite, da vam zal veliko vse, kar si želite. In tako je bilo to zanimivo igro mačke in miši med Apple in drugod po svetu, še zlasti če se, tako kot mnoga podjetja, poskušajo blokirati svoje stvari navzdol, tako da lahko le to z njim, kaj nameravajo. Ampak hvala za ljudi, kot je ta, in razumevanje nizki ravni podrobnosti - in v tem primeru C programiranje - in veliko poznanih konstruktov da smo začeli igrati z njimi boste lahko resnično vzvoda strojne opreme na način, ki vam ustreza, in ni nujno, da nekaj podjetij subjekt. Tako na primer, nimam pojma, kaj vse to počne, ampak GetVersion zveni zelo enostavno, in izgleda, da je to funkcija, ki je napisal ta oseba. To traja neko celo število kot argument, ne vrne ničesar, vendar se zdi, da z zanko za zanko tukaj in če je pogoj, če premoru stanja, in nekako se nanaša na različico številk, če se pomaknite navzdol čeprav je veliko teh ključnih besed se bo novo. In tam je cel kup funkcij tukaj še nikoli nismo videli in ne bodo nikoli videli tekom semestra. Ob koncu dneva, sledi enaka pravila in logiko, da smo se igrali z doslej. Torej, to je sedaj prestar za crack vaš iPhone 3s ali 4s ali kmalu 5s teh dneh, vendar vem, da je vse zelo izhaja iz tega sveta, ki smo se vrgli v. Oglejmo pogled na malo bolj preprost primer: ta, da se samo ogreti z nekaj sintakse ter tudi nekatere druge vrste podatkov da smo govorili, niso pa res videl v C. To je datoteka z imenom positive1.c, in na pripombe na vrhu, to samo zahteva, da si zagotovi pozitivno število. Torej je primer do-while zanko, ki je prijazen do uporabnikov interaktivnih programov , kjer boste morali povedati, da uporabnik nekaj storiti, in če ne sodelujejo kričiš na njih ali zavrne njihov prispevek. Zadeva točke: bom naredil linije 19 do 24 tako dolgo, dokler uporabnik ni dal pozitivno število. Ta podrobnost je tukaj na liniji 18, zakaj sem nad tem razglasila n celo večkratno gradnjo v nasprotju z tik ob liniji 22, kjer sem se dejansko skrbi, da bi dobili n? Ja. [Študent] Področje. >> Ja, tako je to vprašanje obsega. In v smislu navadnega je, kaj se nanašajo na področje? Ja. >> [Neslišno študentski odziv] >> Lahko govoriš malo glasneje? [Študent] Če imate dostop do te spremenljivke. >> Odlično. Če imate dostop do določene spremenljivke. In na splošno pravilo palca je bila doslej, da je obseg del spremenljivke je opredeljena z najnovejšimi zavite oklepaje, ki ste jih videli. In tako v tem primeru, če sem naredil napako razglasitvi n na liniji 22, ki bo linija deluje. Rad bi dobil int, in jaz bi ga v tem spremenljivko n, v vrstico 22, vendar pa bi vrstico kode, ki zdaj nimajo pojma, kaj sem govoril? >> [Študent] 25. [Malan] 25, in se izkaže, 24, pa tudi zato, ker v tem primeru ne spada med zavite oklepaje. Torej samo malo nadloga, ampak zelo enostavno rešiti tako, da preprosto razglasi spremenljivka zunaj same funkcije. Bomo videli kasneje danes lahko še en korak naprej in bi lahko celo malo leni. In to ni priporočljivo, da se na splošno, ampak lahko bi celo dobili leni in dal spremenljivko na svetovni ravni, da se tako izrazim, ne znotraj funkcije, ne znotraj zanke, ampak samo datoteko, izven vseh funkcij ste napisali, kot sem tukaj na spletu 15. To se običajno namrščil, vendar zavedaš, da je to rešitev, včasih na druge težave, kot bomo videli na koncu. Za zdaj ga bomo kar tako pustili, pa da vidimo, če lahko to zapišemo Samo začeti izražanje sebe malo drugače. Ta program, tako da je jasno, je positive1. Naj gredo naprej in tukaj v moji terminalsko okno, da positive1, Enter. Prevede v redu. Jaz grem teči positive1, pritisnite tipko Enter. Zahtevam, da mi daš pozitivno celo število. Jaz bom rekel -1. To ni delovalo. 0, 99. To se mi zdi za delo. Morda ne najbolj strog preskus, najmanj pa je lepo duševnega zdravja prijava da smo na pravi poti. Torej, zdaj pa grem naprej in odprite različico 2 tega, in kaj je drugačen že? Izvaja isto stvar, ampak kaj skakali kot očitno tokrat drugače? Ta bool v zeleni barvi. To je poudarjeno v zeleni barvi, je to ključno besedo znan kot int, ki je vrsto podatkov. Saj to, da ni vgrajena v vseh različicah C. Morate tudi posebno knjižnico. V našem primeru sem vključil CS50 knjižnico, tako da imamo dostop do int. Toda v vrstico 18, se zdi, da ima logično vrednost, tukaj imenujejo hvaležen. Lahko bi imenoval ničesar, ampak sem klicala, da hvaležen samo da nekako prenesti nekaj pomensko pomen. Torej, najprej na liniji 18, jaz sem hvaležen, očitno ne ker je logično vrednost hvaležen initialized na false v skladu 18. In potem se zdi, kaj sem naredil tukaj v vrsticah 21 do 23 Pravkar sem se nekako predelajo mojo logiko. Torej ni funkcionalno drugačen, ampak v vrstico 22 Zdaj pa preveri, če je uporabnik int pod pogojem, večji od 0, potem pa sem preprosto spremenite vrednost hvaležen, da res. In zakaj sem to storil? Ker je v skladu 25, očitno bom preverijo stanje. Ali to zanko, medtem ko je hvaležen, je napačen. Zato sem predlagal, da je to alternativa različici 1 ker je vsaj malo bolj intuitivna morda, da je malo bolj utemeljena v angleščini. Torej, naredite naslednje ko nisi hvaležen, ali pa hvaležen, je napačen. In tokrat tudi jaz očitno ne skrbi, da se spomnimo, kaj si ga vnesli v ker obvestilo ni spremenljivka n, tako da pravzaprav malo belo laž tam. Funkcionalno je program nekoliko drugačna, ko bomo prišli do dna ker jaz ne spomnimo, kaj je n. Ampak sem hotel dokazati, da sem tudi, da čeprav smo videli GetInt GetString in se uporabljajo na desni strani enačaj doslej tako, da se spomnimo na vrednost, tehnično, to ni nujno potrebno. Če iz kakršnega koli razloga preprosto ne zanima, da shranite vrednost, želite samo preveriti vrednost, opazite, da smo lahko enostavno napisati, da je to GetInt, paren odprta, blizu paren. Ta funkcija vrača vrednost, kot smo bili pravi. To se dogaja, da vam vrne int. In tako, če menite, psihično se to dogaja, ko sem tipa v 99, GetInt vrne številko 99, in tako konceptualno, to je, kot da moja koda bilo dejansko to. Torej, če je 99 res večje od 0, potem postane res hvaležen, potem linija 25 se zaveda, ooh, smo storili zato, ker sem zdaj hvaležen, in v skladu 26, preprosto rekel: "Hvala za pozitivno celo!" karkoli se je zgodilo, da je. Zdaj pa naredimo rahlo skladenjsko sladkorja tu, tako rekoč. Bomo videli, če bomo lahko počisti to vrstico 25 s tem tretji in zadnji varianti v positive3. Obvestilo edina razlika je, kaj vrstico kode? >> [Študent] 25. >> [Malan] Ja, 25. In nikoli nismo zares videl ta trik samo še, ampak nismo videli klicaj v ponedeljek, kar pomeni kaj? >> [Študent] Ni. Ne >> ali negacija. Tako da Boolova vrednost in flip svojo vrednost. Res postane false, false postane resnica. Torej je to, jaz bi predlagal, je še malo bolj intuitiven način pisanja kode ker sem še vedno inicializirati hvaležen za lažno, še vedno naredite, Sem iz hvaležen res, ko pride čas, zdaj pa res samo prevesti to kodo ustno leve proti desni, while (hvaležna!), ker poka ali klicaj pomeni pojem ni zato pa ni hvaležen. Torej, še enkrat, da nismo uvedli nobenih novih konceptov na sebi. Pogovarjala sva se o Booleans nazaj, ko smo igrali z Scratch, toda zavedati, zdaj pa smo lahko le začeli pisati svojo kodo na več različnih načinov. Torej, še posebej, če ste pset1 vrsta bori, da ugotovimo, kako, da napišete nekaj program, Možnosti so, da ste v srečo, ker ne more biti poljubno število rešitev da lahko naletite na. Na primer, to je samo 3 za celo najpreprostejši programov. V redu. In zdaj opozarjajo na ponedeljek smo odšli na to opombo s izračunani vrednosti. Torej, za zelo prvič smo pisali program, ki ne le imela glavno; ima tudi svoj lasten funkcijo, ki sem ga napisal tukaj. Torej, v skladu z 31 34 sem izvedel kocke funkcijo. To ni zapletena. To je samo * a * v tej zadevi. Toda, kaj je pomembno pa je, da sem ob vložek v obliki in sem vrnil izhod v obliki * a *. Zdaj sem imel možnost, tako kot sem se z prinf samo, za klic te funkcije tako, da zahteva funkcijo kocke. In kocka funkcija traja nekaj vložek, in kocka funkcija vrne neko moč. Nasprotno, le printf naredila. To ni vrnil vse, kar smo skrbeli, čeprav je namenjen le-ta vrne vrednost; si ponavadi prezreti. Printf pravkar naredil nekaj. To je stranski učinek tiskanja na zaslonu. V nasprotju s tem moramo kocke funkcijo, ki dejansko vrne nekaj. Torej za tiste, seznanjeni s tem, da je dokaj enostavna ideja. Toda za tiste, ki še ne poznate te ideje poteka v vhodov in izhodov dobili nazaj, poskusimo le nekaj super enostavno. Ali kdo udobno prihaja na oder za kratek čas? Moraš biti zadovoljni s kamero na vas. Ja? Ok. Kako ti je ime? >> [Študent] Ken. >> Ken. V redu. Ken, pridi gor. Ken se bo funkcija vrste tukaj. Pojdimo naprej in to je to. Gremo malo domišljije. Me veseli, da sva se spoznala. Dobrodošli v središču pozornosti. V redu. Gremo ta gumb tukaj. V redu. Torej, tukaj imate sodobno tabli, in kaj sem jaz, je glavna funkcija, na primer, in nimam iPad v moji roki. Ne spomnim se, kako - No, ne morem reči. Jaz nimam dobrih rokopis, in da zato hočem natisniti nekaj na zaslonu za mene. Jaz sem pa glavni program, in bom, da vam to povem tako, da ga v mojem pisanju piščanca praske in nato mimo vas vnosa. Tako neumno, čeprav je ta vaja je pojem funkcij in kliče funkcijo in vračanje funkcijo res izvira do tega. Jaz sem glavni, pravkar sem napisal printf, citiram, konec citata nekaj na zaslonu, Tečem ta program, in takoj, ko dobi printf pozval, se vzame en argument ali en parameter včasih med dvojnimi narekovaji. Tukaj je ta argument. Bom gre v Ken. Je črna skrinjica napisal nekaj več leti , ki očitno ve, kako natisniti stvari na zaslonu. Torej izvesti. To ni slabo. Zelo dobro. Torej, zdaj je naredil Ken izvršitve. Ali je potrebno, da bi mi karkoli? Saj ne, da smo videli doslej. Spet printf, dejansko vrne število, vendar bomo prezreti, da za zdaj saj nikoli nismo uporabljali. Tako da je pri Kenu. In zdaj glavni prevzame nadzor programa ponovno ker je ta vrstica kode, printf, se opravi izvršitve. In gremo o naši poti, izvajanje kakršne koli druge linije so tam. Torej, zdaj poskusimo nekoliko drugačen primer. Tokrat sem dajmo 1. počistite zaslon, in tokrat bom naredil cubing funkcijo, tokrat pa pričakujem, da bo izhodno vrednost. Torej, gremo naprej in to je to. Zdaj imam vrstico kode, ki pravi x dobi kocko x. Vrstica kode, odpoklic, izgleda takole: x = kocka (x); Torej, kako se bo to delovalo? Gremo naprej in dal bel zaslon znova. Jaz bom zapisal zdaj vrednost x, ki je v tem trenutku zgodi, da se, recimo, 2 naj bo enostavno. Sem zapisal na list papirja, vrednost 2, kar je moja vrednost x. Sem ga predati Ken. >> In sem napisal odgovor? >> Ja, kaj je samo napisal odgovor. Ok. In sedaj ima vrniti mi nekaj. Popolno. Lepo segue. Torej, zdaj mi roke nazaj na vrednost 8, v tem primeru, in kaj naj naredim z njim? Pravzaprav - poglejmo, dobil to pravico. Kaj bom z njim? Zdaj bom izkoristil to vrednost in dejansko ga shranite v teh bitov pomnilnika. Ampak opazil sem nekako borila tukaj. Jaz sem malo zmeden, saj kje sem dejansko napisal vrednost x, ker tisto, kar sem pravkar naredil, je fizično ročno Ken kos papirja, ki je imel vrednost 2, ki je bila x in seveda, to je natančno tisto, kar se je zgodilo. Tako se izkaže, da je, ko kličemo funkcijo in hodite v argumentu kot zdravo, svet ali hodite v argument kot 2, Na splošno ti gre v kopiji te trditve. In tako kot sem napisal številko 2 tukaj, in ga izročil Kenu, da je pomenilo, da sem še vedno kopijo vrednosti 2 nekje saj res, zdaj, ko sem prišel nazaj na vrednost 8, moram iti nazaj v RAM in dejansko napišite 8, kjer sem nekoč imel številko 2. Tako vizualno, se spomnite tega pojma poteka v dobesedno kopijo vrednosti. Ken pa njegova stvar, mi roke spet nekaj - v tem primeru vrednost kot 8 - in potem sem moral nekaj storiti s to vrednostjo, če želim, da ostane okoli. Torej bo vse to vrnil, da je vse preveč seznanjeni kmalu. Najlepša hvala za ta demo tukaj, Ken. [Aplavz] Zelo dobro opravljeno. Poglejmo, kako je to v končni fazi se nanaša na nekatere funkcije kliče, da smo bili tu. Naj gredo naprej in nas pripelje nazaj cubing primer tukaj. Obvestilo, da če želimo dejansko začnete jemati to še dodatno, bomo morali biti pozorni na dejstvo, da se je število x je, da je prenesel tukaj je drugačen od tistega, kar je dejansko prenesena v funkciji. Torej, še enkrat, to mimo kopija bo postal precej nem čez nekaj trenutkov. Oglejmo si na nekaj, kar ne deluje čisto prav je prazna. Grem, da gredo naprej in odprite tretji primer hroščat, ki je pomanjkljiv, po naravi in se imenuje buggy3 in izvaja swapping funkcijo. Tukaj imamo glavno funkcijo, ki je x in y samovoljno inicializiranega za 1 in 2, v tem zaporedju. Mi lahko uporabite GetInt, vendar potrebujete le preprosto vajo tako da je težko kodirane kot 1 in 2. V vrsticah 21 in 22, se očitno izpisal X in Y, 1 na linijo. Nato v vrstici 23, trdim, sem zamenjala te vrednote, pika, pika, pika. Jaz očitno poklicati funkcijo v skladu 24 ti swap, ki traja 2 argumente. To je popolnoma zakonit, za funkcije, da se 2 argumente. Videli smo printf to že. Torej, zamenjava očitno meni, X in Y, in kot že ime pove, Upam, da se bo zamenjal te 2 vrednosti. Torej trdim na liniji 25 "zamenjali!" in sem ponatis x in y ob predpostavki, da ste bili dejansko zamenjani. Ampak, če sem dejansko zagon tega programa - naj odpre terminalsko okno, dovolite mi, da buggy3 - kot že ime pove, to ne bo dobro končalo ker ko sem pritisnite tipko Enter, opazite, da je x 1, y 2, in še na koncu programa, so še vedno v bistvu isto. Torej, temelji na dokazu pravkar z Ken, kaj se pravzaprav dogaja? Naj se potopite v to swap funkcijo. To je super kratki. To je le nekaj vrstic kode dolgo. Toda kaj je temeljna težava temelji na preprosti zgodbi povedal tukaj s Ken? Zakaj je zamenjava pokvarjen? [Študent] si shranite v kopijo, ne spremenljivke. Točno tako. Mi smo za shranjevanje kopijo, ni je spremenljivka sama. Z drugimi besedami, zamenjava očitno traja 2 argumente, int, in se je samovoljno imenuje in b, in tukaj sem opravil v x in y, ki so oziroma 1 in 2, ampak jaz ne dobesedno poteka v x, ne bom dobesedno poteka v y, Jaz sem mimo kopijo x in kopijo y. To je skoraj tako, kot da ste kopirali in prilepili v zamenjavo vrednosti, ki jih želite, da se dejansko manipulira. Torej, če je to tako, ko sem program za začetek izvršitve linije 35, nato 36, ko pridem v skladu 37, na tej točki v zgodbo, kaj je vrednost? Na tej točki v zgodbo, linija 37, kar je vrednost v tem trenutku? >> [Študent] 1. [Malan] mora biti samo 1, v redu, saj je x sprejet kot prvi argument, in ta funkcija le arbitrarno kliče svoj prvi argument za. Podobno je y drugega argumenta, in to je le arbitrarno kliče drugega argumenta b. Ta dihotomija je pravzaprav precej enostavno razložiti. Premisli. Nihče od nas ni srečal osebo, ki je napisal printf, tako gotovo, on ali ona nima pojma, kaj so naše spremenljivke 30 let kasneje se dogaja, da se imenuje. Torej je treba razlikovati med pravite spremenljivke v funkcijah pišete in kaj praviš spremenljivke v funkcijah kličeš ali uporabo. Torej, z drugimi besedami, ki sem jih napisal svoje spremenljivk, x in y, ampak, če je nekdo drug napisal swap funkcijo, on ali ona zagotovo ne bi vedel kaj moje spremenljivke se bodo pozval, Tako, da je to, zakaj ste to dvojnost imen. Tehnično sem lahko to po naključju, vendar bi bile še vedno sprejet kot kopije. To bi šele bilo čisto naključje estetsko, če je oseba, ki je napisal swap bila uporabljena ista imena. Torej, v tem trenutku v zgodbi, linija 37, je 1, b 2, in zdaj bom nadaljeval, da jih swap. Najprej naj dejansko to veliko bolj preprosto. Ne vem, kaj ti 3 vrstic kode so počeli. Naj samo to: b =; = b; storiti. Zakaj je to napačno, logično? To je nekako intuitivno stvar, kajne? Torej zapade b in b postane, ampak problem je, da takoj, ko je linija 37 izvaja, kaj je vrednost A in B? Enako, 1, ker ste clobbered, če se tako izrazim, ste spremenili b, da enaka. Torej, ko je linija 37 izvršena, je to super, zdaj imaš 2 kopije številka 1 znotraj te funkcije, tako da potem, ko pravite, v skladu 38 = b, ste nekako zajebali, ker ste šele dodeljevanje 1-1. Si nekako izgubila vrednost, ki jo zanimalo. Torej, v prvotni različici tega opazil, kaj sem storil. Sem imel namesto tretjo linijo kode, ki je izgledal takole. Izjavljam, začasno spremenljivko. NTU je zelo pogosto ime za začasno spremenljivko, in to je int ker je za tekmo, kaj želim narediti kopijo. I shranite kopijo notranjosti tmp, tako da, ko je linija 37 izvršen, vrednost je - hitro sanity check - 1, vrednost B je 2, in vrednost tmp je tudi 1. Zdaj sem izvesti linijo 38. Ko vrstica 38 izvaja, prevzame vrednosti b. In b je bilo: 2, tako da je zdaj 2. Torej, na tej točki v zgodbo, je 2, b 2 in tmp je 1, tako da zdaj logično, smo lahko vrednost preprosto Pljuskanje NTU je v b in smo končali. Tako smo rešili ta problem. Na žalost, ko sem zagon tega programa v tej obliki, se dejansko ne zamenjajo nobenih vrednosti. Vendar mora biti jasno, zakaj? Popravil sem logično težave s samo trenutek nazaj, ampak spet, če sem teči ta program, x in y ostajajo nespremenjene do konca izvajanja programa. [Neslišno študentski komentiraj] >> nismo vrnili ničesar, tako da je res. Vendar se je izkazalo, da je malo problem, ker sem tako daleč, Edina stvar, ki smo jo bili sposobni vrniti, je ena stvar, in to je omejitev C. Lahko samo vrne res eno vrednost, pri čemer sem nekako obtičal tukaj ker sem lahko vrne novo vrednost x, ali sem lahko vrne novo vrednost y, ampak želim tako nazaj. Torej se ne vrača enostavna rešitev tukaj. Ampak problem je bistveno zakaj? Kaj smo dejansko zamenjali? [Študent], in b. >> In b. Ampak a in b so kopije x in y, kar pomeni, da smo pravkar naredil vse to delo, sva preživela 3 minut govoril o zamenjavi funkcije in vse 3 teh spremenljivk, in to je super, popolnoma prav v izolaciji, a in področje B je le, da je v teh vrsticah tukaj. Torej, tako kot za zanke, če ugotovi, celo število i notranjost za zanke, Podobno, če ste razglasitvi in ​​b notranjost funkcije, ki ste jih napisali, oni so veljavna samo znotraj te funkcije, kar pomeni, da takoj po zamenjavi storil Izvršitveni in gremo od vrstice do vrstice 24 25, so x in y ni spremenil. Pravkar si zapravil veliko časa delili kopije spremenljivk. Tako se izkaže, da je rešitev za to dejansko ni očitno. To ni čisto dovolj za vrnitev vrednot, saj bomo lahko le vrne vrednost 1, in res želim, da bi zamenjali x in y sta ob istem času, Tako se bomo morali vrniti k temu. Toda za zdaj ugotovili, da je vprašanje bistveno izhaja iz dejstva, da sta A in B kopije in so na svojem področju. Poskusimo rešiti to na nek način. Naj se dejansko pomaknete nazaj in odprla, recimo, 1/4 varianta to, buggy4. Kaj praviš na to? To je podobno, vendar enostavnejši problem pogledati, preden bomo stab na to rešitev. Ta program se imenuje prirastek, in je očitno inicializira celo število x, 1 v skladu 18. Nato sem trdijo x 1, nato pa sem trdijo, "povečevanje ..." Nato sem poklical prirastek, nato pa v vrsticah 22 in 23, trdim, da so se postopoma povečuje, Trdim x Zdaj je, kar je - 2, verjetno -, vendar je ta program nečistnik. V čem je težava? Ja. >> [Neslišno študentski odziv] >> Točno tako. Tako je bila razglašena x, seveda, na spletu 18. To je znotraj zavitih oklepajih je glavni. Torej preprost odgovor tukaj je, da medtem ko x obstaja tukaj, ne obstaja v skladu 32, tako da je ta program dejansko sploh ne bo prevesti. Prevajalnik, ko sem poskusil priprave tega kodeksa se bo vpij name o nekaterih neprijavljeno identifikator ali nekaj v tem smislu. V bistvu, dajmo poskusiti. To je lahko buggy4. Tukaj je. Uporaba "x" neprijavljeno identifikator v skladu 32. In dejansko, bodimo bolj jasno danes, tako da je to koristno V uradnih ur in doma. Obvestilo, da je malo cryptically napisal. Toda dejstvo, da je Jek vpil na nas, pravijo buggy4.c: 32:5, je celo uporabno. To pomeni, da je napaka na liniji 32 na položaju 5 znakov. Torej 1, 2, 3, 4, 5. To je v resnici, kje je problem. In tudi preveč, ne pozabite na uradnih ur in doma, sem srečen tukaj. Imam samo eno napako. To se dogaja, da je relativno enostavno popraviti. Ampak, če boste dobili celoten zaslon poln ogromnega sporočil o napakah, ponovno spoznali, da bi Najnižja eno samo simptomatsko z vrhunskim 1. Torej vedno lovil svoje napake od zgoraj navzdol saj lahko samo verige daisy učinek , ki predlaga, da imate tako več težav, kot jih dejansko storiti. Torej, kako bi lahko to popravimo, če je moj cilj je, da prirastek x? >> [Študent] Naredite x globalna. Ok, tako da lahko naredimo x globalna. Oglejmo bližnjico, ki sem opozoril že prej, ampak vraga, smo morali hitro popraviti, Tako recimo int x tukaj. To naredi x globalna. Torej, zdaj je glavni dostop do njega in prirastek je dostop do njega, in zato naj gredo naprej in zbira sedaj. Naredite buggy4, Enter. Zdi se, da zdaj pripraviti. Naj teče buggy4. In zdi se, da dejansko delajo. To je ena od teh stvari, ki jih je naredil kot sem rekel, ne tako kot jaz, kot sem pravkar naredil tukaj, ker na splošno naši programi bodo dobili veliko bolj zanimivo in veliko dlje, kot je ta, in če je vaša rešitev za težave v življenju je samo dal vse spremenljivke na vrhu datoteke, Zelo hitro se programi dobili grozljivo težko upravljati. To postane težje izmisliti nove imeni spremenljivk, postane težje razumeti, kaj spremenljivka kaj počne, in tako na splošno, da to ni dobra rešitev. Torej, kaj je to bolje. Ne želimo uporabiti globalno spremenljivko tukaj. Rad bi prirastek x, tako da sem lahko očitno - Na koncu dneva, to je nekako neumno zgodbo, ker smo ravno to - če pa nisem vedel o tem operaterju, ali pa ni bilo dovoljeno spremeniti v main sama, kako pa bi lahko izvajala Ken sem tokrat ne kocko, ampak prirastek? Kako spremenimo te stvari tukaj? Ja. [Študent] Pass v x in se nato vrnite [neslišno] >> Dobro, dobro. Torej, zakaj ne bi šel mimo mene in x in potem ne vrne, Zakaj ne bi preprosto ne vrne x + 1. Nekaj ​​več stvari je tukaj spremenilo. Sem na pravi poti. Kaj še moram poteg? Nekdo drug. Ja. [Neslišno študentski odziv] Moram spremeniti vrnitev vrsto prirastka, ker ne nična. Praznina pomeni nič se vrne, ampak zdaj je jasno, tako da mora to spremeniti, da - >> [študentski] int. int biti v skladu s kar sem dejansko vrnil. Zdaj nekaj drugega je še vedno buggy tukaj. Ja. [Neslišno študentski odziv] >> [Malan] Torej moram prirastek x? [Neslišno študentski odziv] >> [Malan] Ah, tako da moram opraviti x. Torej moram narediti tukaj. >> [Neslišno študentski komentar] [Malan] Torej prototip, moram spremeniti to tukaj. Torej, to je, da postane int, to mora postati - hmm, pravzaprav imam hrošča tukaj. Spravimo tole prvi. Kaj bi to dejansko bilo? To je dobil, da je nekaj int. Lahko bi bilo x, vendar odkrito povedano, če ste začeli klicati vse vaše x spremenljivke, to se dogaja, da se vse manj jasno, kdo je kdo. Vzemiva poljubno izberete drug način poimenovanja za moj pomočnik funkcij, funkcije pišem. Bomo rekli, ali pa bi ga lahko imenovali - Naj bo število še bolj izrazita. Torej moram vrniti ne glede na število plus 1, in zdaj moram spremeniti 1 druga stvar tukaj in še ena stvar, ki sem gor. Kaj moram spremeniti na spletu 21 prvi? >> [Neslišno študentski odziv] [Malan] Imam jih dodeli x. Ne morem poklicati prirastek (x). Moram se spomniti odgovora s spremembo vrednosti x na levi strani. In čeprav je x sedaj na levi in ​​desni, to je popolnoma v redu ker postane desna stran izvrši, potem pa dobi plopped v levem stvar - x v tem primeru. In potem končno, to je enostavno popraviti zdaj. To naj bi samo tekmo, kaj je spodaj, int številko. Torej cel kup sprememb za res neumno funkcijo vendar reprezentativen stvari, da bomo vedno bolj želijo storiti. Torej, da buggy4. Sem nekje zajebali. Oh, moj bog. Pet napak v 6-line programa. Torej, kaj je narobe na liniji 18, značaj 5? Torej moram prijaviti to, int. Pa poglejmo. Obstaja cel kup drugih napak. Oh, moj bog - 19, 18, 21 -, vendar še enkrat, kaj je samo počistite zaslon, Nadzorna L tukaj in ponovitev Jek. Torej 5 problemov, ki je pravzaprav zgolj 1. Torej, zdaj pa teče buggy4, Enter. Uh, je bilo x poveča pravilno. V redu. Vsa vprašanja o tem, kako prirastek številke? Ja. [Neslišno študentski vprašanje] >> Dobro vprašanje. Kako to, da sem lahko samo spremeniti x na številko in program bo takoj vedeli? Še enkrat, mislim, da je to abstrakcijo. Torej, če sem glavni in Ken je prirastek, odkrito povedano, mi ni mar, kaj Ken zahteva njegov iPad. Ni mi mar, kaj se kliče vse, kar ima opraviti z njegovim izvajanjem te funkcije. To je podrobno izvajanje, da sem glavni, ne bi bilo treba skrbeti. In tako preprosto spreminjanje dosledno znotraj funkcije - številka in številka tu tu - je vse, kar traja tako dolgo, kot sem prevedem. To je neke vrste všeč, če menite, da o mnogih izmed nas, tiste, ki ste dovoljenj voznika ki so posledica ali če ste še vozi v avtu, večina od nas nima pojma, kako avto deluje pod pokrovom. In dobesedno, če odpreš pokrov motorja, večina od nas - vključno z mano - ne bomo zares vedeli, kaj smo iskali na, nekako tako kot bi se počutite s takimi stvarmi tem zdaj. Ampak ne bomo res morali skrbeti, kako avto deluje, nimamo na skrbi, kaj vse palice in bati in kablov v notranjosti vozila dejansko delaš. Torej nekaj podobnega, kar imenujete bat ni pomembno, tukaj, v tej zadevi. Enako ideja. Ja. >> [Neslišno študentski vprašanje] Če obstaja več uporabe variabilnega trenutku Xa nazaj da bi programer, imate, da jih spremenite povsod. Ali pa bi lahko dobesedno storiti datoteke, Meni in nato Najdi, Zamenjaj - nekaj takega - vendar boste morali sami temi spremembami. Moraš biti dosledni. >> [Študent] Če obstaja več spremenljivk [neslišno] Zlasti, da tako kot tukaj, če je to int drugo številko? >> [Študent] Pravilno. [Malan] Ja. Da bi zadeve, ko kličete funkcijo. Torej, če sem klical prirastek tu z nekaj vejicami nekaj, obstaja neposredna preslikava. Prva spremenljivka, kar se imenuje, je naredil kopijo prvega argumenta tam. Žal mi je. To ne bi smelo biti oklepaj. Drugi argument poravna z druge. Tako da, ja, zadeve. V redu. Žal mi je. Vzel sem dolgo pot do tja. Druga vprašanja? V redu. Torej, da vidimo, če ne moremo naslikati sliko, kaj se pravzaprav dogaja Pod pokrovom motorja, tako rekoč. To je pravokotnik, ki lahko predstavljajo pomnilnik računalnika. Tudi če nimate pojma, kako spomin deluje in kako deluje RAM, vsaj predpostavimo, da imate grozde njim v teh dneh. Imaš megabajtov to, da imaš GB njo, in vemo, da iz tedna 0 Bajt je samo, kaj? >> [Študent] 8 bitov. 8 bitov, kajne? Torej 8 ničle in 1. Torej, če ima računalnik koncert RAM, 2 nastopov RAM-a v teh dneh, imate milijard 2000000000 bajtov pomnilnika ali približno 8 milijard evrov oziroma 16000000000 bitov notranjost računalnika. Za razliko od na primer malo Woolyja Willy, to ni magnetni delci, tipično več. Vedno bolj - v prenosnih računalnikih najmanj - to je Solid State diski SSD,, Samo, da nimajo gibljivih delov. To je vse elektronsko. To je vse električne energije, ki temelji. Torej menite o tem pravokotniku kot samo predstavlja 1 ali 2 GB pomnilnika, ki jih imate. Torej je kos pomnilnika. V svetu računalništva je nekako ločen kose pomnilnika za različne stvari. Na primer, če je to računalnika RAM, kot ga je predlagala pravokotnik tam, Izkazalo se je, da je po dogovoru na vrhu vašega RAM-a, če se tako izrazim, Na splošno, kaj se ti besedilo segment. Tisti, ki so 0s in 1s, da ste pripravljeni. Torej, ko smo si ogledali pod pokrovom, kaj a.out je Vse to 0s in 1s, ko zaženete program, tisti 0s in 1s so obremenjena s trdega diska v nekaj, kar ti RAM, in v RAM oni dajo na vrhu. Medtem pa imate tudi druge stvari: Inicializacija podatkov, ustavljanja podatkov. Ti 2 redi pomnilnika se nanašajo na globalnih spremenljivk, ki jih ne uporabljate pogosto ampak včasih, če boste to storili, končajo tam kot dobro. Potem je tu še nekatere druge stvari: spremenljivke okolja, ki jih ne bodo porabili veliko časa za, potem pa bo 2 pomembni stvari, da pridejo nazaj skozi semester, kup in kup. Tako je večina spomin računalnika pridržane ko teče program za nekaj, kar se imenuje sklad, in nekaj, kar ti kup. Ne bomo govorili o kupu danes, pa bomo govorili o svežnju. Sveženj naj bi pričarali vizualno izmed restavracij pladnje obrokov dvorana v Parlamentu Mather ali kjer koli se zgodi, da je tam, kjer jedilnica osebja, ki jih čistijo vsak dan, jih zlagajo od tal gor, in podobno, v spomin pa je ta ideja, ki postavlja nekaj na kup, dajanje kaj na kup, dajanje nekaj na kup. In kaj mislimo s tem? Naj povečaj le na spodnji polovici slike, računalnika RAM, predlagati naslednje. Izkazalo se je, da ko zaženete program, kot a.out oz Hello - ne glede na program, ki ste napisali - spet so se 0s in 1s naložiti s trdega diska, ki je dolgoročno skladiščenje, tam tudi ostane, tudi če si potegnite vtikač, naložen v RAM. RAM je hitrejši od trdih diskov - to je manjša od trdih diskov - ampak to je, kadar programi v živo, ko ste jih izvaja. Torej dvokliknete program na Mac ali PC, je to naložiti s trdega diska v RAM. Takoj, ko je naložen v RAM, 0s in 1s iti na poti na vrh, ti besedilo segment, nato pa takoj, ko se začne program dejansko deluje, Glavna funkcija se imenuje, in glavni, kot smo videli, je pogosto lokalnih spremenljivk, in ima ints in godala in znakov, in podobno. Torej, če vaš program, ki ste napisali ali program, ki ste jo dvakrat kliknili uporabljajo nekatere spremenljivke znotraj glavnih, končajo na dnu kup pomnilnika, tako rekoč. Bolj natančno, kaj to dejansko pomeni? To samo pomeni, da če smo bili, da bo število bajtov RAM-a v računalniku, opazite, da je to morda bajt številka 0, to je lahko bajt številka 1, 2, 3, 4, 5, 6, vse tja do 2000000000, bi bilo pa vse tja gor na vrhu. Torej, z drugimi besedami, ko govorimo o RAM in spomin glede bajte, to samo pomeni, da se je nekdo odločil, kaj oštevilčite vsako od teh kose pomnilnika. Torej, ko boste potrebovali 32 bitov za notr ali pa boste potrebovali 8 bitov za char, kje se končajo v spomin? Konceptualno so pravkar končali na dnu te stvari imenovani dimnik. Ampak kaj je zanimivo, zdaj, ko glavna zahteva funkcija - Predvidevam funkcijo imenovano foo, le poljubno ime - kaj se zgodi, glavno je na dnu te kup spomin; foo je zdaj dal na vrhu glavnega pomnilnika. Torej, vse lokalne spremenljivke, ki se končajo foo nekakšno konceptualno poleg tistih v glavnem. Če foo poziva novo funkcijo, imenovano bar, te spremenljivke končal tukaj. Če vrstica zahteva nekaj drugega, tukaj, tukaj, tukaj. Torej, kaj je zanimivo teče program, ki je, kot praviš funkcije in ker te funkcije klic funkcije in tiste funkcije, kot klice funkcij, si zgraditi to kup funkcij v spominu. In le enkrat vrne se začnete dobili ta vrnil spomin. Torej, eden izmed najlažjih načinov, da zmanjka pomnilnika v računalniškem programu je, da napišete funkcije, ki jih nikoli ne vrnejo. Tako na primer, kaj je pokazati toliko z namerno buggy programa. Naj gredo naprej in ne vključujejo # , int main (void) in jaz bom naredil, medtem ko (2> 1), ki verjetno ne bo nikoli sprememb na nas, in mi daj zdaj in ne printf. Pravzaprav, da se dogaja, da je manj vizualno zanimive. Naredimo to. Za int i = 0; i> 0 - dajmo to napako - i + +. In da ne printf tukaj. Naj praksi, kar sem pridigal. Pa način tu, nična refren, in bomo rekli, int i, in potem bom printf rekel - ne, naredimo to bolj zanimivo. Naj se dejansko ne natisne ničesar. Naj samo to: Refren (i). V redu. Torej, to je Otroški voziček zakaj? Delam to gor, kot sem šel, ker je program dejansko ne storiti ničesar interesov. Ampak to ni cilj. Cilj je, da napišete program, katerega glavna funkcija pa kaj, očitno? Sam klic. In pravzaprav ne potrebujemo zanko. Naj tudi poenostaviti to samo zato, da ne pozabimo na res temeljne napake. Glavna zahteva chorus peti nekaj refren, Potem pa sem naredil nekaj neumnega in sem imel refren refren klica Predvideval sem, da zato, ker je nekdo je, da bo njegovo izvajanje mogoče, in zdaj se to ne bo še prevesti. Moram narediti kaj? Rabim prototip, spomnim se. Torej moram imeti gor void refren (int i); Torej, zdaj, če grem dol - pravzaprav, kaj je uporabiti večje okno. Gremo naprej in da refren. Gremo naprej in da refren. Uporaba neprijavljenega identifikatorja i. Oh, to je bilo neumno. Ne potrebujemo argument. Naj samo to. Želim si, da bi začeli na ta način. Bilo bi veliko lažje napisati program. Tukaj. Zdaj greva v mojo terminalsko okno, zaženite Jek in gremo. To je bilo res hitro. Kaj se je dejansko zgodilo, kajne? No, zdaj bom dodati tiskanja linijo, tako da bomo videli. Naj povem printf ("Tukaj sem") - brez spremenljivke. Bomo pustiti tako. Naj bo ponovitev. Naj ponovitev refren. In ... daj no. Kar naprej. Kot prahi, zakaj je ni doživel še? Segmentacija je zgodila napaka, super hitro, preden. [Neslišno študentski odziv] >> Točno tako. Zato je potreben čas za tiskanje, kajne? Samo traja več dela o delu računalnika. In to je to: Segmentacija napaka. Torej, opazil, kako hitro delovanje programov. Če ne tiska nič, super hiter. Ampak še vedno imam to napako segmentacije, ker kaj se je dogajalo? Če menite, da o tem, kako je vaš računalnik pomnilnik je določeno, To se zgodi, da je glavna, ampak tukaj kaj je samo to imenujemo refren, in recimo ta refren. In zdaj, če jaz moje estetiko v redu, to je samo hotel reči, zbor, zbor, zbor, zbor, zbor, zbor, zbor, ad nauseum, in na koncu, kaj se bo zgodilo? Če velika slika, dobesedno, je to, kaj se je pravkar zgodilo konceptualno? Sveženj prekoračitve kup. Ali, še huje, si prekoračil vse, vključno z besedilom segmentu, ki je 0s in 1s, ki predstavljajo svoj program. Skratka, to je samo super, super slabo. Vaš program je spiraled izpod nadzora. Tako boste uporabljali več pomnilnika, kot si namenjen Vse zaradi neumne napake v tej zadevi, ali je v tem primeru zelo namerno naredil Funkcija se kliče. No, to še ni vse slabo. Funkcije se kliče dejansko ima veliko moč, če ga uporabljate pravilno. Nisem ga uporablja pravilno tukaj. Torej, to ni vse slabo, ampak dejstvo, da nikoli nisem ustaviti sebe kliče Temeljna slabost tukaj tega programa. Torej, kam gremo z vsem tem? Kaj se v resnici dogaja? Ko sem poklical prirastek funkcije, kot smo počeli v tistih primerih, Imam vrednost kot 1, da sem noter padejo Grem mimo v kopiji številka 1, tako da se zgodi naslednje. Pojdimo v prirastka na primer tale tu. Evo, kaj se pravzaprav dogaja. Ko sem poklical prirastek in sem mimo in x, slikovno, kaj se dogaja tukaj je ta. Če sem imel vrednost 1 shranjene tukaj in dejansko sem poklical prirastek, ki se zdaj imenuje zbor - iPad me je vrgel tukaj. Recimo ta korak, in ne vemo, kaj to naslednji funkcijo bo. Torej, kaj se pravzaprav dogaja tu nekje v glavnem imam kos pomnilnika da je shranjevanje številko 1. Ko sem poklical prirastek, sem z drugo kos pomnilnika, zdaj pa imam izvod 1. Ko sem prirastek te vrednosti, to postane 2, ampak kaj se zgodi takoj, ko prirastka vrne? Ta spomin dobi samo vrnejo na operacijski sistem, kar pomeni, da vse, kar ste storili nič koristno. Za 1, ki je bil prvotno iz main je še dejansko obstaja. Torej, kam gremo s tem? Izkazalo se je, da je v spomin imate to back-to-back zaporedje bajtov , ki jih lahko dajo stvari v in izkazalo se je, da smo že videli nekaj ki vključuje dajanje stvari, back to back to back to back. Kaj je niz temelji na teden 1 teden in zdaj 2? To je samo zbirka znakov. Tako se izkaže, prav tako lahko postavite številke v spominu, Podobno lahko postavite znake v spominu. In ko smo začeli polaganje znake v spomin na hrbtni strani v back to back, Izkazalo se je, da z uporabo najenostavnejših stvari, kot za zanke ali while zanko, lahko izbirate od leve proti desni nad znakov v nizu in jih začele vmasirajte v različnih likov v celoti - bi lahko postala b, lahko postanejo b c - tako da se na koncu lahko vzamemo angleški stavek, ki dejansko ima smisel in pretvorbo vsakega od teh pisem 1 v času s hojo skozi spomin našega računalnika z leve proti desni, da bi dejansko šifriranje. Torej vzamemo 5-minutni odmor tukaj in ko se vrnemo, bomo začeli ta proces kodiranja informacij. V redu. Preden smo se potopite v nekaj CRYPTO in te stvari se imenuje nizi Naj premor za vsa vprašanja, ker se počutim, kot da sem res nekako zmedeno nekatere od teh tem. Torej, kaj je zdaj popraviti, če lahko. Pravkar smo govorili o izračunani vrednosti, smo se pogovarjali o argumentov, in smo se pogovarjali o tem pojmu, ki jih bomo vrnili v prihodnjih tednih, gledanja spomin kot cel kup zloženih teh plošč, če se tako izrazim, od spodaj gor, tako da ima vsaka posoda, ki dobi dal na kupu predstavlja funkcijo, ki je trenutno imenovan. Kakšno vprašanje? Naj postavite vprašanje tukaj. Naj poenostaviti to nazaj, kar je bil pred nekaj naše prejšnje Q & A. Dejstvo, da je prirastek ima odprto oklepajev, int številko, zaprt oklepajev - kaj int številka predstavlja? [Študent] argument. >> Argument. Ok. Toda kaj je razlog? [Neslišno študentski odziv] >> Kaj je to? >> [Študent] Nekaj, kar boste peljali noter V redu, torej nekaj, kar boste peljali noter In bolj na splošno, to je samo vhod. Če ste napisali funkcijo in to funkcijo opravlja v namen v življenju je narediti nekaj drugačnega vsakič, ko ga uporabljate, potem bi bil edini način, da se to res zgodilo, se zdi, da se ji z močjo tako da lahko narediš nekaj drugačnega s tem vhodu vsakič. Torej boste morali določiti dve stvari, ko se funkcija vhoda. Morate navesti ime, ki ga želite dati to vhod zgolj za svojo lastno udobje, tako da boste potrebovali v funkciji, ki jo sami pišete, kot sem jaz tukaj, v skladu 32. Vendar pa boste morali navesti svoje vrste, saj je C programski jezik da tako zahteva, da se, če želite spremenljivko, boste morali povedati računalnik, kaj podatkovni tip je, v veliki meri tako, da se ve, koliko bitov dodeliti za to spremenljivko ker bi bilo 6 - žal, da ne bo 6. Lahko je 16, je lahko 8, je lahko 32, celo 64, ampak računalnik mora vedeti. Zdaj, int na levi strani predstavlja, kaj je v nasprotju? [Neslišno študentski odziv] >> Kaj je to? >> [Študent] Vrsta funkcije. Vrsta funkcije, natančneje, vrsta njegove proizvodnje. Prav. Torej, ker je stvar v oklepaju predstavlja vložek, če obstaja, stvar na levi predstavlja svojo proizvodnjo. In v tem primeru, prirastek očitno vrača int, in tako int je vrnitev tip te funkcije. Kaj to pomeni, da se vrnete? Dobesedno, uporabite ključno besedo return in potem, če kaj vrača na desni strani je ključna beseda celo število, Takrat je namreč v skladu s tem, kar smo obljubili. Ti ne bi naredil kaj takega - Pozdravljen svet - ker to je niz. Očitno je, da ni celo število. Torej na kratko, breme je res na nas, programer, da je specifična o tem, kaj smo vračajo in nato dejansko iti na njeno vrnitev. Kontekst zdaj tukaj, je, da računalnika spomin GB, 2 GB - karkoli - morda je več, morda je manj, ampak računalnik ga vidi kot ob različnih oddelkov. Nekaj ​​gre dol, nekaj drugega gre gor, različne stvari gre v sredini in danes smo pravkar začeli pripovedujejo zgodbo, vendar bomo vrnili k temu daljšem časovnem obdobju. Za zdaj je le del spomina res skrbi, je del besedila ker to preprosto pomeni, da 0s in 1s Jek je izhodne. Torej, ko zaženete ukaz na tipkovnici, kot a.out ali pa dvojno kliknite na ikono na Mac OS ali Windows, tvoj program je naložen s trdega diska v RAM in to je plopped na vrhu RAM računalnika, tako rekoč. Medtem ko se vaš program zažene in glavni gets imenovane V programu, ki ga je napisal ali program Microsoft ali Apple je zapisal, koli od njegovih lokalnih spremenljivk končala tam spodaj na dnu pomnilnika računalnika. Ampak, če glavna zahteva druga funkcija, ki ima samo po sebi spremenljivk ali argumentov, se končajo nad njo. In če je ta funkcija zahteva nekaj, končajo nad njim, nad njim, nad njo. In šele ko je funkcija opravi izvršilni ne kup plošč, tako rekoč, začno nižje in nižje. In to je tisto, nato pa na kratko pojasni, zakaj, ko pokličete kocko ali pokličete prirastek, ti ​​gre v kopiji vrednosti. In kaj to pomeni slikovno je, da ste dobesedno pisati številko 1 v drugem delu pomnilnika, ki spreminja 1-2 v primeru prirastka ali do 8, v primeru kocke in nato vrgel proč, da je spomin takoj, ko je prirastek ali vrne funkcija kocke. Vprašanje. [Študent] Če so globalne spremenljivke shranijo? Globalne spremenljivke so shranjene v kaj se trenutno sprožijo inicializiran podatki ali nezaceto podatkov, Razlika je, če imate globalno spremenljivko in jo dodeliti takoj vrednosti z enačajem, se konča na vrhu tam, in če si rekel int x; brez vrednosti, se konča nekoliko nižja v RAM samo po dogovoru. Druga vprašanja? V redu. Tako bo ta slika prišla nazaj, smo dobili močnejši s tem, kaj lahko storimo z računalnikom, vendar za zdaj, imejmo kratek uvod v kriptografijo, posebna vrsta kriptografije, ki ne rešuje vseh težav na svetu vendar pa rešiti nekatere od njih. V tem primeru je tukaj imamo nekaj, kar ti skrivnost-ključi. Secret-ključi, kot že ime pove, ima svojo varnost s skrivnostjo. Na primer, če ste bili že v osnovni šoli in si mimo malo črko skrivno ljubezen za fanta ali dekle si drobljenje naprej, če želiš prenesti to sporočilo z občinstvom, verjetno ne bi napisal takšne opombo v angleščini ali karkoli vaš materni jezik. Nasprotno, lahko šifriranje ali pa morda samo jim pošljete sporočilo v teh dneh. Morda pa bi si dejansko pass jim seznanil celotnem razredu. In to storiti varno, tako da vaši prijatelji in učitelji Ne vem, kaj pišete, boste morda prišli do dokaj preprost algoritem, mladi, čeprav bi moral biti, da samo Izokrenuti besede. Torej, namesto pisanja lahko napišete b, Namesto b lahko napišete c, Namesto c lahko napišete d, in tako naprej. Ali pa bi lahko prišli do bolj zapletenega prevod pisem z različnimi črkami. Ampak ulov je fant ali dekle, ki jim pošiljate to sporočilo treba vedeti nekaj, kar je tisto, kar je očitno? >> [Študent] Kaj ste pošiljanje. Kakšna je tvoja skrivnost je, kot se je, da je kartiranje med in B-jev in c je in d'i. Ali je to samo dodal 1 za vsako od pisem, ki gredo od A do B, b, c,? Je bolj zapleten kot to? Torej vi in ​​vaš simpatijo morajo imeti te tajne informacije, vendar pa je nekako Catch-22 tukaj. Če je to zelo prvič ste pošiljanje to ljubezensko pismo z razredom, kako se ta fant ali dekle bo vedel, kaj je skrivnost tudi ni? Zato tajni ključ, crypto ne rešuje vseh težav na svetu, in tam je dejansko razmerje sem, da se bomo vrnili k koncu semester. Prav tako pa večina izmed nas ne pozna nekoga, ki dela na primer na Amazon.com, in še mnogi od nas verjetno kupil stvari na Amazon.com, in že smo se naučili, da domnevajo, da so ti e-poslovanju, varna. URL verjetno pravi https, da je morda neumno malo ključavnico ikona nekje, obstaja neke vrste kriptografije zagotavljanje podatkov o kreditni kartici med vami in Amazon.com. In vendar, če kriptografija vključuje vedo nekaj skrivnosti in še ne vem kdo na Amazon in sem zagotovo ni urejeno vse vrste tajnosti z nekom na Amazon, kako je moj računalnik ali moj brskalnik to počne? Izkazalo se je, da je druga vrsta kriptografije v celoti, da bi rešili ta problem. Toda danes, se bomo osredotočili na preproste 1 kjer se lahko dogovorite vnaprej vedeti nekaj skrivnosti kot 1 ali nekaj kartiranje med je in B-jev. In proces kriptografije splošno vključuje to. Imaš nekaj golo besedilo, prikazano tukaj na levi strani, ga boste pognali skozi neke vrste algoritem, postopek za njegovo šifriranje - Mogoče je to le postane b, c b postaja - in potem na koncu z Zakrivena. Medtem, ko vaš simpatijo prejme to skrivnost, upoštevajte, on ali ona mora nato dešifrira s splošno spreminjanje tega algoritma tako, da se vrnem golo besedilo. Obstajajo fizične inkarnacije tega. Na primer, to je skrivnost dekoder obroč, in to je prstan v smislu, da obstajata dva pokliče tukaj. Na zunanjem obodu to stvar, tam črke od A do Z, čeprav so si v naključnem vrstnem redu, in na notranji strani, tam je pravzaprav nekaj številk tako, da s tem prstanom lahko nekako obrnejo navzven, ne pa znotraj da se postavijo v vrsto črk. Od filma se imenuje Božična zgodba, boste videli, da je malo Ralphie je bil tako želijo ugotoviti, kaj je skrivnost sporočilo Little Orphan Annie je bila z njim , ki so bili posredovani, mislim, v obliki številčnih sporočil na žit polje in boste imeli, da se kopičijo vse majhne kartice, ki je prišel v žitnega polja, ste imeli, da jih pošljete na, si moral priti nazaj skrivnost obroč dekoder tako da lahko končno ugotovimo, kaj je preslikava med črkami in številkami ali črke in črke. Kako v računalnik, lahko gremo o izvajanju ali predstavlja stvari, kot je ta? Moramo priti od sebe izražanje malo bolj fleksibilno kot naši spremenljivke so doslej dovoljeno. Imeli smo ints, smo imeli znakov, da sva imela boje in v dvojicah in nekaj drugih, ampak to so posamezni kosi pomnilnika, ki v resnici ne nam omogočajo, da izrazijo stvari kot besed in stavkov in izrazov. Dejansko smo tako imenovane strune stvari, ampak obljubim, da je to res samo poenostavitev v knjižnici CS50 da smo nameravajo lupine nazaj. In tako začnimo za to tukaj. Naj gredo naprej in odpiranje datotek - Vse te datoteke so na voljo, kot ponavadi, na spletu - ti array.c rešiti problem, ki ni povezan s strunami, ampak da naslika sliko tukaj o tem, kako jih bomo uporabili nekaj, kar se imenuje polje. Matrika je podatkovni tip. To je tip spremenljivke sort, ki ima več manjših vrste podatkov znotraj njega back to back to back to back. Tako na primer, če bi želel napisati malo program, ki vam daje svoj kviz povprečje za tečaj kot 50, ki ima 2 kvizi, bi lahko zelo enostavno napisati ta program, ki temelji tudi na nekaterih snovi prejšnji teden z GetInt in nekaj spremenljivk: int quiz1, int quiz2. In to je zelo enostavno. To je morda 10, 20 vrstic kode max izvajati program da vpraša uporabnika za 2 kviz rezultatov in nato izračuna njihovo povprečje jih dodate skupaj delimo z 2, nato pa tiskanje rezultatov. Mi bi morali storiti, da kar takoj zdaj po določenem številu minut. Ampak problem je, da predvidevam, da je 50 imelo 3 ali 4 kvizi. Recimo, da ste želeli uporabiti isti program za razred, ki je imel tedensko kvizov. Pomislite na razred, ki je tedensko kvizov. Če je 16 tednov ali tako v semestru, imate zdaj 16 spremenljivk: int quiz1, int quiz2, int quiz3, int quiz4. Takoj, ko boste začeli videvati to odpuščanje, to kopiranje in lepljenje kode, da bi začeli, da bi si želel je bilo bolje tako. In na srečo, saj je nizi. Torej, kaj je to. Najprej naj vam predstavim zelo preprosta stvar, ki smo jih doslej niso uporabljali, vendar boste ugotovili, da občasno v kodi. To je tisto, kar je splošno imenujemo konstanta. Torej, to je stalnica v smislu, da se ta vrednost ne spremeni. Konvencije o človekovih pri ustvarjanju stalen je, da uporabite vse velike tiskane črke le tako, da resnično izstopa v kodi, in posebne ključne besede, ki jih uporabljate v C # je definirati. Tako smo rekli # define, nato presledek, nato pa besedo, ki jo želite uporabiti za ime konstanta je in potem je vrednost nespremenjena. Obvestilo je drugačen od dodeljevanju nekaj spremenljivko. Ni enečaju, ni podpičje. To je tisto, kar je splošno znano kot Preprocessor direktive, a več o tem kdaj drugič. Za zdaj, to ustvarja nespremenljivo vrednost, imenovano Kvizi katere dejanski številčna vrednost je 2. Torej, kjerkoli vidite, kvizi, kvizi, kvizi vsej tej zadevi, to je samo številka 2. Če gledam na glavni zdaj, da vidimo, kako to deluje. Najprej izgleda malce skrivnosten, vendar je vse stvari iz tedna 1. Vprašaj uporabnika za razrede. Kako to storiti? V vrstico 22 - to je res sočen del - izjavljam, plovec pa ne samo ena drsenje. Jaz sem razglasitvi, temveč niz plavajočo vejico vrednosti. Ta spremenljivka se dogaja, da se imenuje razrede, kot je vsebovano tukaj, ampak le del nove sintakse potem so ti oglati oklepaj. Dejstvo, da sem rekel obtoku ocene in nato oklepaj in nato številne - opazite, če je to konstanta je to tako, kot smo to naredili - to pomeni, "Hej računalnik, daj mi 2 plovce in greva skupaj jim pravimo razredov." To je v nasprotju z veliko bolj dolgočasno proces takole: float Grade1; float grade2, in tako naprej. Torej matrika nam omogoča, da izvajajo to zamisel, vendar veliko manj messily, na tak način, da lahko pišemo 1 vrstico kode, namesto, recimo, 16 za 16-tedenski semester. Nisem hotel, da težko kodo 2, ker če menite o tem zdaj logično, Predvidevam, naslednje leto CS50 spremembe 3 kvizi namesto in sem imel številko 2 tukaj, sem imel številko 2 tukaj, Imel sem tu številko 2, število 2 tukaj. To postane zelo dolgočasno in zelo težko zajebal in da se po nesreči spremenite vrednost 3 1 in pogrešam kakšno drugo vrednost 2. Zato bom namesto abstraktnih to stran, uporabite to stalnico, ki bo Kot pove že ime, se ne spreminja. In sedaj ne glede na to, ali imamo različne kvize letos ali naslednje, Pravkar sem se, da ga spremeni na enem mestu gor na vrhu. Tako, da je vse, kar je konstanta. Medtem pa nova konceptualna značilnost je, da za matriko. Tako so oglati oklepaji, da mi to veliko boje in mi omogoča skupno jim pravimo ocene tukaj. In zdaj poglejmo, kaj bom naredil. Tukaj, v skladu 24 je za začetek zanke. To je res nič posebnega. To je samo s kvizi namesto težko kodirane številke. Ampak ni nič drugačen intelektualno tam od prejšnjega tedna. To je samo printf, zato printf ("Kviz #% d od% d:") ker želim, da natisnete daj mi test, številka 1 na 2 in nato 2 od 2. Torej, to je zgolj estetski stvar. Toda zanimivo je zdaj v skladu 27. Da bi zapolnili v enem od dveh ogradi s plavajočo vejico vrednosti, boste ponovno uporabiti oglate oklepaje. V tem primeru, sem uporabljam, ker je ta zanka se je začelo z i izenačila kaj vrednost, očitno? [0] študent. >> [Malan] 0. Torej na prvi ponovitvi te zanke je, kot da sem to napisal v šifrah, ampak na drugi ponovitvi te zanke je, kot da sem to napisal v svoji kodi. Toda dejstvo, da sem z uporabo spremenljivke je kot nalašč, saj, kot že ime pove, to je različno svojo vrednost na vsaki ponovitvi tako da sem za polnjenje tem polju eno mesto naenkrat. Kaj to polje videti? Razlog, da sem prišla do super preprost pravokotnik na zaslonu tukaj, preden je bila iz tega razloga. Matrika je le kos pomnilnika sledil nov kos pomnilnika sledijo drug kos pomnilnika in tako naprej. Torej, če mi je matrika velikosti 2 v tem primeru tu, bi morala delati z vpisom v mojih rezultatov kviza kot tukaj - imam 100, glede tega, potem pa sem dobil 99, glede tega - potem ta spomin celo ne uporabljajo, saj sem samo vprašal računalnik za matriko velikosti 2. Ti trgi so še vedno tam, kajne? Imate še 2 GB RAM-a, tudi če ste le prosi za 2 plovcev. Torej, ideja je, da se nizi računalnik samo traja kos pomnilnika in nato porazdeli manjše kose back to back to back to back. In da je vse, kar je matrika. To je mejna kos notranji spomin, ki lahko dajo stvari. To se zgodi, da naredite le malo dolgočasno računanje. Če bi se pomaknite dol, to je, če sem potem ponoviti čez polje. Sem prišel s seštevanjem vse vrednosti v matriki, in potem sem uporabljati okrogle funkcije tu dejansko storiti znesek deljeno s kvizi. Ampak mi pomahal z roko si to kot nekakšen dovolj aritmetične za zdaj. Ampak vse to počne zame konec koncev se izračuna povprečje. Torej, najprej kviz plus 2. kviz deli z 2 in nato tiskanje kot notr. Ampak kaj je zdaj prehod na drug primer, imenovano niz1, ki riše podobno sliko, ampak s pomočjo vrvice. Naj gredo naprej in poenostaviti le za trenutek. Oprostite zamik za zdaj. Obvestilo v vrstici 19 tega primera, sem dobil niz s strani uporabnika. Toda opazil, kaj sem počel v naslednji vrsticah 22 naprej. Jaz sem pravzaprav ponavljanjem od i do - in to je nov trik - strlen, dolžina niza. To je funkcija, ki ima C, če se boste peljali to niz, vam pove, koliko znakov je v tem nizu. To je vse. In dejstvo, da je strlen namesto dolžine niza je samo zato, ker je bolj skope. Pred tridesetimi leti so ljudje všeč, da napišete stvari, kot so na kratko je to mogoče, zato smo ohraniti to konvencijo tukaj. i + + pomeni le i prirastek v vsaki ponovitvi. In zdaj opazil to, kar je res zanimivo. V skladu 24, sem rekel, "Computer, daj mi znak, 8 bitov, in ga imenujemo c." Ampak kaj je to na desni strani govoriš? V angleščini, kaj to pomeni? [Študent] Prvi znak v polje. Točno tako. Daj mi prvi znak v polje. Ali bolj splošno, daj mi wi znak v polje. In spoznali, da je zdaj pomembno, da so znanstvenike s področja računalništva, smo dejansko šteje od 0. Ti nimajo diskrecijske zdaj začeti s tem. Zdaj imate, da se obnašajo v skladu s pričakovanji računalnika in šteje od 0 ker [0] se bo prvi znak v nizu, [1] se bo drugi [2], se bo tretji, in tako naprej. Torej ta program, če sem prevedel, to je spet niz1, zato poskrbite niz1, in zdaj sem teči niz1 v mojem terminalskem oknu. Čaka na vhod, tako da bom s tipom z Davidom, Enter in zdaj se natisne Davidu vse na različnih progah, ker obvestilo, kaj delam. Jaz tiskanje en znak naenkrat. Mi ne bo šel v podrobnosti, je danes na tem, ampak sem izbrisal nekaj trenutkov pred tem preverite tukaj. Izkazalo se je, da če se uporabnik ne deluje pravilno, kontradiktornost, ali pa samo zmeden, lahko dejansko ne bi prinesla niz obširneje. Če ste zadeli napačno tipko na tipkovnici, lahko dajo nobenega niza sploh, ali če ste zlobni, lahko poskusite prilepite v vrednosti Gigabyte z dne esej zapolniti to niz, in če računalniku zmanjka spomina, Izkazalo se je, da bomo dobili nazaj, to posebno vrednost, imenovan NULL. Torej za zdaj, samo vem, da je to posebna vrednost, se imenuje NULL ki nam bo omogočilo, da preveri, ko smo iz spomina, med drugim. Ampak, če sem odprla zdaj niz2, opazil eno razliko tukaj. Obvestilo eno razliko tukaj z niz2. Z niz2, ta zanka je malo drugačna. Naj brisanje ničel, tako da lahko govorimo o tistih, drugič. V čem se razlikuje za zanko tokrat? Lahko grem nazaj na prejšnji primer. Torej, to je različica 2, to je različica 1. 1, 2. 1, 2. Strlen klic je kje? To je v prvi del za zanko. Vsak misli, zakaj to delam? Ja. [Študent] Torej ne kliči funkcije vsak čas. [Malan] Torej ne kliči funkcije vsak čas. Točno tako. Odpoklic iz for zanke, ki so si zelo enostavna ko boste nekako razumeli, da je to inicializacijo, pogoj, in posodobitve. Težava je v tem, da je pogoj zgodi na vsaki ponovitvi zanke. In tako se je v tem primeru v tej zadevi, kar je slabo, da je to moje stanje? [Študent] kličeš strlen. [Malan] kličeš strlen znova in znova in znova. Toda, ko sem tipkal z Davidom, dolžina tega niza je 5, in to ne bo spremenilo na vsaki ponovitvi zanke ker je še niz D-v-i-d. Torej, to je namig, kaj se dogaja, da postane bolj pomembna ideja znan kot oblikovalska odločitev, če le ne bo računalnik naredil nepotrebno delo. Tako kot slepar predogled pset2, pset2 v standardni različici vas bo izpodbijala dejansko izvajajo nekaj več šifre, nekaj več algoritmi šifriranja, tako da lahko oba šifriranje in dešifriranje sporočila, podobno kot tajni eni Ralphie je dešifriral. V hacker izdaji pset2 smo šli malo naprej. Bomo izročil datoteko iz dejanskega računalniškega sistema , ki vsebuje cel kup imen in dejanskih šifriranih gesel, in izziv za hacker različico se bo crack teh gesel in ugotoviti, kaj je kriptografija ali kaj skrivnost je bila uporabljena za dejansko pridobivanje teh gesel. In bomo to z novo funkcijo tukaj na K da ti dam samo demo, znano kot argumenti v ukazni vrstici. Izkazalo se je, kot morda nekateri od vas videl v oddelku ali v učbenikih, Glavna nima vedno za neveljavne v oklepajih. Izkaže se, da lahko glavni zapišemo tudi takole, z dvema argumentov, argc in argv, kjer argc je število besed da vnesete po imenu programa na vaš ukazni vrstici in argv je dejanska besede. In ko so oglati oklepaji tam kažejo, argv je očitno polje. To se dogaja, da je niz po nizu po nizu v pomnilniku. Torej, kaj bomo mogli storiti, začenši s pset 2, je nekaj takega. Če naredim argv1, ki je na primer, da bomo vrnili v ponedeljek, in prost dostop, opazili, da se ne zdi, da storiti ničesar še. Prav tako natisne svoje ime. Ampak, če rečem zbogom razred, obvestilo, da ta program očitno ponavlja v vsakem od besed, ki so vnesli v ukazno vrstico. In sredstvo, s katerim bomo pridobili dostop do besed, ki jih je uporabnik natipkan na poziv je s spremembo glavna začne ta vikend od int main (void) int main (argc, argv) s tem pa bo rodil v ukazni vrstici argumente. In ko se res sofisticiran na to, boste lahko pisali programe res trippy kot je tale tukaj, ki gre nad in preko nekatere funkcije smo naredili doslej, ampak vse zelo močna. Torej bomo pustim pri tem na zaslonu in vam bomo videli v ponedeljek. [CS50.TV]