[Powered by Google Translate] [2 savaitė, Tęsinys]
[David J. Malan, Harvardo universitetas]
[Tai CS50. - CS50.TV]
Gerai. Tai CS50, o tai yra 2 savaitės pabaigos.
Jei tikitės, kad būtų alkanas, rytoj maždaug šiuo metu,
žinau, kad mes ketiname surengti mažoje grupelėje rytoj, ketvirtadienį, 13:15.
Yra toks URL čia, jei norite RSVP.
Erdvė yra ribota, todėl prašome atleisti, jei forma yra užpildyta iki to laiko, jums užpildyti formą.
Eilinė URL, nors, kad gali būti įdomūs.
Tik apie mėnesį laiko, žinoma, bus prieinama
plačiau per EDX, internete, per kurią žmonės galės sekti kartu,
gana aktyviai dalyvauti kurso, iš tikrųjų.
Jie bus naudojant CS50 Appliance ir CS50 Aptarti
ir labiausiai įvairių programinės įrangos įrankius, kad mes jau buvo naudojant šį pusmetį.
Ir viena iš iniciatyvų, mes norėtume priimti kaip eksperimentą šiemet
yra pamatyti, tik kaip daug turinio, mes galime išversti
į kitas sakytinių ir rašytinių kalbų.
Taigi, jei jūs galite turėti susidomėjimą dalyvauti šiame projekte
, pagal kurią mes suteiksime anglišką išrašai ir subtitrus Žinoma, paskaitų
ir šortai ir seminarai ir specialieji profiliai ir panašūs dirbiniai,
jei kalbėti laisvai arba laisvai rašyti nors kitą kalbą,
mes norėtume užsiimti jums šio projekto, kuriuo į vieną ar daugiau vaizdo įrašus,
paversti juos kalba, gerai žino.
>> Norėdami suteikti jums sąsajos jausmą, yra tai interneto vartotojo sąsaja
kad mes naudoti, kad bus sukurti iš esmės kaip tai UI.
Tai buvo man mokyti kai Helovinas prieš
ir dešinėje pusėje yra juodos, šalia šių laiko,
pamatysite įvairių dalykų, kad atėjo iš mano burnos tą pačią dieną,
ir tada po juo bus galima išversti į kurią nors kitą kalbą
, ką žemėlapių, šiuo atveju, anglų ir, tarkim, Ispanija.
Taigi, tai tikrai labai patogus įrankis.
Galite atsukti atgal ir pirmyn labai lengvai naudodami sparčiuosius klaviatūros klavišus.
Taigi, jei norėtumėte dalyvauti šiame eksperimente ir turi matyti ir skaityti jūsų žodžiai
potencialiai tūkstančiai žmonių ten, prašome nedvejodami dalyvauti.
Vienas žodis apie nuo pirmadienio kačiukas.
Kitaip mes išsiuntėme pernelyg baisu pranešimą, suprantate, kad, kaip rodo darbo valandos:
fasoniniai rodo, kurso dizainas yra labai
, studentams bendradarbiauti ir kalbėti dirbti per probleminių rinkinių
ir problemos kartu, ir tikrai pakanka tiesiog nužengia į
dar kartą, darbas, jūs galų gale pateikti turėtų būti jūsų pačių.
Ir taip gana garbingai, darbo valandomis, tai visiškai normalu,
tai visiškai galima tikėtis net kalbasi su tikru Draugas šalia tavęs.
>> Jei jis ar ji kovoja su tam tikru klausimu, ir jūs kaip,
"O, gerai, leiskite man duoti jums, kad aš parašiau tam tikros eilutės kodo žvilgsnis", tai gerai,
tai atsitiks, ir tai yra labai palanki, manau, mokymosi procese.
Jei linija tampa kirto, kai galva yra tarsi pakreipus čia pernelyg daug sekundes
minučių, kad tikrai ką tik buvo atblokavimo galimybė jūsų draugas,
ir, žinoma, kai viskas pasidaro keičiamasi elektroniniu paštu ir "Dropbox" ir pan.
ten taip pat yra linija.
Taigi visomis priemonėmis jaustis patogiai ir jaučiasi skatinami kalbėtis su draugais
ir klasiokų apie psets ir vis tik suvokti, kad tai, ką jūs galiausiai pateikti
tikrai turėtų būti savo vietas, o ne kažkas kitas produktas.
Ir taip vienas iš konkrečios srities problemų pset2
kuris ateis pavėluotai rytoj vakare pasinerti į Kriptografija pasaulyje,
kuris yra šifravimo arba kodavimo informaciją menas,
o tai galiausiai prie saugumo pasaulyje.
Dabar daugeliui iš mūsų saugumas yra gana žemiškas mechanizmų.
Visi turime vardus ir slaptažodžius,
ir visi mes turime labai blogų vardus ir slaptažodžius, greičiausiai.
>> Jei jūsų slaptažodis yra keletą svetainių, kad tikriausiai ne pati geriausia idėja,
kaip mes aptarsime link semestro pabaigoje.
Jei jūsų slaptažodis parašytas ant lipni dėmesį - ne juokai - dėl savo monitoriaus,
tai irgi nebūtinai geriausias dizainas, bet gana dažnas reiškinys.
Ir jei nesate naudojant kriptografiją užšifruoti savo slaptažodžius,
jie yra ypač pažeidžiami.
Taigi, jei jūs manote, kad esate yra super protingas, paslėptą Word dokumentą
kažkur kietajame diske, kad visus savo slaptažodžius
bet tai aplanke, kad niekas ketina ieškoti, tai irgi nėra labai saugus mechanizmas.
Ir kas pset2 bus pristatyti tai kriptografija menas
ir kodavimo informaciją, kad dalykų, pavyzdžiui, slaptažodžius yra saugesnis.
Kontekstas čia yra tai, kad pavojingomis duomenų
ateina galimybę užšifruoti ją ir peštynės.
Ir todėl tai, pavyzdžiui, yra šifruotą pranešimo pavyzdys.
Tai iš tikrųjų kažką sako, anglų kalba, tačiau tai aiškiai nėra visiškai akivaizdus.
Ir mes ateiti Full Circle šiandien erzinti, išskyrus tai, kas čia yra šis slaptas pranešimas.
Bet realiame pasaulyje kompiuterių dalykų nereikia net pažvelgti, kaip jie gali būti anglų frazių.
Pavyzdžiui, tai, ką galite rasti ant standartinės Linux ar Mac ar UNIX kompiuterio
faile, kuris buvo kadaise "slaptažodžio failas.
>> Šiandien jis buvo perkeltas į kitas vietas.
Bet, jei jums atrodo teisinga vietoje sistemos, pamatysite ne tik savo vardą
arba, kad kitais žmonėmis sistemos, bet jūs pamatysite slaptažodžio šifruotą versiją.
Iš tiesų, žodis kripta yra rodo, kad medžiaga yra užšifruotas,
ir šis iš pažiūros atsitiktinių raidžių ir simbolių ir skaičių serija ir tt
galima iššifruoti tik paprastai žinant kažkokią paslaptį -
slaptas žodis, slapta
ir tt Iš tiesų, kriptografija galiausiai suvesta menas pasitikėjimo tam tikros rūšies
ir žinant kažką, kad kažkas nėra.
Taigi, mes ištirti tai šiek tiek išsamiau šiandien ir į pset ateiti.
Ir dabar atitikimo / neatitikimo žodis.
Ypač, kaip kai kurie iš jūsų nėrė į pset1, Prietaisai,
ir labai naujas pasaulis save, suvokti, kad nusivylimas ir sumišimas
ir tik techniniai sunkumai yra gana galima tikėtis,
ypač su pirmuoju pset, kur yra tik tiek daug naujo,
tik susipažinti su ls ir CD, ir visi šitie Slaptas komandos
ir nauja aplinka, ir kad atskirtas nuo faktinės medžiagos ir programavimo pati.
Taip suprasti, taip pat, kad yra žinoma, biuro darbo valandomis, kad egzistuoja paramos struktūros.
>> Sekcijos pradėti šį ateinantį sekmadienį.
Bet svarbiausia, jei esate jausmas, tik tai, kad tai ne tas pasaulis,
suprasti, kad ji tikrai tiesiog reikia laiko.
Ir jeigu ne tai už šią galimybę, prieš keletą metų man imtis klasės verčių atitikimo / neatitikimo,
sąžiningai, aš niekada net nustatyti snukio klasėje.
Ir jūs galite pakeisti iki, tarkim, penktas nuo pirmadienio kurso,
todėl, jei esate ant krašto, suprantame, kad, o ne galva į kai kituose vandenyse apskritai,
, be jokios abejonės, kad tiesiog pakeisti verčių atitikimo / neatitikimo.
Vėlgi, tikrai ši kultūra čia Harvardo atsižvelgiant dalykų atitikimo / neatitikimo
nes visi tikrai nori pasiekti ar overachieve
bet atvirai kalbant, tai yra puikus būdas bando kažką iš
kad gali būti susipažinę su jumis, ir jūs galų gale padaryti, daugeliu atvejų, gana gerai,
galbūt daug savo nuostabą.
Ir daugiau konkrečiai, ką aš galvoju atitikimo / neatitikimo paprastai veikia,
ypač, kaip jūs galbūt patyrėte su pset0,
jei jūs įtraukėte į tam tikrą pset 10 valandų, 15 valandų, 25 val
ir jūs tiesiog banking galvą į sieną ir ji darosi itin vėlai naktį
, bet jūs atlikote pset 90%, kaip ir jūs tiesiog negali išsiaiškinti vieną dalyką,
atitikimo / neatitikimo tikrai mano kraštą, panašaus į tai klasei,
, kur Jūs galite rūšiuoti laimingai pasakyti: "Gerai, aš žinau, tai nėra tobula,
bet dirbau my ass off, aš esu labai laimingas su kur jis galų gale, "
ir kad bus patenkinti lūkesčius pravažiuojančio / nepavyks.
Taigi, keep that in mind. Gerai.
>> Taigi tiems, kurie stengėsi naudoti Harvardo universiteto Wi-Fi,
žinoti, kad yra CS50 SSID, Wi-Fi "ryšys, plūduriuojančius aplink
, kad jums gali tekti geriau sekasi.
Tai šiek tiek ironiška, kad šis slaptažodį, jei jūs norėtumėte pabandyti prisijungti prie šios
geriau greičiu - ir leiskite mums žinoti, jei ji ne geriau - 12345, visą kelią iki 8
nes 8 yra saugesnis nei 5.
Taigi, jei jums reikia Wi-Fi slaptažodį, prisijungti prie CS50 belaidžiu būdu čia, 12.345.678,
ir paskelbkite CS50 Aptarkite, jei jūs vis dar turite pertrūkiais ryšio problemas,
ir mes pranešime, įgaliojimus, žino šioje vietoje. Gerai.
Taip greitai kibinimas, ypač tiems iš jūsų, kurie ventiliatoriaus berniukai ar mergaitės visų dalykų Apple.
Ką aš iškasti prieš kelis metus atgal buvo šį failą čia, iUnlock.c
tiesiog rūšies padaryti betono ir sudėtingesnių
kai daugiau pagrindinių C programas, mes buvo raštu.
Taigi, aš atvėrė šį failą, iUnlock.c. Šiandien paskaitų puslapyje.
Kairėje pusėje pamatysite ilgą sąrašą funkcijų.
Taigi kolegos, Kas parašė šią surašė daug funkcijų, daugiau nei tik pagrindinis.
Jis naudojamas visa krūva bibliotekų čia, ir jei mes pradėsime slinkti per
ką tai iš tikrųjų yra, yra pirmasis, manau, kreko originalus iPhone.
>> Kai tu nori originalaus iPhone Jailbreak, o tai reiškia untether AT & T
ir iš tikrųjų įdiegti specialią programinę įrangą ir daryti tai, ko, kad "Apple" nenorėjo, kad žmonės darytų,
kažkas paėmė laiko išsiaiškinti tiksliai, kaip jie galėtų išnaudoti programinės įrangos trūkumus,
klaidų, blakės, Apple programinė įranga, ir taip gimė iUnlock.c -
, kad jei surinkti jį į savo kompiuterį ir įdiegti ją į "iPhone"
, kuris buvo prijungtas prie kompiuterio, tarkim, per USB kabelį,
tai jums administracines arba iš šaknų ir privilegijas jūsų iPhone
ir leidžia daryti beveik viską, ką nori.
Ir taip ten buvo šioje įdomioje katės ir pelės žaidimas
tarp "Apple" ir "likusio pasaulio, ypač kai jie, kaip ir daugelis kompanijų,
pabandykite užrakinti savo stuff žemyn taip, kad jūs galite tik su juo daryti ką jie ketina.
Bet dėka žmonių kaip ir žemo lygio detalių supratimą -
ir šiuo atveju C programavimo - ir daug gerai pažįstamų konstruktų
kad mes pradėjome žaisti su, galite tikrai sverto aparatūros
tokiu būdu, kuris jums atrodo tinkama, ir nebūtinai tam tikrą juridinį asmenį.
Taigi, pavyzdžiui, aš neįsivaizduoju, ką visa tai veikia,
bet GetVersion skamba gana paprasta,
ir atrodo, kad tai yra funkcija, kad šis asmuo rašė.
Tai užtrunka šiek tiek natūra sveikojo skaičiaus kaip argumentu, negrąžina nieko,
bet atrodo, kad linijos už linijos čia ir jei sąlyga, jei sąlyga pertraukos
ir kažkaip susijęs su versijos numerius, jei mes slinkti žemyn,
nors šių raktažodžių daug ketinate būti naujas.
Ir ten visai daug funkcijų čia niekada nesame matę ir gali kada nors pamatyti
per semestro metu.
>> Tuo dienos pabaigos, pagal tas pačias taisykles ir logika, kad mes buvo žaisti su iki šiol.
Taigi tai yra pernelyg senas, kad nulaužti jūsų iPhone 3s ar 4s arba greičiau 5s šias dienas,
bet žinau, kad visa tai labai kilęs iš šio pasaulio, kad mes nėrė į.
Paimkime bent šiek tiek daugiau paprastas pavyzdys atrodo:
tai viena, tik gauti pašildytas su kai kurių sintaksė ir taip pat kai kurios kitos duomenų tipas
kad mes kalbėjome apie, bet ne iš tikrųjų matyti C.
Tai failas, kuris vadinamas positive1.c, ir vienam viršuje pastabų,
tai tiesiog reikalauja, kad vartotojas pateiktų teigiamą skaičių.
Todėl do-while cikle, kuris yra gražus naudotojo interaktyvių programų pavyzdys
kur jums reikia pranešti vartotojui, ką nors padaryti,
ir jei jie nebendradarbiauja jūs klykauti į juos arba atmesti savo indėlį.
Byla punktas: "Aš einu daryti linijas 19 iki 24
tol, kol vartotojas dar davė man teigiamą skaičių.
Ši detalė on line 18, kodėl aš pareiškiu, n virš visos šios Looping statyti
, o ne šalia 22 eilutė, kur aš iš tikrųjų rūpi gauti n? Taip.
[Studentas] taikymo sritį. >> Taip, todėl šis taikymo srities klausimas.
Ir profanas sąlygomis, ką apimtis kreiptis?
Taip. >> [Nesigirdi studentas atsakas] >> Ar galite kalbėti šiek tiek garsiau?
[Studentas] Kur galima prieiti prie šio kintamojo. >> Perfect.
Kur galite gauti tam tikrą kintamąjį.
Ir apskritai, nykščio taisykle iki šiol buvo, kad kai kintamasis
yra apibrėžta naujausius Garbanotasis petnešos, kad jūs mačiau.
>> Ir todėl šiuo atveju, jei aš padariau klaidą paskelbti n on line 22, kad linija būtų dirbti.
Norėčiau gauti int, ir aš įdėti jį į tą kintamąjį n 22 eilutėje,
bet kuria linija kodo dabar neįsivaizduoju, ką aš kalbu apie? >> [Studentas] 25.
[Malan] 25, ir paaiškėja, 24, taip pat dėl ​​to, kad šiuo atveju jis nepatenka garbanotieji petnešų.
Taigi, tiesiog šiek tiek nepatogumų, tačiau labai lengvai išsprendžiama tiesiog paskelbti kintamasis
ne pačios funkcijos.
Pamatysite vėliau šiandien galite žengti dar vieną žingsnį
ir jūs galite gauti net šiek tiek tingus.
Ir tai yra nerekomenduotina apskritai, bet jūs galite net gauti tingus
ir įdėti kintamąjį visame pasaulyje, taip sakant, ne viduje funkcijos, o ne viduje kilpa,
, bet failo, ne visas funkcijas, jums parašiau, kaip aš čia on line 15.
Tai paprastai frowned, bet suprantame, kad tai kartais kitų problemų sprendimas,
kaip mes galų gale pamatyti.
Taigi dabar mes palikti jį, kaip šis, bet galime pamatyti, jei mes galime perrašyti
tik pradėti išreikšti save šiek tiek kitaip.
Ši programa, tiesiog, kad būtų aišku, yra positive1.
Leiskite man eiti į priekį ir savo terminalo lange positive1, įveskite.
Kaupia gerai. Aš ruošiuosi paleisti positive1, paspauskite Enter.
Reikalauju, kad galite man duoti teigiamą sveikąjį skaičių. Pasakysiu -1. Tai nepadėjo.
0, 99. Kad atrodo į darbą.
Gal ne griežčiausių bandymų, bet bent jau gražus normalumas patikrinimas
, kad esame teisingame kelyje.
>> Taigi dabar leiskite man eiti į priekį ir atidaryti versija 2,
ir kas yra skirtinga jau?
Ji įgyvendina tą patį, bet kas šokinėja kaip aiškiai skiriasi šiuo metu?
Bool Šis žaliai. Jis yra paryškinamas žalia, bool, kuris yra duomenų tipas žinomas kaip šis raktinis žodis.
Jis nėra ateis pastatytas visiems C versijas
Jums reikia įtraukti konkrečią biblioteką.
Mūsų atveju, aš įtraukti CS50 biblioteką, kad mes turime prieigą prie Bool.
, Bet atitinka 18, mes, atrodo, čia vadinama Būlio vertė dėkinga.
Aš galėjo pavadino tai nieko, bet aš jį pavadino dėkinga
tiesiog rūšies perteikti tam tikrą semantinę prasmę.
Taigi, iš pradžių on line 18, aš, matyt, ne dėkinga
nes yra inicializuoti Būlio vertė dėkingi false atitinka 18.
Ir tada atrodo, ką aš padariau čia linijų 21 iki 23
yra tai, aš tiesiog rūšies perrašyti savo logiką.
Taip ne funkciškai skiriasi, bet 22 eilutėje dabar aš patikrinti, ar int vartotojas
yra didesnis už 0, tada aš tiesiog pakeisti dėkingi tiesa.
Ir kodėl man tai padaryti? Dėl 25 eilutėje, matyt aš ruošiuosi patikrinti sąlygą.
Tai padaryti kilpą, nes esu dėkingas, yra klaidinga.
Taigi, aš pasiūliau, tai kaip alternatyva versijos 1
, nes jis bent šiek tiek daugiau intuityvus, galbūt, tai šiek tiek daugiau pagrįstas anglų kalba.
Taigi, atlikite šiuos veiksmus, o jūs nesate dėkinga, nes esu dėkingas, yra klaidinga.
Ir šį kartą aš taip pat, matyt, neturi rūpintis prisiminti tai, ką vartotojas turi įvesti
nes įspėjimo nėra kintamasis n, todėl iš tikrųjų, mažai baltas melas.
>> Funkciškai, programa yra šiek tiek kitokia, kai mes turime jį iš apačios
nes aš ne prisiminti, ką n.
Bet aš norėjau parodyti, čia per daug, kad net jei mes matėme GetInt
ir GetString naudojamas ant dešinėje pusėje lygybės ženklo iki šiol
todėl, kad mes prisimintume vertę, techniškai, tai nėra tikrai būtina.
Jei dėl kokios nors priežasties jūs tiesiog nerūpi, kad įrašytumėte reikšmę,
jūs tiesiog norite patikrinti vertę, pastebėsite, kad mes galime tiesiog parašyti tai, kaip GetInt
atviras skliaustas, netoli paren.
Kad funkcija grąžina reikšmę, kaip mes buvo suprantama.
Ji ketina suteikti jums atgal į int.
Ir todėl, jei mintyse galvoja tai vyksta,
kai aš tipo 99 GetInt grąžina skaičių 99
ir taip konceptualiai, tai kaip nors mano kodas buvo iš tikrųjų tai.
99 Taigi, jei iš tiesų yra didesnis už 0, tada dėkingi tampa tiesa,
linija 25 supranta, ooh, mes padarėme, nes aš dabar dėkinga,
ir 26 eilutėje, mes tiesiog pasakyti "Ačiū už teigiamas sveikasis skaičius!"
kokia ji nutiko.
Dabar galime padaryti šiek tiek cukraus sintaksinę čia, taip sakant.
Leiskite pamatyti, jei mes galime išvalyti šią eilutę 25 su šio trečiojo ir paskutiniojo varianto positive3.
>> Pranešimas vienintelis skirtumas yra tai, ką eilutę kodo? >> [Studentas] 25. >> [Malan] Taip, 25.
Ir mes tikrai matė šį triuką tik dar, bet mes pamatyti, šauktukas, pirmadienį,
kuris reiškia ką? >> [Studentas]. >> Ne arba paneigimas.
Taigi imtis Būlio vertė ir apversti savo vertę.
Tiesa tampa klaidinga, klaidinga tampa realybe.
Taigi, aš norėčiau pasiūlyti, yra net šiek tiek labiau intuityvus, rašyti kodą
nes aš vis dar inicijuoti dėkingi false, aš vis dar atlikite šiuos veiksmus,
Aš nustačiau dėkinga, tiesa, kai ateis laikas,
tačiau dabar jūs galite tiesiog išversti šį kodą žodžiu iš kairės į dešinę,
o (dėkinga!), nes sprogimo ar šauktukas reiškia ne sąvoka,
taip, o ne dėkinga.
Taigi dar kartą, mes jokių naujų sąvokas per se.
Mes kalbėjome apie loginę atgal, kai mes grojo su nulio,
bet suprantame, dabar mes galime tiesiog pradėti rašyti savo kodą įvairiais būdais.
Taigi ypač pset1 jei esate tarsi stengiasi išsiaiškinti rašyti tam tikrą programą,
šansai yra jums pasisekė, nes ten gali būti bet koks sprendimų skaičius
kad jums gali atsitikti.
Pavyzdžiui, tai tik 3 net paprasčiausių programų. Gerai.
Ir dabar priminti, pirmadienį, mes palikome su grįžtamaisiais vertybių šio pranešimo.
Taigi, pirmą kartą mes parašėme programą, kuri ne tik turi pagrindinis
ji taip pat turi savo funkcija individualizuotos, kad aš parašiau čia.
Taigi 31 eilutėje per 34 įdiegėme kubo funkciją.
Tai nėra sudėtinga. Tai tik a * šiuo atveju.
Tačiau tai, ką svarbu apie tai, kad aš indėlį į
ir aš sugrįžus išėjimas * a *.
Taigi, dabar turiu galimybę, panašiai kaip aš naudojamas vien tik su prinf
skambinti šią funkciją paskambinus kubo funkciją.
>> Ir kubas funkcija užtrunka tam tikrą įvestį, kubas funkcija grąžina kažkokią išvestį.
Priešingai, printf tiesiog padarė kažką.
Jis negrįžo nieko, kad mes rūpinosi apie, nors, kaip panaikinti ji grąžina reikšmę;
jūs tiesiog paprastai jį ignoruoti.
Printf tiesiog padarė kažką. Jis turėjo šalutinį poveikį spausdinti į ekraną.
Priešingai čia, turime kubo funkciją, kuris iš tikrųjų grįžta kažką.
Taigi, tiems, kurie susipažinę su šiuo, tai gana paprasta idėja.
Bet tiems, kurie mažiau susipažinę su šia einančios į sąnaudų ir grįžti rezultatus idėja,
pabandykime tiesiog kažkas super paprasta.
Ar kas nors patogiai artėja scenoje trumpai?
Jūs turite būti patogus su kamera jums taip pat. Taip? Gerai.
Koks tavo vardas? >> [Studentas] Ken. >> Ken. Gerai. Ken, iki.
Ken rūšių funkcija bus čia.
Eikime į priekį ir tai padaryti. Galime gauti šiek tiek fantazijos.
Malonu jus matyti. Sveiki atvykę į centre. Gerai.
Leiskite paspausti šį mygtuką. Gerai.
Taigi čia jūs turite modernią Lenta
ir tai, ką aš yra pagrindinė funkcija, pavyzdžiui,
ir aš neturiu į mano rankas iPad.
>> Aš tikrai ne prisiminti, kaip - Na, aš negali pasakyti, kad.
Aš ne iš tikrųjų turėti gerą rankraštį,
ir todėl aš noriu jums ką nors atspausdinti už mane ant ekrano.
Aš pagrindinė programa, ir aš norėčiau, kad jūs pasakyti, tai
rašyti mano vištienos nulio ir tada perduoti jums įvestį.
Tokie kvaili, nors šis pratimas yra, funkcijų samprata ir telefono funkciją
ir grąžinimo funkciją tikrai suvesta į tai.
Esu pagrindinis, aš ką tik parašė printf, kotiravimu Unquote kažką ekrane,
Aš einu į šią programą, ir kuo greičiau printf iškviečiamas,
ji užima vieną argumentą ar vienas parametras, kartais tarp dvigubų kabučių.
Čia yra, kad argumentas. Aš perduoti ją Ken.
Jis yra parašęs keletą metų atgal "black box"
, kad, matyt, tik žino,, kaip spausdinti dalykų ekrane.
Taigi atlikti.
Tai nėra blogai. Labai geras.
Taigi dabar Ken daroma vykdyti. Ar jis turi perduoti man nieko atgal?
Ne todėl, kad mes matėme iki šiol.
Vėlgi, printf tikrųjų grįžti numerį, bet mes ketiname ignoruoti, kad dabar
, nes mes niekada naudojo jį. Taigi, kad tai Ken.
Ir todėl dabar pagrindinis vėl perima kontrolės programos
, dėl to, kad kodo eilutę printf, daroma vykdyti.
Ir mes einame apie mūsų kelią, vykdyti kokios kitos eilutės yra ten.
Taigi, dabar pabandykime šiek tiek kitokį pavyzdį.
Šį kartą tegul pirmas išvalyti ekraną, ir šį kartą mes padarysime Kubas funkciją,
bet šį kartą, tikiuosi, kad išvesties vertę.
>> Taigi eikime į priekį ir tai padaryti.
Dabar turiu kodo eilutę, kad sako, x gauna kubą x.
Kodo eilutę, prisiminti, atrodo taip: x = kubas (x);
Taigi, kaip tai vyksta į darbą? Eikime į priekį ir suteikti jums baltas ekranas vėl.
Aš einu užsirašyti x vertę,
, kuris šiuo metu metu būna, kad, tarkim, 2 keep it simple.
Užsirašiau ant popieriaus lapo 2 vertė, kuri yra mano x vertė.
Aš nuneškite jį Ken. >> Ir aš tiesiog parašyti atsakymą? >> Taip, tegul tiesiog rašyti atsakymą.
Gerai. Ir dabar jis turi grąžinti man kažką. Tobula. Nice Segue.
Taigi dabar jis paduoda man atgal 8 vertę šiuo atveju, ir ką man su juo daryti?
Iš tikrųjų - pažiūrėkime, gauti šią teisę. Ką man su juo daryti?
Dabar aš ruošiuosi į šią vertę ir iš tikrųjų laikyti ją tų pačių atmintyje bitų.
, Bet pastebėsite, aš tipo kovoja čia.
Aš esu šiek tiek supainioti, nes kai aš iš tikrųjų rašyti x vertę,
nes tai, ką aš ką tik padarė, yra fiziškai ranka Ken popieriaus gabalas, kuris turėjo vertė Vertė 2,
kuris buvo x, ir iš tiesų, tai būtent tai, kas atsitiko.
Taigi paaiškėja, kad kai skambinate funkciją ir pereisite į argumentą,
kaip hello, pasaulis ar pereisite argumento kaip 2,
paprastai, jūs artimųjų į šį argumentą kopiją.
Ir taip kaip aš užrašė skaičių 2 čia ir perdavė jį į Ken
tai reiškia, jog aš vis dar turiu vertės 2 kopiją kažkur
nes iš tiesų, dabar, kad aš Dotarłeś atgal dydis 8, man reikia grįžti į RAM
ir faktiškai užsirašyti 8 kur Aš vieną kartą turėjo skaitmeniu "2".
Taigi vizualiai, prisiminti šią sąvoką perduoti, pažodžiui, vertės kopiją.
>> Ken ar jo dalykas, rankas man atgal kažką - šiuo atveju reikšmę kaip 8 -
ir tada aš turiu kažką daryti su tos vertės, jei noriu, kad aplink.
Taigi, visa tai sugrįš būti pernelyg pažįstami prieš ilgas.
Thank you so much už šio demo čia, Ken. [Plojimai]
Labai gerai padaryta.
Pažiūrėkime, kaip, kad galiausiai kai funkcijos, kuriam skambinate, kad mes čia darai.
Leiskite man eiti į priekį ir gražina mus į Kubas pavyzdžiui čia.
Atkreipkite dėmesį, kad, jei norime, kad iš tikrųjų pradėdami vartoti šį toliau,
mes ketiname turėti atkreips dėmesį ir į tai, kad skaičius x, perduota čia
yra skirtingas, kas iš tikrųjų yra perduodama į funkciją.
Taigi dar kartą, tai kopija praeiti taps gana Priklauso tik akimirką.
Paimkime bent kažką, kad nėra gana dirbti dar atrodo.
Aš ruošiuosi eiti į priekį ir atidaryti trečią Buggy kurios, pavyzdžiui, yra ydinga iš prigimties,
ir ji vadinama buggy3 ir įgyvendina apsikeitimo funkcija.
Čia mes turime pagrindinę funkciją, kad x ir y savavališkai inicijuotas 1 ir 2, atitinkamai.
Mes galime naudoti GetInt, bet mes tiesiog reikia paprasto naudotis,
todėl sunku koduojamos kaip 1 ir 2.
21 ir 22 eilutėse, mes, matyt, atspausdinti X ir Y 1 už linijos.
23 on-line, aš patvirtinu, aš Swapping šias vertybes, tašką, taškas, taškas.
Aš, matyt, vadina linijos funkcija 24 vadinamoji apsikeitimo sandorius, kurie trunka 2 argumentus.
Funkcijos 2 argumentus jis visiškai teisėtu. Mes matėme, printf padaryti jį jau.
>> Taigi, apsikeitimo, matyt, mano X ir Y, ir, kaip rodo jo pavadinimas,
Aš tikiuosi, kad ji ketina sukeisti šiuos 2 reikšmes.
Taigi, aš reikalauti on line 25 "pavertė!" ir aš perspausdinti X ir Y
darant prielaidą, kad jie iš tiesų buvo pavertė.
Bet jei aš iš tikrųjų paleisti šią programą - leiskite man atverti terminalo langą,
leiskite man padaryti buggy3 - kaip rodo pavadinimas, tai ne baigsis gerai
nes kai aš paspauskite "Enter", pastebėsite, kad x 1, y 2,
ir dar tuo, programos pabaigoje, jie vis dar yra, iš tiesų, tas pats.
Taigi remiantis demonstravimo tik dabar su Ken, kas iš tikrųjų vyksta?
Tegul neria į šio apsikeitimo funkcija. Tai itin trumpas. Tai tik keletą eilučių kodo ilgą.
Bet kas pagrindinė problema, remiantis paprasta istorija, papasakojo čia su Ken?
Kodėl apsikeitimo neveikia?
[Studentas] Tu saugoti kopiją, o ne konkretaus kintamojo dydžio.
Tiksliai. Mes saugoti kopiją, o ne kintamasis.
Kitaip tariant, apsikeitimo, matyt, trunka 2 argumentus, int,
ir tai sąlygiškai pavadinta a ir b punktai
ir čia aš jau praėjo, X ir Y, kurie yra atitinkamai 1 ir 2,
bet aš ne pažodžiui perduoti x, aš ne pažodžiui eina y,
Aš artimųjų x kopiją ir y kopiją.
Tai beveik taip, lyg jūs kopijuoti ir įklijuoti į apsikeitimo sandorio
vertybės, kurios norite, kad ji iš tikrųjų manipuliuoti.
Taigi, jei tai yra tas atvejis, kai aš programa pradėti vykdyti linija 35 tada 36,
kai gaunu 37 eilutėje, Šiuo istorija, kas yra vertė?
Šiuo istorija, linija 37, kas yra vertė šiuo metu? >> [Studentas] 1.
Malan] Tai tiesiog turėtų būti 1, teisė, kad X buvo priimtas kaip pirmąjį argumentą,
ir ši funkcija tiesiog savavališkai skambina savo pirmąjį argumentą.
Taip pat yra y apie antrąjį argumentą, ir tai tik savavališkai paskambinę antrasis argumentas b.
>> Ši dichotomija yra tikrai gana tiesiog paaiškino. Pagalvokite apie tai.
Nė vienas iš mūsų susitiko asmuo, kuris parašė printf,
todėl tikrai, jis ar ji neturi jokios idėjos, ką mūsų kintamieji po 30 metų bus vadinamas.
Taigi, turi būti skirtumas tarp to, ką vadiname kintamųjų funkcijų rašote
ir ką jūs vadinate kintamųjų funkcijų, jūs skambinate arba naudojant.
Taigi, kitaip tariant, aš parašiau savo kintamuosius x ir y,
bet jei kažkas buvo parašyta apsikeitimo funkcija, jis ar ji tikrai nežino,
ką mano kintamieji bus vadinamas,
taip suprantu, kad tai, kodėl jūs turite šią vardų dvilypumą.
Techniškai, galėčiau tai padaryti sutapimas,
bet jis vis tiek būtų priimtas, kopijas.
Tai būtų tiesiog grynas atsitiktinumas, estetiškai, jei tas asmuo, kuris parašė apsikeitimo sandorius,
buvo naudojamas tais pačiais pavadinimais.
Taigi Šiuo istorija, linija 37, yra 1, b 2, ir dabar aš pereiti prie apsikeitimo juos.
Visų pirma, leiskite man iš tikrųjų tai padaryti daug paprasčiau.
Aš nežinau, ką darė šie 3 eilučių kodo.
Leiskite man tiesiog atlikite šiuos veiksmus: b = a; = b; padaryta.
Kodėl tai yra skaldytų, logiškai?
Tai tipo intuityvi dalykas, tiesa?
Taigi tampa b ir b tampa,
tačiau problema yra ta, kad kuo greičiau linija 37 vykdo, kas yra A ir B vertė?
Tas pats, 1, nes jūs clobbered, taip sakant, jūs pasikeitė B lygi.
Taigi, kai linija įvykdė 37, tai puiku, dabar jūs turite 2 kopijų skaičiumi 1
viduje šios funkcijos, taip, tada, kai jūs sakote, atitinka 38 a = b,
jūs tipo prisukamas, nes jūs tik priskiriant 1-1.
Jūs rūšies prarado vertę, kurią rūpinosi apie.
Taigi iš pradinės versijos, atkreipkite dėmesį, ką aš padariau.
Aš vietoj trečiosios eilutės kodą, kuris atrodė taip.
Aš pareiškiu, laikiną kintamąjį.
>> Tmp yra labai dažnas vardas laikino kintamojo, o tai yra int
nes ji turi sutapti, ką aš noriu padaryti kopiją.
Galiu laikyti kopiją tmp viduje, todėl, kai linija įvykdė 37
vertė yra - greitai normalumas patikrinimas - 1, B vertė yra 2,
ir tmp vertė taip pat yra 1.
Taigi, dabar aš atlikti linija 38.
Kai linija 38 vykdo, įgauna b vertei. Ir b 2, todėl dabar yra 2.
Šiuo istorija, yra 2, b 2, ir tmp yra 1,
todėl dabar logiškai, mes galime tiesiog Plop tmp vertė į B ir baigsime.
Taigi, mes išspręsti šią problemą.
Deja, kai aš paleisti šią programą šią formą, jis nėra iš tikrųjų apsikeitimo visas vertes.
, Tačiau turi būti aišku, kodėl?
I fixed loginių problemų, nuo vos prieš akimirką,
bet vėlgi, jei aš paleisti šią programą, x ir y išlieka nepakitę
programos vykdymo pabaigos.
[Nesigirdi studentas komentaras] >> Mes negrąžinami nieko, kad tai tiesa.
Tačiau paaiškėja, yra šiek tiek problemų, nes čia iki šiol,
Vienintelis dalykas, mes negalėjo grįžti yra vienas dalykas, ir tai yra C. apribojimas
Galite grįžti tik tikrai vieną reikšmę, tokiu atveju aš natūra įstrigo čia
nes aš negalėjau grįžti naują vertę x, ar aš galėtų grįžti y naują vertę,
bet aš noriu, tiek atgal.
Taigi, grįžtant nėra paprastas sprendimas.
Tačiau problema iš esmės yra, kodėl? Ką mes iš tikrųjų pavertė?
[Studentas] a ir b. >> A ir b.
Tačiau a ir b yra X ir Y, tai reiškia, mes tiesiog padarė viską, šio darbo kopijos,
mes tiesiog praleido apsikeitimo funkcija ir visų šių kintamųjų 3 kalbame apie 3 minutes,
ir kad puiku, visiškai teisingai, atskirai,
bet ir b taikymo sritis tik čia Šiose eilutėse.
>> Taigi, kaip ir už linijos, jei paskelbti sveikasis skaičius i viduje už linijos,
Panašiai, jei jūs skelbiantis A ir B funkcijos viduje, kad rašėte,
jie galioja tik šios funkcijos viduje, o tai reiškia, kuo greičiau apsikeitimo daroma vykdant
ir mes einame iš LINE 25 24 eilutėje, x ir y nėra pasikeitė ne visi.
Jūs tiesiog švaistomi visai daug metu apsikeičiama kintamųjų kopijas.
Taigi paaiškėja, kad sprendimas yra tai tikrai ne akivaizdus.
Tai ne visai pakanka grąžinti reikšmes, nes mes galime grąžinti tik 1 kartą vertė,
ir aš tikrai norite apsikeitimo x ir y, tuo pačiu metu,
todėl mes ketiname grįžti į tai.
Bet dabar, reikia suprasti, kad klausimas iš esmės kilęs iš to, kad a ir b yra kopijos
ir jie yra savo taikymo sritį.
Pabandykime išspręsti šią problemą tam tikru būdu.
Leiskite man iš tikrųjų slinkti atgal čia ir atverti, tarkim, ketvirtą variantą, buggy4.
Ką apie tai?
Tai yra panašus, bet paprastesnis problema, pažvelgti į tai, kol mes imtis Pabandyti išspręsti.
Ši programa yra vadinamas prieaugis, ir matyt, inicijuoja x sveikasis skaičius 1 atitinka 18.
Tada aš reikalauti, x 1, aš tada reikalauti "incrementing ..."
Aš tada skambinti prieaugį, bet tada į 22 ir 23 eilutes, aš patvirtinu, jis buvo padidinamas,
Teigia, x yra dabar, kokia ji yra - 2, matyt, - bet ši programa yra Buggy.
Kokia tai problema?
Taip. >> [Nesigirdi studentas atsakas] >> Taip.
SO x pareiškė, akivaizdu, kad 18 on-line.
Tai yra viduje pagrindinis klamrami.
Taigi paprastas atsakymas čia yra tai, kad x yra čia,
ji neegzistuoja 32 eilutėje, todėl ši programa tikrai nebus net sudaryti.
Sudarytojas, kai bandau sudaryti šį kodą ketina klykauti ne man
apie kai nedeklaruoto identifikatorius arba kažką šiuo klausimu. Tiesą sakant, pabandykime.
Tai padaryti buggy4. Ji yra.
Naudoti nedeklaruojamo identifikatorius "X" 32 eilutėje.
Ir iš tiesų, galime būti aiškiai čia šiandien taip, kad tai yra naudinga
darbo valandomis, ir namuose.
>> Atkreipkite dėmesį, kad tai šiek tiek cryptically parašyta.
Tačiau tai, kad Apsukite metalinis garsas turi rėkė į mus, sakydamas buggy4.c: 32:5, yra iš tikrųjų naudinga.
Tai reiškia, kad klaida yra ne simbolių pozicijos 5 32 eilutėje.
So 1, 2, 3, 4, 5. Štai, iš tiesų, kai problema yra.
Ir taip pat, taip pat nepamiršti, darbo valandomis, ir namuose, aš esu laimingas čia.
Turiu vieną klaidą. Tai bus gana lengva nustatyti.
Bet jei jūs gaunate visą ekraną, pilną didžioji klaidų pranešimų,
dar kartą suprasti, kad gali būti tik simptominis viršutinis vienas apatinis.
Todėl visada Chase žemyn klaidas iš viršaus į apačią
, nes ten gali būti tiesiog Ziedlapķēde efektas
kad siūlo, jūs turite būdas daugiau problemų, negu jūs iš tikrųjų.
Taigi, kaip mes galime išspręsti šią problemą, jei mano tikslas yra prieaugio x? >> [Studentas] x pasaulio.
Gerai, kad mes galime padaryti x Global.
Paimkime nuorodą, kad aš perspėjo apie anksčiau, bet gi, mums tik reikia greitai nustatyti,
todėl galime tik pasakyti, int x, čia. Tai daro x Global.
Taigi dabar turi prieigą prie jo ir prieaugio turi prieigą prie jo pagrindinis
ir todėl leiskite man eiti į priekį ir kaupti tai dabar.
Padaryti buggy4, "Enter". Atrodo sudaryti dabar.
Apsvarstykite, buggy4. Ir atrodo, kad faktiškai dirba.
Tai yra vienas iš šių dalykų, kad padaryti, kaip aš sakau, o ne kaip aš,
kaip aš tiesiog padaryti čia, nes apskritai,
mūsų programos ketinate gauti daug įdomiau ir daug ilgiau, nei tai,
ir, jei jūsų gyvenimo problemų sprendimas tiesiog įdėti visus kintamuosius failo viršuje
labai greitai programos gauti horrifically sunku valdyti.
Ji pasireiškia sunkiau sugalvoti naujų kintamųjų vardai,
ji pasireiškia sunkiau suprasti, ką kintamasis yra tai, ką,
ir apskritai, tai yra nėra geras sprendimas.
Todėl galime tai padaryti geriau.
Mes nenorime naudoti pasaulinį kintamąjį.
>> Aš noriu prieaugio x, kad galėčiau akivaizdžiai
dienos pabaigoje, tai yra rūšies kvailas istorija, nes mes tiesiog tai padaryti -
bet jei aš ne žinoti apie tokio subjekto ar aš nebuvo leista jį pakeisti pagrindinio pati,
kaip kitaip galėčiau įgyvendinti Ken čia šį kartą ne kubo, bet prieaugio?
Kaip aš galiu pasikeisti tai, ką čia? Taip.
[Studentas] Pereiti į x ir tada grįžti [nesigirdi] >> Gerai, gerai.
Tad kodėl gi ne galiu perduoti x ir tada, o ne grąžinti,
kodėl ne aš tiesiog grąžinti x + 1.
Pora daugiau ką keisti čia. Aš esu teisingame kelyje.
Ką dar man reikia įgnybti? Kas nors kitas. Taip.
[Nesigirdi studentas atsakas]
Man reikia pakeisti grįžimo tipo prieaugio, nes jis negaliojančiomis.
Void reiškia nieko yra grąžinamas, bet aiškiai dabar ji yra,
, todėl tai turi pakeisti - >> [studentas] int.
int turi būti suderinti su kokia aš tikrai grįžta.
Dabar kažkas vis dar Buggy čia. Taip.
[Nesigirdi studentas atsakas] >> [Malan] Taigi man reikia prieaugio x?
[Nesigirdi studentas atsakas] >> [Malan] Ak, kad man reikia praeiti x.
Taigi man reikia tai padaryti čia. >> [Nesigirdi studentas komentaras]
[Malan] Taigi, prototipas, turiu pakeisti čia.
Taigi, tai turi tapti int, tai turi tapti
hmm, aš iš tikrųjų turi apie klaidą čia. Leiskite išspręsti šią iš pradžių.
Ką tai turėtų būti iš tiesų? Tai turi būti int kažkas.
Tai gali būti x, bet atvirai, jei pradėsite Kreipiamės į visus savo kintamieji x,
ji ketina gauti mažiau aišku, kas yra kas.
>> Todėl galime tik savavališkai pasirinkti kitą pavadinimų konvencijos mano pagalbininkas funkcijas,
funkcijos, aš rašau. Mes jį vadiname, ar galėtume vadinti -
Tegul jį vadiname skaičius būtų dar aiškesnis.
Taigi tada aš turiu grįžti, bet skaičius plius 1,
ir dabar turiu pakeisti 1 kitas dalykas, čia ir vienas kitas dalykas čia.
Ką turiu pakeisti eilutę 21? >> [Nesigirdi studentas atsakas]
[Malan] Turiu perduoti jas x. Aš negaliu tiesiog paskambinti prieaugis (x).
Man reikia prisiminti atsakymą keičiant x reikšmė kairėje pusėje.
Ir nors čia x yra dabar į kairę ir į dešinę, kad visiškai gerai
nes dešinėje pusėje pirmiausia paleidžiama vykdyti gauna plopped į kairėje dalykas -
x šiuo atveju.
Ir tada galiausiai, tai lengva nustatyti.
Tai tiesiog reikia suderinti, kas yra žemiau, int numeris.
Taigi visa krūva pakeitimų tikrai kvailas funkcija
bet atstovas dalykų, kad mes vis labiau nori daryti.
Todėl įsitikinkite, buggy4. Aš įsukus kažkur.
O, Dieve. Penkios klaidos 6-line programos.
Taigi, kas yra negerai on line 18 5, charakteris?
Taigi, aš turiu deklaruoti savo, int.
Pažiūrėkime. Yra visa krūva kitų klaidų.
O, mano Dievas - 19, 18, 21 - bet vėl, tegul tiesiog išvalyti ekraną, Valdymo L,
ir iš naujo Apsukite metalinis garsas.
Taigi 5 problemos iš tikrųjų yra tik tai, kad 1.
Taigi dabar galime paleisti buggy4, "Enter". FIU, x buvo padidinamas teisingai.
Gerai. Kokių nors klausimų apie tai, kaip prieaugio skaičius? Taip.
[Nesigirdi studentas klausimas] >> Geras klausimas.
Kaip tai, kad aš galiu tiesiog pakeisti x skaičių ir programa bus iš karto žinoti?
>> Vėlgi, manau, apie tai, kaip šios abstrakcijos.
Taigi, jei aš esu pagrindinis ir Kenas yra prieaugis, atvirai, aš ne rūpintis, ką Ken vadina savo "iPad".
Man nerūpi, ką jis vadina nieko, kad turi daryti su savo šios funkcijos įgyvendinimą.
Tai įgyvendinimas detalė, kad aš, pagrindinė, nereikia rūpintis.
Ir taip tiesiog pakeisti jį nuolat viduje funkcija - čia ir numeris čia
yra visa tai trunka taip ilgai, kaip aš perkompiliuoti.
Tai tarsi patinka, jei jūs manote apie daugelis iš mūsų, tiems iš jūsų, su vairuotojų pažymėjimus
, kurie sukelia arba jei jūs net važiuoti automobilyje,
dauguma iš mūsų neįsivaizduoju, kaip automobilis veikia po kapotu.
Ir tiesiogine prasme, jeigu Jūs atidarote gaubtą, dauguma iš mūsų - tarp jų ir aš -
nesiruošia tikrai žinote, ką mes ieškome,
rūšies, kaip jūs galite jausti dalykų, kaip šios teisės dabar.
Bet mes tikrai turime rūpintis, kaip veikia automobilis,
mes neturime rūpintis, ką visi strypai ir stūmoklius ir kabelių viduje iš automobilio
iš tikrųjų daro.
Taigi kažkas panašaus į tai, ką vadiname stūmoklio čia šiuo atveju nesvarbu. Pati idėja.
Taip. >> [Nesigirdi studentas klausimas]
Jei yra daugiau naudoja kintamojo xa metu prieš
jūs, programuotojas, turėtų pakeisti juos visur.
Arba jūs tiesiog gali padaryti failą, meniu, ir tada ieškoti, pakeisti - kažką panašaus, kad -
, bet jūs ketinate turi atlikti šiuos pakeitimus sau.
Jūs turite būti nuoseklūs. >> [Studentas] Jei yra keli kintamieji [nesigirdi]
Tikra tvarka kaip čia, jei tai buvo int kitą numerį? >> [Studentas] Teisingas.
[Malan] Taip. Užsakymo svarbu, kai skambinate funkciją.
>> Taigi, jei aš vadino prieaugis čia su kažkuo kableliais kažką,
yra tiesioginis žemėlapių.
Pirmasis kintamasis, kokia ji vadinama, yra pirmojo argumento per čia kopiją.
Atsiprašau. Tai neturėtų būti skliausto.
Antrasis argumentas linijos iki su antrąją. Taigi, kad taip, klausimai. Gerai.
Atsiprašau. Aš paėmė ilgą kelią, kad ten patekti. Kiti klausimai? Gerai.
Taigi pažiūrėkime, jei mes negalime dažų vaizdą apie tai, kas iš tikrųjų vyksta čia
po kapotu, taip sakant.
Tai stačiakampis, gali atstovauti jūsų kompiuterio atminties.
Net jei jūs neturite idėjos, kaip atmintis veikia arba kaip RAM darbai,
bent jau manyti, kad turite kekių šių dienų.
Jūs turite megabaitų, jūs turite gigabaitų,
ir mes žinome, nuo 0 savaitę, baitų yra tai, ką? >> [Studentas] 8 bitai.
8 bitai, tiesa? Taigi 8 nuliai ir 1.
Taigi, jei jūsų kompiuteryje yra RAM koncertą, 2 koncertai RAM šių dienų,
turite milijardą arba 2 mlrd. baitųatminties arba maždaug 8 milijardų eurų arba 16 milijardų bitų
viduje kompiuterio.
Skirtingai nei mažai vilnonis Willy Pavyzdžiui, tai nėra magnetinės dalelės paprastai nebėra.
Vis nešiojamieji kompiuteriai mažiausiai - tai kietojo kūno diskai, SSD,
, kad tiesiog neturi judančių dalių. Visa tai yra elektroninis. Tai visi elektros energijos.
Todėl manau, kad šio stačiakampio kaip tik atstovaujanti 1 arba 2 gigabaitų atminties, kad jūs turite.
>> Todėl atminties riekė.
Kompiuterių mokslo pasaulyje yra tarsi atitverta
gabaliukus atminties, tai skirtingi dalykai.
Pavyzdžiui, jei tai yra jūsų kompiuterio RAM, kaip siūloma pagal stačiakampio ten,
paaiškėja, kad pagal susitarimą, jūsų RAM viršuje, taip sakant,
paprastai yra tai, kas vadinama teksto segmentas.
Tie, kurie 0s ir 1s, kad jūs turite surinkti.
Taigi, kai mes pažvelgė po kapotu, ne ką a.out
visa tai 0s ir 1s, kai paleidžiate programą,
tiems 0s ir 1s yra pakraunami iš jūsų kietojo disko į kažką vadinama RAM,
ir jie įdėti RAM viršuje.
Tuo tarpu, jūs turite kitų dalykų: inicijuoja duomenis, uninitialize duomenis.
Tos 2 swaths atminties kreiptis į globalių kintamųjų, kurie jums nereikia dažnai naudoja
bet kartais, jei jūs darote, jie galų gale ten taip pat.
Tada ten kai kurių kitų dalykų: aplinkos kintamieji, kuriuos mes ne išleisti daug laiko,
bet tada 2 svarbių dalykų, kad bus grįžti visą semestrą,
kamino ir krūvos.
Taigi, dauguma iš jūsų kompiuterio atmintyje yra saugomos, kai buvo paleista programa
kažko vadinamas kamino ir kažką vadinama krūvos.
Mes neketiname kalbėti apie krūvos šiandien, bet mes kalbame apie kamino.
Kamino yra skirtas įsivaizduoti vizualus ir valgomajame valgio padėklai Mather House
arba, kad ir kur bebūtumėte būti ten, kur valgykla darbuotojai valyti juos kasdien,
jie sukrauti juos nuo grindų iki
ir panašiai, atminties, yra ši idėja pradėti kažką ant kamino,
pradėti kažką ant kamino, pradėti kažką kamino.
Ir ką reiškia šis?
>> Leiskite padidinti tik apatinėje šioje nuotraukoje, kompiuterio RAM,
pasiūlyti šias.
Pasirodo, kad kai paleidžiate programą, kaip a.out arba Hello -
kokia programa yra kad rašėte -
vėl, tie 0s ir 1s yra įkelti iš savo kietąjį diską, kuris yra ilgalaikio saugojimo,
lieka ten, net jei jūs traukite už kištuko, pakrautas į RAM.
RAM greičiau nei kietieji diskai - tai mažesni nei standžiųjų diskų -
bet tai kur programos gyventi, o jūs naudojate juos.
Taigi, jūs dukart spustelėkite programą ant Mac arba PC, jis pakrautas iš kietojo disko į operatyvią atmintį.
Iš karto, kai jis pakrautas į RAM, 0s ir 1s eiti į tai, kaip viršuje,
vadinamoji teksto segmentas, bet tada kuo greičiau jūsų programa iš tikrųjų prasideda,
pagrindinė funkcija yra vadinama, ir pagrindinis, kaip mes matėme, dažnai yra vietos kintamieji,
ir ji turi Ints ir styginiams ir simbolių ir pan.
Taigi, jei jūsų programa, kad jūs turite raštu arba programa, kad jūs turite du kartus paspausti
naudojamas kai kurių kintamųjų, viduje prie Maino,
jie galų gale savo atminties kamino apačioje, taip sakant.
Konkrečiau, ką tai iš tikrųjų reiškia?
Tai tiesiog reiškia, kad, jei mes ketiname skaičius baitų RAM savo kompiuteryje,
pastebėsite, kad tai gali būti baitų skaičius "0", tai gali būti baitų skaičius 1, 2, 3, 4, 5, 6,
visą kelią iki 2 milijardų būtų visą kelią iki ten viršuje.
Taigi, kitaip tariant, kai mes kalbame apie RAM arba atminties baitų,
tai tiesiog reiškia, kad kažkas nusprendė ką sunumeruoja kiekvieną iš šių atminties gabaliukus.
Taigi, kai jūs turite 32 bitų int, ar jums reikia 8 bitai char,
kur jie galų gale į atmintį?
>> Konceptualiai, jie tiesiog galų gale šis dalykas, vadinamas kamino apačioje.
Bet kas įdomu, dabar, kai pagrindinis ragina funkcija -
Tarkime, funkcija vadinama Foo, tiesiog savavališkai vardas
kas atsitinka, yra pagrindinis šios atminties kamino apačioje;
foo dabar yra ant Maino atmintyje.
Taigi foo vietinius kintamuosius, kurie turi baigtis rūšiuoti konceptualiai ypač tiems, pagrindinis.
Jei foo ragina kitą funkciją, vadinamą baras, šie kintamieji galų gale čia.
Jei juosta ragina ką nors kita, čia, čia, čia.
Taigi, kas įdomu paleista programa yra ta, kad, kaip jūs Skambinimo funkcijos
ir kaip šios funkcijos Skambinimo funkcijos ir kaip šios funkcijos Skambinimo funkcijos,
jums sukurti šią atminties funkcijų krūvą.
Ir tik kartą per funkcija grąžina jums pradėti gauti, kad atminties atgal.
Taigi, vienas iš paprasčiausių būdų, kaip paleisti iš atminties į kompiuterinę programą
yra parašyti funkcijas, kad niekada grįžti.
Taigi, pavyzdžiui, galime įrodyti, kiek su tyčia Buggy programą.
Leiskite man eiti į priekį ir padaryti # include ,
int main (void),
ir aš ruošiuosi daryti, o (2> 1), kuris tikriausiai nebus kada nors pakeisti į mus,
ir leiskite man eiti į priekį, dabar ir daryti printf.
Tiesą sakant, tai bus mažiau vizualiai įdomus. Darykime tai.
Int i = 0; i> 0 - galime padaryti šią klaidą - i + +.
Ir tegul ne printf čia. Tegul praktiškai tai, ką aš pamokslavo.
Tegul turi metodą, void choras, ir mes pasakyti, int i,
ir tada aš ruošiuosi pasakyti printf - ne, padarykime tai įdomiau.
Leiskite tikrai ne spausdinti ką nors ne visi. Tegul tik tai padaryti: choras (i).
Gerai. Taigi tai yra Buggy nes kodėl?
Aš tai kaip aš eiti, nes programa nėra iš tikrųjų nieko daryti interesų.
>> Bet tai nėra tikslas.
Tikslas yra rašyti programą, kurios pagrindinė funkcija ką daro, matyt?
Pati. Ir iš tikrųjų, mes nereikia kilpą.
Leiskite netgi supaprastinti, tai tik taip, kad nebūtų pamiršti tikrai pagrindinės klaidą.
Pagrindiniai ragina choras dainuoti kai choras,
tada aš kažką kvaila ir aš turėjo chorus skambučių choras
nes aš manyti, kažkas buvo gal ją įgyvendinti,
o dabar tai nesiruošia sudaryti dar. Man reikia daryti tai, ką?
Man reikia prototipą, prisiminti.
Taigi man reikia, kad čia void choras (int i);
Taigi dabar, jei aš einu čia - iš tiesų, galime naudoti didesnį langas.
Eikime į priekį ir padaryti choras.
Nedeklaruojamo identifikatorių i.
O, kad buvo kvaila. Mums nereikia argumento. Tegul tik tai padaryti.
Linkiu, kad pradėjo šį kelią. Būtų buvę daug lengviau programa rašyti.
Yra. Dabar leiskite eiti per mano terminalo lange, pakartotas Apsukite metalinis garsas, ir čia mes einame.
Tai buvo iš tiesų greitai.
Kas iš tikrųjų tiesiog atsitiko, nors?
Na, dabar aš pridėsiu spausdinimo liniją, todėl mes galime pamatyti.
Leiskite man pasakyti printf ("Aš esu čia") - kintamieji nėra. Jį paliksime, kaip kad.
Leiskite man iš naujo paleisti padaryti. Leiskite man pakartotas choras.
Ir ... come on. Nesustoti.
Kaip panaikinti, kodėl tai nėra sudužo dar?
Segmentavimo kaltės įvyko prieš super greitai.
[Nesigirdi studentas atsakas] >> Taip. Todėl užtrunka laiko spausdinti, tiesa?
Jis tiesiog reikia daugiau kompiuterio darbą.
Ir ten yra: Segmentavimas kaltė.
>> Taigi pastebėsite, kaip greitai programas paleisti.
Jei jūs nieko nespausdina, super greitai.
Bet mes vis dar turime šį segmentavimo kaltės, nes tai, kas vyksta?
, Jei jūs manote apie tai, kaip jūsų kompiuterio atminties yra išdėstyti,
tai atsitinka būti pagrindinis, bet čia galime tik paskambinti šį choras, ir tegul vadiname šį priedainį.
Ir dabar, jei aš tai padaryti savo estetiką, teisę, tai tiesiog vyksta pasakyti, choras, choras, choras,
choras, choras, choras, choras, skelbimą nauseum, ir, galų gale, kas nutiks?
Jei vaizdą, pažodžiui, yra tai, kas atsitinka konceptualiai?
Kamino viršijimus krūvos.
Arba, dar blogiau, jūs tiesiog viršijo viską, įskaitant teksto segmente,
0s ir 1s, kurie atstovauja savo programą.
Trumpai tariant, tai yra tiesiog super, super blogai.
Jūsų programa spiralled iš kontrolės.
Jūs naudojate būdas daugiau atminties nei manėte
visi, nes kvaila klaida šiuo atveju,
ar šiuo atveju labai sąmoningai padaryta funkcija skambinama.
Dabar, tai yra ne visi blogi.
Funkcijos, vadinančios save iš tikrųjų turi didelę galią, kai jūs jį naudoti teisingai.
Aš ne naudoti jį teisingai čia.
Taigi tai yra ne visi blogi, bet tai, kad aš niekada iš tikrųjų sustabdyti paskambinus save
yra pagrindinis silpnumas čia šios programos.
Taigi, kur mes einame su visa tai? Kas iš tikrųjų vyksta?
Kai aš vadinu prieaugio funkciją, kaip mes darome šių pavyzdžių,
Turiu kaip 1 i kirsti.
Galiu perduoti skaičiumi 1 kopiją, kad taip atsitinka.
Eikime į prieaugio Pavyzdžiui, ši teisė čia vaikinas.
Štai kas iš tikrųjų vyksta.
Kai aš vadinu prieaugį ir galiu perduoti x, pictorially, kas čia vyksta.
>> Jeigu aš turiu čia saugomi vertė yra lygi 1, ir aš iš tikrųjų skambinti prieaugis,
, kuris dabar vadinamas choras - iPad mesti man čia išlipti.
Susisiekime Šis padidėjimas, ir mes nežinome, ką ši funkcija bus.
Taigi, kas iš tikrųjų vyksta kažkur čia pagrindinis Turiu atminties riekė
kad kaupia skaičių 1.
Kai aš vadinu prieaugį, aš naudoju kitą atminties riekė,
bet dabar turiu 1 kopiją.
Kai aš prieaugio tą vertę, tai tampa 2,
tačiau tai, kas atsitinka, kuo greičiau prieaugio grįžta?
Ši atmintis tik bus grąžintas į operacinę sistemą,
, o tai reiškia, jūs padaryti nieko naudinga.
1, kuris iš pradžių buvo pateikta pagrindinio vis dar iš tikrųjų egzistuoja.
Taigi, kur mes einame su tuo?
Pasirodo, kad atmintyje turite šią atgal-to-back baitų seką
, kad jūs galite įdėti stuff, ir paaiškėja, kad mes jau matėme kažką
, kuris apima juos atgal atgal atgal atgal.
Kas yra eilutė, remiantis 1 savaitę, ir dabar 2-ąją savaitę?
Tai tik ženklų kolekcija.
Taigi paaiškėja, kaip jūs galite įdėti atminties skaičių,
taip pat jūs galite įdėti atminties simbolių.
Ir kai mes pradėti naudoti simbolių atmintyje atgal atgal atgal atgal
it turns out, kad naudojant paprasčiausių dalykų, pavyzdžiui, linijos ar while cikle,
mes galime pakartoti iš kairės į dešinę per simbolių į eilutę
ir pradėkite masažuoti juos į skirtingų charakterių, iš viso -
gali tapti b, b gali tapti c
, kad galiausiai, mes galime imtis anglišką sakinį, kad iš tikrųjų prasminga
ir paversti kiekvieną iš šių laiškų 1 metu
vaikščioti per mūsų kompiuterio atmintyje, iš kairės į dešinę, kad iš tikrųjų užšifruoti.
Todėl galime imtis mūsų penkių minučių pertrauką,
ir kai mes einame atgal, mes pradėsime šią informaciją kodavimo procesą.
>> Gerai.
Prieš mums pasinerti į tam tikrą kriptografijos ir šie dalykai vadinami matricos,
leiskite man pristabdyti visus klausimus, nes aš jaučiuosi kaip aš tikrai rūšies painiojamos
kai kurie iš šių temų. Todėl galime išspręsti dabar, jei mes galime.
Mes tiesiog kalbėjomės apie grąžinti reikšmes, mes kalbėjome apie argumentų,
ir mes kalbėjome apie šią sąvoką, kuriuos mes grįžti per kelias savaites ateiti,
peržiūrėti atminties, visa krūva šių sukrauti padėklai, taip sakant,
iš apačios On Up, tokia, kad kiekvienas, kad gauna įdėti kamino dėklas
sudaro funkcija, kuri šiuo metu yra vadinamas.
Turite klausimų?
Leiskite man užduoti klausimą čia.
Leiskite man supaprastinti šį atgal, kas buvo prieš kai kurie iš mūsų anksčiau Q & A
Tai, kad prieaugis turi atvirą skliaustų, int numeris, uždaras skliausteliuose -
ką int numeris?
[Studentas] argumentas. >> Argumentas. Gerai. Bet koks argumentas?
[Nesigirdi studentas atsakas] >> Kas tai? >> [Studentas] Kažkas, kad jums perduoti.
Gerai, kad kažkas, kad jums perduoti in Ir apskritai, tai tik įėjimo.
Jei jūs raštu funkciją ir šią funkciją tikslą gyvenime
yra padaryti kažką šiek tiek skiriasi kiekvieną kartą, kai jį naudoti,
tada vienintelis būdas, kad taip atsitiktų iš tikrųjų atrodytų, kad suteikti jai įvesties
taip, kad jis gali padaryti kažką kitaip, kad įvesties kiekvieną kartą.
>> Taigi, jums reikia nurodyti du dalykus, kai funkcija, įvesties.
Jums reikia nurodyti vardą, kurį norite suteikti, kad pirkimo
grynai savo patogumui, kad jūs galite kreiptis į jį
funkcijos, kad jūs pats rašote, kaip aš čia 32 eilutėje.
Bet jūs taip pat reikia nurodyti jo tipą, nes C yra programavimo kalba
, kad tiesiog reikia, kad jei norite kintamąjį, turite pasakyti kompiuterio duomenų tipas,
didele dalimi taip, kad jis žino,, kiek bitų skirti šiam kintamajam
nes tai galėtų būti 6 - atsiprašau, ji negali būti 6.
Tai gali būti 16, gali būti 8, ji gali būti 32, net 64
bet kompiuteris turi žinoti.
Dabar, int kairėje pusėje yra kas, priešingai?
[Nesigirdi studentas atsakas] >> Kas tai? >> [Studentas] Tipas funkcija.
Funkcijos tipą ir, konkrečiai kalbant, jos rezultatų tipas. Į dešinę.
Taigi, o skliausteliuose dalykas atstovauja jo indėlis, jei tokių yra,
dalykas, į kairę savo produkciją.
Ir šiuo atveju, prieaugio, matyt, grąžina int,
ir taip int yra grįžimo tipo šios funkcijos.
Ką tai reiškia grįžti?
Pažodžiui, galite naudoti raktažodžių deklaraciją ir tada, jei tai, ką jūs grįžta
į dešinę nuo raktinio žodžio yra sveikasis skaičius,
tada, kad yra iš tikrųjų atitinka su tuo, kas buvo žadėta.
Tu negali padaryti kažką panašaus į tai - Hello, World - dėl to, kad yra eilutė.
>> Akivaizdu, kad tai yra ne sveikasis skaičius.
Taigi trumpai tariant, ši našta yra tikrai mums, programuotojas, tiksliau
ką mes grįžta ir tada iš tikrųjų eiti apie grįžimą.
Kontekstas čia dabar yra, kad jūsų kompiuterio atminties gigabaitų, 2 GB -
kokia - gal daugiau, gal mažiau,
bet kompiuteris tai mato kaip skirtingus skirsnius.
Kažkas ten, kažkas eina ten,
kitoks stuff eina per vidurį, ir šiandien mes tiesiog pradėti pasakoja istoriją,
bet mes grįžti į šios laikui bėgant.
Nes dabar, mes tikrai rūpi tik atminties gabalas teksto segmentas
nes, kad tik 0s ir 1s, kad Apsukite metalinis garsas išvedamas.
Taigi, kai jūs paleisti komandą kaip a.out klaviatūra
arba dukart spustelėkite piktogramą Mac OS arba Windows
jūsų programa yra pakrautas iš jūsų kietojo disko į RAM
ir tai plopped kompiuterio RAM viršuje, taip sakant.
Tuo tarpu, kaip jūsų programa pradeda veikti ir pagrindinis iškviečiamas
programą, kurią parašė arba programa Microsoft ar Apple rašė
bet kuri jos vietos kintamųjų galų gale ten kompiuterio atmintyje apačioje.
Bet jei pagrindiniai ragina kita funkcija, kuri pati turi kintamuosius arba argumentus, jie galų gale virš jo.
Ir, jei tai funkcija reikalauja kažką, jie galų gale virš jo, virš jo, virš jo.
>> , Ir tik vieną kartą funkcija atliekama vykdant nėra padėklai kamino, taip sakant,
pradeda gauti mažesnes.
Ir tai, ką tada trumpai tariant, paaiškina, kodėl kai skambinate kubą
ar jūs vadinate prieaugį, jūs einančios vertės kopiją.
Ir ką tai reiškia pictorially yra, kad jūs tiesiog rašau skaičių 1
kitą atminties dalis, keičiant, kad 1 iki 2 prieaugio atveju
arba 8 Kubo atveju ir tada mesti, kad atmintis
kuo greičiau prieaugio arba kubo funkcija grąžina. Klausimas.
[Studentas] Kur saugomi globalių kintamųjų?
Globalūs kintamieji yra saugomi, kas dabar vadinama inicializuoti duomenų ar niezainicjowanymi duomenų
skirtumas yra, jei turite pasaulinį kintamąjį ir priskirti ją nedelsiant vertę
su lygybės ženklą, jis baigiasi ten viršuje
ir jei jūs tiesiog pasakyti int x; reikšmės neturintis, tai galų gale šiek tiek mažesnis RAM
tiesiog pagal susitarimą.
Kiti klausimai? Gerai.
Taigi šį paveiksliuką grįš, kaip mes gauti daugiau galingas
su tuo, ką mes galime padaryti su kompiuteriu,
bet dabar galime turėti trumpą intro kriptografija,
tam tikros rūšies kriptografija, tai nepadeda išspręsti visų pasaulio problemų
tačiau išspręsti kai kuriuos iš jų.
Šiuo atveju čia, mes turime kažką vadinama paslaptis rakto kriptografija.
Paslaptis rakto kriptografija, kaip rodo pavadinimas, kilęs jos saugumą nuo paslaptis.
>> Pavyzdžiui, jei jums buvo pradinėje mokykloje ir ėjo šiek slaptą meilės laišką
berniukas ar mergaitė, jūs trupinimo, jei norite pereiti, kad dėmesį per auditoriją,
tikriausiai nebūtų įrašyti tokią pastabą anglų arba kokia jūsų gimtoji kalba.
Vietoj to, galite užšifruoti ją arba galite tiesiog nusiųsti tekstinį pranešimą šių dienų.
, Bet jūs iš tiesų gali perduoti jiems pastabą visoje klasėje.
Ir tai padaryti saugiai tokiu būdu, kad jūsų draugai ir mokytojų
nežinau, ką rašote, jums gali sugalvoti gana paprasta algoritmą,
jauna, nors jums gali būti, kad tiesiog peštynės žodžius.
Taigi vietoj raštu, jums gali rašyti b,
vietoj b, jums gali rašyti C,
vietoj C jums gali rašyti D, ir tt.
Ar galima sugalvoti sudėtingesnį vertimas
raidžių skirtingomis raidėmis.
Bet laimikis berniukas ar mergaitė, kam jūs siunčiate šį pranešimą
kažkas, kuris yra tai, kas, be abejo, reikia žinoti? >> [Studentas] Ką jūs siunčiate.
Ką jūsų paslaptis, kaip tai, kas yra tai, kad tarp ir pusryčiai ir C ir D's žemėlapių.
Tai tiesiog pridėjus 1 iš raidžių nuo a iki b, b-c?
Tai yra sudėtingesnis nei tas?
>> Kad jūs ir jūsų traiškyti reikia turėti šį slaptą informaciją,
bet ten rūšies Catch-22 čia.
Jei tai yra pirmą kartą, jūs siunčiate šį meilės laišką per klasės,
Kaip tai berniukas ar mergaitė, žinoti, kas paslaptis net?
Taigi paslaptis rakto kriptografija neišsprendžia visų pasaulio problemų,
ir yra iš tikrųjų santykiai, kad mes grįžti į semestro pabaigoje.
Panašiai padaryti daugelis iš mūsų nežino, ką nors, kad dirba, pavyzdžiui, "Amazon.com",
ir dar daugelis iš mūsų tikriausiai nusipirko stuff "Amazon.com
ir mes buvo mokomi daryti prielaidą, kad šios e-komercijos sandoriai yra saugus.
URL tikriausiai sako, "https", ten gal kvailas mažai spynos piktograma kažkur,
kriptografijos rūšis yra keletas apsaugoti savo kredito kortelės informaciją
tarp jūsų ir "Amazon.com".
Ir dar, jei kriptografija reikia žinoti kažkokią paslaptį
ir dar aš ne žinoti, kas "Amazon" ir aš tikrai nesudėti bet paslaptis natūra
kažkas ne "Amazon", kaip mano kompiuteris ar mano naršyklė tai daryti?
Pasirodo, ten yra kitų tipų kriptografijos apskritai, kad išspręsti šią problemą.
Tačiau šiandien, mes sutelkti dėmesį į paprasta
kur jūs galite pasirūpinti iš anksto žino kažkokią paslaptį,
kaip +1 arba kai tarp A ir B žemėlapių.
Ir kriptografijos procesas paprastai apima.
Turite kokių nors paprasto teksto, pavaizduotas čia kairėje,
jį paleisti per kažkokį algoritmą ar procedūros šifravimo -
gal tai tiesiog tampa B ir B tampa c
ir tada jūs galų gale su ciphertext.
Tuo tarpu, jei jūsų sutraiškyti gauna šią paslaptį dėmesį,
jis ar ji tada iššifruoti visuotinai atbuline eiga šio algoritmo
siekiant gauti paprastą tekstą.
Yra fizines įsikūnijimai.
>> Pavyzdžiui, tai yra šiek tiek paslaptis dekoderis žiedas,
ir tai yra ta prasme, kad dviejų surenka čia žiedas.
Į lauko periferijoje šis dalykas, ten raidės nuo a iki z,
nors jie atsitiktine tvarka,
ir į vidų, yra iš tikrųjų kai kurie numeriai
pavyzdžiui, kad šį žiedą galite rūšies pasukti išorės, tačiau ne viduje
išsirikiuoti numerius su raidėmis.
Iš filmo vadinamas Kalėdų istorija, pamatysite, kad mažai Ralphie
buvo taip nori išsiaiškinti, kas Little RETI Annie paslaptis pranešimas buvo jam
, kuri buvo perduota, manau, skaičių pranešimų dėl javų lauką
ir jums teko sukaupti visi šiek tiek korteles, kad atėjo grūdų langelyje,
jums teko mail juos, jūs turėjo grįžti slaptą dekoderis žiedą
taip, kad jūs galite pagaliau išsiaiškinti, kas kartografavimo tarp raidžių ir skaičių
arba raidėmis ir raidžių.
Kaip į kompiuterį galime eiti apie dalykų, pavyzdžiui, įgyvendinant arba jam atstovauti?
Mums reikia išreikšti save šiek tiek lanksčiau
nei mūsų kintamieji, iki šiol leido.
Mes turėjome int, mes turėjo simbolių, mes turėjo float ir double ir keli kiti,
bet tie, kurie individualūs atminties vienetų, kurie nėra tikrai leidžia mums išreikšti dalykus
kaip žodžių ir sakinių ir frazių.
Iš tiesų, mes vadinami tokius dalykus eilutes,
tačiau mes pažadame, kad tai tikrai tik supaprastinimas CS50 bibliotekoje
kad mes, ketinantis žievelės atgal.
Ir todėl pradėkime tai padaryti čia.
Leiskite man eiti į priekį ir atverti failą -
visi iš šių failų nėra, kaip įprasta, internetu - vadinamasis array.c
išspręsti problemą, nesusijusių su stygos, bet kad dažai nuotrauką
apie tai, kaip mes galime naudoti kažką vadinama masyvas.
>> Masyvas yra duomenų tipas.
Tai tipo kintama rūšių, kad turi keletą mažesnių duomenų tipai ir jame esantys
atgal atgal atgal atgal.
Taigi, pavyzdžiui, jei mes norėjome rašyti maža programa, kuri suteikia jums viktorina vidurkį
kaip 50, kad turi 2 viktorinos,
galima labai lengvai rašyti šią programą, pagrįstą net kai praėjusią savaitę medžiagos
, naudojant GetInt ir kintamųjų pora: int quiz1, int quiz2.
Ir tai gana paprasta.
Tai galbūt 10, 20 eilučių kodo max įdiegti programą
kad klausia, už 2 viktorinų balai vartotoją ir tada apskaičiuoja Jų vidutinis
įtraukdami juos kartu, dalijant iš 2, tada spausdinti rezultatus.
Mes turbūt galėtų padaryti, kad gana lengvai dabar po tam tikro minučių.
Tačiau problema yra ta, kad tarkime, kad 50 turėjo 3 viktorinos arba 4.
Tarkime, kad jūs norite naudoti tą pačią programą klasėje, buvo savaitraščio viktorinos.
Galvoti apie tai grupei, kuri buvo per savaitę viktorinos.
Jei yra 16 arba savaites per semestrą, dabar jūs turite 16 kintamuosius:
int quiz1, int quiz2, int quiz3, int quiz4.
Kaip tik jūs pradėsite matyti šį atleidimo iš darbo, tai kopijuoti ir įklijuoti kodo,
ji turėtų pradėti, kad norite, kad buvo geresnis būdas.
Ir laimei, nes masyvų yra. Todėl galime tai padaryti.
Pirma, leiskite man pristatyti labai paprastas dalykas, kad mes iki šiol nėra naudojamas,
bet pamatysite jį retkarčiais kodą.
>> Tai yra tai, kas paprastai vadinama konstanta.
Taigi, tai ta prasme, kad ši vertė niekada keičia konstanta.
Žmogaus konvencija kuriant konstanta
naudoti visas didžiąsias raides tik todėl, kad ji tikrai išsiskiria savo kodą,
ir konkrečių raktinių žodžių, kad jūs naudojate, C # define.
Taigi, mes sakome, # define, tada tarpą, tada žodį, kurį norite naudoti The Constant pavadinimą
ir tada konstantos reikšmę.
Atkreipkite dėmesį, tai skiriasi nuo priskiriant kažką kintamojo.
Nėra jokios lygybės simboliu, yra ne kabliataškis.
Tai yra tai, kas paprastai žinomas kaip Preprocessor direktyvą,
kad kitą kartą, bet daugiau.
Nes dabar, tai sukuria nekintamą vertę, vadinamą viktorinos
kurios faktinės skaitinė vertė yra 2.
Visur, kur matyti viktorinomis, viktorinos, viktorinos per šį failą,
tai tik numeris 2.
Jei aš žiūriu pagrindinis dabar, galime pamatyti, kaip tai veikia.
Pirmiausia ji atrodo šiek tiek paslaptingas, bet tai visi nuo 1 savaitės stuff.
Užduoti vartotojo klasėms. Kaip mes tai darome?
22 eilutė - tai tikrai sultingas - deklaruoti plūdę
bet ne tik vienas plūduriuoti. Aš deklaravimo, o slankiojo kablelio vertybių masyvo.
Šis kintamasis bus vadinamas klasių, kaip teigiama čia,
bet tik naujos sintaksės gabalas, tada šie skliaustus.
Tai, kad aš jau sakiau plūdės pažymius ir tada skliaustai atidaromi ir tada skaičius -
pastebėti, jei tai yra pastovi, tai tik, kaip mes padarėme tai -
tai reiškia: "Ei, kompiuteris, duok man 2 plūdės ir tegul kartu jiems skambinti klasių."
>> Tai priešingai yra daug labiau varginantis procesas, panašaus į tai: float Grade1;
plaukti Grade2; ir kt.
Taigi pasirinkimas leidžia mums įgyvendinti šią idėją, tačiau daug mažiau messily,
tokiu būdu, kad mes galime rašyti 1 eilutę kodo, o ne, tarkim, 16 - 16 savaičių semestras.
Nenorėjau į sunkiai kodekso 2, nes jei jūs manote apie tai dabar logiškai,
CS50 pokyčiai 3 viktorinos, o ne, tarkime, kitais metais
ir turėjau skaičių 2 čia, turėjau skaitmeniu "2",
Aš turėjau skaitmeniu "2", skaičių 2 čia.
Jis tampa labai varginantis ir labai lengva susukti
ir netyčia pakeisti 1 kartą vertė 3 ir praleisti šiek tiek kitą vertę 2.
Todėl aš, o ne abstraktus šį toli ir naudoti ši konstanta, kad,
kaip rodo jo pavadinimas, niekada nesikeičia.
Ir dabar nesvarbu, ar mes turime skirtingas viktorinos šiais ar kitą,
Aš tiesiog jį pakeisti vienoje vietoje čia viršuje.
Taigi, kad visi konstanta.
Tuo tarpu naujas konceptualus bruožas yra tai, kad masyvo.
Taigi laužtiniuose skliaustuose duoti man tai daug plūdės ir leidžia man kartu skambinti jiems pažymiai čia.
Taigi, dabar galime pamatyti, ką aš ruošiuosi daryti.
Čia 24 eilutėje yra už linijos pradžia.
>> Tai tikrai nieko išgalvotas. Tai tiesiog naudojant viktorinos vietoj sunkiai užkoduotų skaičių.
Bet ten nieko intelektualiai skiriasi iš praeitą savaitę.
Tai tik printf, printf ("Viktorina #% d iš% d:")
nes aš tik noriu atsispausdinti, duok man viktorina iš 2 1 numerį ir tada 2 iš 2.
Todėl tai yra grynai estetinis dalykas.
Bet įdomiausia dalis dabar yra 27 eilutėje.
Siekiant užpildyti vieną iš dviejų vietos rezervavimo ženklai su slankaus kablelio skaičius,
jūs vėl naudoti skliaustus.
Šiuo atveju, aš naudoju, nes tai už linijos pradėjo su i lygus Kokią vertę, matyt?
[Studentas] 0. >> [Malan] 0.
Pirmajam iteracijos procesui šio ciklo, tai kaip nors parašiau kodu,
bet antrajame iteracijos šio ciklo, tai kaip nors parašiau, mano kodas.
Bet faktas, kad aš naudoju kintamąjį yra tobulas, nes, kaip rodo pavadinimas,
tai skirtingos savo vertę ant kiekvieno iteracijos
todėl aš užpildyti šio masyvo vienoje vietoje vienu metu.
Ką šis masyvas atrodo?
Anksčiau buvo priežastis, kodėl aš čia padarė super paprastą stačiakampį ekrane dėl šios priežasties.
Masyvas yra tik atminties riekė po kitos atminties riekė
kitos atminties riekė ir kt.
Taigi, jei mano masyvas yra 2 dydžio, šiuo atveju čia viskas, ką būtų daryti
rašyti mano viktorinų balai kaip čia - aš turiu 100 apie šį vieną, ir tada aš turiu 99 dėl šio vieno
tada ši atmintis gali net būti naudojamas, nes aš tik paprašė kompiuterį
masyvo dydis 2.
Šios kvadratų yra vis dar ten, tiesa?
Jūs vis dar turite 2 GB RAM, net jei jūs tik prašo 2 plūdės.
Taigi už masyvų idėja, kad kompiuteris tik mano atminties riekė
ir tada paskirsto mažesnius gabalus atgal atgal atgal atgal.
Ir taip, kad visas masyvas.
>> Tai gretutinė riekė atminties viduje, apie kurį jūs galite įdėti dalykų.
Tai atsitinka tada padaryti tik šiek tiek nuobodu aritmetiką.
Jei aš slinkti žemyn čia, tai kur aš tada pakartoti per masyvo.
Aš sugalvoti su visų masyvo reikšmių apibendrinimo,
ir tada galiu naudoti apvalios funkciją čia iš tikrųjų sumą, padalintą iš viktorinos.
Bet leiskite man pamojuoti savo jėgas, kad pakankamai aritmetinis nes dabar kaip rūšiuoti.
Bet visa tai daro už mane galiausiai apskaičiuojant vidurkį.
Taigi pirmoji viktorina plius 2. viktorina padalinti iš 2 ir tada spausdinti jį kaip int.
Bet tegul dabar perėjimas į kitą, pavyzdžiui, vadinamas String1
dažai panašų vaizdą, bet naudojant styginiams.
Leiskite man eiti į priekį ir supaprastinti tai vos akimirką.
Atleisk dabar įdubimas.
Šiame pavyzdyje 19 eilutėje skelbimą, man nuo vartotojo eilutę.
, Bet pastebėsite, ką aš kitą daro linijų 22 pirmyn.
Aš tikrai iteravimu nuo i iki ir tai yra naujas triukas - strlen, eilutės ilgis.
Tai funkcija, kuri ateina su C, kad jei pereisite eilutę,
jis jums pasakys, kiek simbolių yra toje eilutėje. Štai ir viskas.
Ir tai, kad ji strlen vietoj eilutės ilgis yra tik todėl, kad daugiau glausta.
Prieš trisdešimt metų, žmonės mėgo rašyti dalykus trumpai, kaip įmanoma,
todėl mes čia laikyti šią konvenciją.
i + + tiesiog reiškia prieaugio i kiekvienos iteracijos.
Ir dabar pastebėti, kuris yra tikrai įdomus.
Atitinka 24, aš sakau: "Kompiuteris, duok man ženklą, 8 bitai, ir jį vadiname c".
Bet kas tai yra dešinėje pusėje sakydamas?
Anglų kalba, ką tai?
[Studentas] Pirmasis simbolis masyve.
Tiksliai. Duok man pirmąją raidę masyvo.
Arba, apskritai, duok man ith masyvo simbolį.
Ir suvokti, labai svarbu, kad, kaip kompiuterių mokslininkų,
mes iš tikrųjų skaičiuoti nuo 0.
>> Jūs neturite savo nuožiūra dabar pradėti tai daryti.
Dabar jūs turite elgtis pagal kompiuterio lūkesčius ir skaičiuojami nuo 0
nes [0] bus pirmasis simbolis eilutę,
[1] bus antrasis [2] bus trečią ir tt.
Todėl ši programa, jei aš kompiliuoti, tai vėl String1, todėl įsitikinkite, String1
ir dabar aš paleisti String1 mano terminalo lange.
Jis laukia įvedimo, todėl aš ketina įvesti Dovydui Įveskite
ir dabar jis spausdina Dovydui visa skirtingomis linijomis, nes pranešimas, ką aš darau.
Aš spausdinti vieną simbolį vienu metu.
Mes negalime eiti į smulkmenas šiandien apie tai, bet aš ištrinti šio patikrinimo metu senumo.
It turns out, kad jei vartotojas yra netinkamas elgesys, rungimosi principu, ar tiesiog supainioti,
jūs iš tikrųjų galite nepateikia kai kurių ilgio eilutę.
Jei paspausite neteisingą mygtuką ant klaviatūros, jūs galite nesuteikia eilutę,
arba jei esate kenksminga, galite bandyti įterpti Gigabyte vertės esė
užpildyti šią eilutę, ir jei kompiuteris veikia iš atminties,
paaiškėja, kad mes ketiname grįžti šią ypatingą vertę, vadinama NULL.
Taigi dabar, tiesiog žinau, kad ten tai ypatingą vertę, vadinama NULL
, kuris leis mums patikrinti, kai mes iš atminties, be kitų dalykų.
Bet jei aš atverti dabar String2, pastebėti vienas skirtumas čia.
Pranešimas vienas skirtumas čia String2
Su String2, for ciklas yra šiek tiek kitoks.
>> Leiskite man ištrinti nulls, kad galėtume kalbėti apie tuos, kitą kartą.
Kuo skiriasi apie už linijos šį kartą?
Aš galiu eiti atgal į ankstesniame pavyzdyje.
Taip, kad 2 versija, tai versija 1. 1, 2.
1, 2.
Strlen skambutis kur?
Tai pirmosios dalies už linijos.
Bet mintis, kodėl aš darau tai? Taip.
[Studentas] Taigi jums nereikia skambinti funkcija kiekvieną kartą.
[Malan] Taigi mes vadiname funkcija kiekvieną kartą. Tiksliai.
Atšaukti iš kilpos, kad jie super paprasta
kai jūs tarsi suprantu, kad tai iniciacijos, ši sąlyga, ir atnaujintame variante.
Problema ta, kad ši sąlyga vyksta kiekvieną kilpą iteracijos.
Ir taip, šiame pavyzdyje čia, kas yra blogas apie tai, kad tai yra mano būklė?
[Studentas] Jūs skambinate strlen.
[Malan] Jūs skambinate strlen vėl ir vėl ir vėl.
Bet kai aš įvedėte Dovydu, tos eilutės ilgis yra 5,
ir jis nesiruošia keisti kiekvieno kilpa iteracijos
dėl to, kad eilutė yra dar D-v-i-d.
Taigi tai, kas vyksta, tampa vis svarbesne idėja užuomina
žinomas kaip dizaino sprendimo galiojimo, kai tiesiog negali padaryti kompiuterį daryti nereikalingą darbą.
>> Lygiai taip pat, kaip nukniaukti peržiūra pset2, pset2 standartinis leidimas
bus iššūkis jums, kad iš tikrųjų įgyvendinti tam tikrą šifrai,
kai kurie šifravimo algoritmai, kad galite užšifruoti
iššifruoti slaptas žinutes, panašiai kaip viena Ralphie iššifruoti.
Hacker leidimas pset2, mes ketiname eiti šiek tiek toliau.
Mes ketiname perduoti failą iš faktinė kompiuterinės sistemos
, kuriame yra visa krūva vardus ir faktinių saugiame slaptažodžius,
hacker leidimas iššūkis bus nulaužti tuos slaptažodžius
ir išsiaiškinti, ką kriptografija ar ką paslaptis buvo naudojamas iš tikrųjų tuos slaptažodžius.
Ir mes ketiname tai padaryti naudojant naują funkciją C
kad aš duosiu jums tik demo žinomas kaip komandinės eilutės argumentai.
It turns out, kaip kai kurie iš jūsų gali matyti skirsnyje ar vadovėlių,
pagrindinis ne visada turi negaliojančiu skliausteliuose.
Pasirodo, kad pagrindinis taip pat gali būti parašyta, kaip tai, su dviem argumentais,
argc ir argv, kur argc yra žodžių skaičius
kad įvedate po programos pavadinimo komandinę eilutę
ir argv yra tikrasis žodžiai.
Ir kaip laužtiniuose skliaustuose ten rodo, argv, matyt, masyvas.
Tai bus po po atminties eilutę eilutę eilutę.
>> Taigi, ką mes ketiname, kad būtų galima padaryti, pradedant pset 2 yra kažkas panašaus į tai.
Jei aš darau argv1, kuri yra pavyzdys, mes grįžti pirmadienį, ir paleisti jį,
pastebėsite, kad ji neatrodo, kad daryti ką nors dar.
Jis tiesiog spausdina savo pavadinimą.
Bet jei aš pasakysiu sudie klasė, pastaboje (įspėjime), kad ši programa akivaizdžiai kartojasi
per kiekvieną iš žodžių, kurie buvo įvesti komandinėje eilutėje.
Ir būdas, kuriuo mes prieiti prie žodžių, kad vartotojas įvesti komandinėje eilutėje
keičiant pagrindinė prasideda šį savaitgalį iš int main (void) int main (argc, argv)
ir taip gims komandinės eilutės argumentai.
Ir kai jūs gaunate tikrai sudėtingas, galėsite rašyti tikrai trippy programas
tokių kaip šis, kuris eina virš ir už
kai funkcionalumo mes padarėme iki šiol, bet gana galingas.
>> Taigi, mes palikti šį ekrane, ir mes matome, pirmadienį.
>> [CS50.TV]