[Powered by Google Translate] David J. Malan V redu.
To je CS50, in to je konec tedna 2.
Če pričakujete, da boste lačni po tem času jutri, vem, da bomo
sklicati kot majhno skupino jutri, v četrtek, 01:15.
Tam je to URL tukaj, če želite RSVP.
Vesolje je omejeno, zato vas prosimo, oprostite, če je oblika napolni do takrat, ko
izpolnite to.
Še en URL pa se, da bi bilo koristno, je to.
>> Torej, gre le za čas enega meseca, tečaj se bo na voljo
še toliko bolj na splošno prek EDX, prek katerega bodo ljudje na internetu je
lahko sledite skupaj sodelovati pri opravljanju zelo aktivno, v resnici.
Prišli bodo z uporabo aparata CS50 in CS50 razpravljali in večina
različnih programskih orodij, ki smo že bili, ki uporabljajo ta semester.
In ena od pobud bi radi prevzeli kot poskus letos
je videti, koliko vsebine se lahko prenesejo v drugo govorijo in
pisni jezik.
Torej, če imate morda interes za sodelovanje pri tem projektu, pri čemer
bomo poskrbeli English prepisov in podnapisov za tečaj je
predavanja in kratke hlače, seminarji in drugi profili in podobno -
če govorim tekoče ali berljivost nek drug jezik, bomo
radi, da vas vključijo v ta projekt, s katerim boste lahko na enem ali več od
video posnetkov, 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 tisti dan.
In nato pod njo, boste lahko prevedli v drug jezik.
Točno, kaj je preslikava med, v tem primeru, angleški
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
videli in brali potencialno tisoče ljudi, tam, prosim vas
lahko sodeloval.
>> Zdaj eno besedo o mucka od ponedeljka, da ne smo poslali preveč
strašljivo sporočilo.
Se zavedaš, da so uradne ure in kot kažejo oddelki nasvet, se
Zasnova Seveda je zelo veliko, da so študenti sodelujejo in
v pogovoru z dela zaradi težav in problemov sklopov skupaj.
In res je linija pravkar prihaja do, spet je delo, ki ga na koncu
morajo predložiti mora biti svoje.
In tako je, čisto iskreno - v uradnih ur, to je povsem normalno -
to je popolnoma mogoče pričakovati, čeprav - za klepet z nekaterimi
prijatelji poleg vas.
Če on ali ona se bori z nekaterimi temo in si tako, oh, tudi kaj
ti dam vpogled v nekatere vrstice kode, ki sem jo napisal.
To je v redu.
To se zgodi.
In to je zelo ugodno, mislim, da s procesom učenja.
Če je črta, spet dobi, prestopil je, ko je glava nekako nagnjen preko
tukaj veliko preveč sekund ali minut za to res, da samo še
je odblokiranje priložnost za tvojega prijatelja.
In seveda, če se stvari izmenjujejo prek e-pošte in Dropbox in
podobno, tam je meja.
Torej, z vsemi sredstvi, se počutite udobno in vas spodbuja, da klepet s prijatelji
in sošolci o psets in še več.
In samo zavedaš, da tisto, kar v končni fazi predložiti mora biti res
proizvod vaše ustvarjanje in ne kdo drug.
>> Torej, v tem smislu v cuddly bitij, poskusite
poznam tega tipa tukaj.
Torej, to je grozljivo cheesy film z leti.
Je kdo tukaj videl Spaceballs?
V redu.
Tako lepo število tukaj.
To je torej naša čudovito akademski način uvajanja danes končno
pojem kriptografije.
In tako eden od domensko specifičnih problemov pset 2, ki bo začela
od konca jutri zvečer, je, da se potopite v svet kriptografije, ki
je umetnost šifriranje ali premešavo informacije.
In to na koncu se nanaša na svetu varnosti.
>> Sedaj varnosti za večino nas na voljo v obliki dokaj preprostega mehanizmov.
Vsi nas imajo imena in gesla.
In vsi so zelo slabe imena in gesla, verjetno.
Če vaše geslo je isti na več spletnih mestih, ki verjetno ne
najboljša ideja, saj bomo razpravljali proti koncu semester.
Če je geslo napisano na lepljivo opombo - ni šala - na vašem
monitor, da tudi ni nujno najboljša oblika, vendar precej pogosti
pojav.
In če ga ne uporabljate kriptografije za šifriranje gesel, so
še posebej ranljivi.
Torej, če mislite, da ste pametni pa super, saj ima skrito besedo
dokumentirati nekje na trdem disku, ki je vse svoje gesla, vendar
je v mapi, da nihče ne bo videti v, da tudi ni zelo
varen mehanizem.
In kaj pset 2 bo uvedla je to umetnost kriptografije in
kodiranja informacij, tako da so stvari, kot so gesla
še toliko bolj varen.
Da bi motivirali to zelo realnem svetu težave z zelo ne-realnem svetu
Scenarij, naj vam predstavim enega od naših najljubših posnetkov tukaj od tega
Film, Spaceballs.
>> [VIDEO PREDVAJANJE]
-Čelada, ti fanatik, kaj se dogaja?
Kaj delaš z mojo hčerko?
-Dovolite mi, da predstavim briljantno mlado plastični kirurg, dr Philip
Schlotkin, največji nosu človek v celotni
Vesolje in Beverly Hills.
-Vaše veličanstvo.
-Nos?
Ne razumem.
Ona je že imela operacijo nosu.
Bilo je sladko 16 prisotna.
Ne, to ni tisto, kar misliš.
To je veliko, veliko slabše.
Če ne mi kombinacijo za ščit zraka, bo dr Schlotkin
dal svojo hčer nazaj svojo staro nos.
-Ne!
Kje si dobil to?
V redu.
Jaz bom povedal.
-Ne, očka, ne.
Ne smeš.
Prav imaš, draga moja.
Pogrešal bom svoj novi nos.
Ne bom jim povedal, da kombinacija ni važno kaj.
-Zelo dobro.
Dr Schlotkin, da svoje najhujše.
-Z veseljem.
-Ne!
Čakaj, čakaj.
Jaz bom povedal.
-Vedel sem, da bo delovalo.
V redu, daj mi.
-Kombinacija je ena.
In-One.
Dva.
Tri-
-Tri.
-Four.
Pet-
-Pet.
Torej kombinacija je ena, dva, tri, štiri, pet.
To je najbolj neumna kombinacija, ki sem jih slišal v svojem življenju.
To so stvari idiot bi na njegovi prtljagi.
Hvala, vaša visokost.
Kaj ste naredili?
I-izklopljen steno.
-Ne, nisi.
Spet si ugasnil cel film.
-Verjetno sem pritisnil napačen gumb.
No, daj nazaj.
Postavite film nazaj.
-Da, gospod.
Da, gospod.
-Gremo, Erna.
Daj no, Gretchen.
Seveda veš, da bom še vedno vam račun za to.
No, pa to deluje?
Kje so vrata?
-To je delal, gospod.
Imamo kombinacijo.
-Krasno.
Zdaj bomo lahko vsak dih svežega zraka iz planeta Druidia.
Kakšna je kombinacija?
-Ena, dva, tri, štiri, pet.
-Ena, dva, tri, štiri, pet?
-Da.
-To je neverjetno.
Imam isto kombinacijo na mojo prtljago.
Pripravite Spaceball 1 za takojšen odhod.
-Da, gospod.
In spremenite kombinacijo na mojo prtljago.
-Au!
[END VIDEO PREDVAJANJE]
>> David J. Malan: Neverjetno film zdaj bi morali vsi videti.
Torej, tukaj je, da ozadje 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.
Ampak 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 sploh ne izgleda, da bi lahko
je angleški stavki.
Na primer, to je tisto, kar boste morda našli na standardnem Linux ali Mac ali
Unix računalnik v datoteko, ki je bil nekoč imenovan geslo datoteko.
Danes, je bil prestavljen na drugih mestih.
Ampak, če pogledaš na pravem mestu, v sistemu, boste videli, ne samo vaše
ime ali drugih oseb v sistemu, vendar boste videli
šifrirano različico svoje geslo.
Dejansko je beseda grobnica je nakazovalo, da je naslednja stvar šifrirana.
In to serijo navidez naključnih črk in znakov in številk,
tako naprej mogoče dešifrirati samo s splošno vedo nekaj skrivnosti -
Skrivnost besedo, skrivna številka.
In tako res, umetnost kriptografije navsezadnje izvira zaupanje nekaterih
sortiranje in vedo nekaj, kar nekdo drug ne.
Mi bomo raziskovali to v malo bolj podrobno danes in v pset se nadaljuje.
>> In sedaj beseda o ustreznosti / neustreznosti.
Torej, še posebej pa so, kot nekateri izmed vas vrgli v pset 1, naprav in
zelo nov svet za sebe, spoznal, da so frustracije in
zmedenost in samo tehnične težave so za pričakovati.
Še posebej s prvo pset, kjer je samo toliko novega, ravno
seznanjeni z ls in cd in vse te skrivnostne ukaze v novem okolju.
In to je ločen od dejanskega materiala in se programiranja.
Torej zavedati tudi, da gotovo obstajajo uradne ure, ki obstajajo v
podporna struktura.
Skupine začeli to prihaja nedelja.
Najpomembneje pa je, če se počutiš tako, da to ni
svet za vas, razumite, da res ne vzemite čas.
In če ne bi bilo za to priložnost pred leti me sprejemanja razred
/ neustreznosti, po pravici povedano, nikoli ne bi niti stopil v razredu.
In lahko spremenite do, recimo, 5. ponedeljek v teku.
Torej, če ste na robu zdaj spoznali, da namesto glavo v nekaterih drugih
Vode v celoti, pa gotovo menijo, da samo spremenili / neustreznosti.
Tudi tu ni ravno ta kultura tukaj na Harvardu sprejemati stvari
/ neustreznosti, ker vsi res želi doseči ali presegla.
Ampak odkrito povedano, to je čudovit način, da poskuša nekaj, da morda ne bo
poznati za vas.
In boste na koncu delaš v večini primerov zelo drobnih, 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 pset 0, če ste dodali
v 10 ur, 15 ur, 25 ur v nekaterih pset - in ti si samo tolkel
glavo ob zid,
in to je že zelo pozno ponoči,
ampak ste posneli pset kot 90% poti,
veš, da ne morem razbrati eno stvar -
/ neustreznosti res potrebno rob off razreda, kot je ta, v katerem lahko razvrstite
z veseljem rekel ok, vem, da to ni popoln.
Ampak sem delal mojo rit off na to.
Sem zelo 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 vedeti
da obstaja CS50 SSID, Wi-Fi povezave plava okoli, da
morda imeli več sreče za.
To je nekoliko ironično, da je geslo za to - če bi želeli poskusiti
povezovanju s tem za boljše hitrosti in nam povejte, če to ni bolje -
ena, dva, tri, štiri, pet, vse tja do 8, ker je 8
bolj varna kot pet let.
Torej, če potrebujete Wi-Fi gesla, brezžično povezavo z CS50 tukaj.
Ena, dva, tri, štiri, pet, šest, sedem, osem.
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
vse Apple stvari.
Kaj sem izkopal iz nekaj let nazaj, je bila to sliko tukaj, ilock.c, samo da bi
vrsta čim bolj konkretna in bolj zapleten nekaj bolj temeljnega C
Programi, ki jih niste napisali.
Zato sem odprl to datoteko, ilock.c.
To je na voljo na predavanjih strani za danes.
Na levi strani, boste videli dolg seznam funkcij.
Torej človek, ki je napisal to napisala veliko funkcij,
več kot le glavni.
Bil je cel kup knjižnic tukaj.
In če smo začeli pomikati skozi, kaj to sploh je, je zelo
1. Menim, da tresk za izvirno iPhone.
Ko boste želeli Bjekstvo iz zapora iPhone izvirno, kar pomeni, untether
da od AT & T in dejansko namestiti posebno programsko opremo na njem in stvari
da Apple ni želel, da ljudje naredijo -
no, kdo je vzel čas, da ugotovimo, kako točno bi lahko izkoristili
programske napake, napake, žuželke, v programsko opremo Apple.
In tako se je rodil ilock.c.
Da če ga pripravijo na računalnik in ga namestiti na iPhone, ki je
je bil priključen na računalnik preko, recimo, USB kabel, bi to vam
upravne ali koren privilegiji na vaš iPhone in vam naredil precej
karkoli želite.
>> In tako je bilo to zanimivo igro mačke in miši med Apple in
preostali del sveta, zlasti če se, tako kot mnoga podjetja, poskusite, da se zaskoči
njihove stvari navzdol, tako da lahko le to z njim, kaj nameravajo.
Ampak hvala za ljudi, kot je ta, in njihovo razumevanje nizki ravni
Podrobnosti in, v tem primeru, C programiranje in veliko poznanih konstruktov
da smo začeli igrati z, ste 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 preprosto.
In izgleda, da je to funkcija, ki je napisal ta oseba.
Vzemite neko celo število kot argument, ne vrne ničesar, ampak
Zdi se, da z zanko za zanko tukaj in če je pogoj, če je pogoj,
odmor, in nekako se nanaša na različico številk.
Če smo se pomaknite navzdol -
čeprav je veliko teh ključnih besed, se bodo nova, in tam
cel kup funkcij tukaj nikoli nismo videli in ne bodo nikoli videli več
potek semestra -
Na koncu dneva pa sledi enaka pravila in logiko, da smo bili
igranje z doslej.
Torej, to je sedaj prestar za crack vaš iPhone 3s ali 4s ali kmalu 5s v teh dneh,
vendar vem, da je vse zelo izhaja iz tega sveta, da smo
vrgli.
>> Dajmo torej pogled na malo bolj preprost primer.
Ta je, samo da bi dobili ogreva z nekaj sintakse ter tudi nekatere druge podatke,
Tip, ki smo govorili, niso pa res videl v C. Torej je to
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 uporabnika interaktivno
programov, kjer boste morali povedati, da uporabnik nekaj storiti.
In če ne sodelujejo, si kričati na njih ali zavrne njihov prispevek.
Zadeva točke, bom naredil linije 19 do 24, v kolikor ima uporabnik
ni mi dal pozitivno število.
Zdaj je to podrobnost tukaj na liniji 18, zakaj sem nad izjavo n ves ta
zanka konstrukt v nasprotju tik linije 22, kjer sem
dejansko skrbi, da bi dobili n?
Ja?
[Neslišno]
>> David J. Malan: Ja, tako je to vprašanje obsega.
In v obdobju enostavnih, kaj nanaša na področje?
Ja?
[Neslišno]
David J. Malan: Lahko govoriš malo glasneje?
ZVOČNIK 1: Če imate dostop do določene spremenljivke.
David J. Malan: Perfect.
Če imate dostop do določene spremenljivke.
In na splošno pravilo palca je bila doslej, da je obseg nekaterih
spremenljivka je opredeljena z najnovejšimi zavite oklepaje, ki ste jih videli.
In tako v tem primeru, če sem naredil napako razglasitvi n na spletu 22,
Ta linija bi delovalo.
Rad bi dobil int, in jaz bi ga v tem spremenljivke n v skladu 22.
Vendar bi kateri vrstica kode zdaj nimam pojma, kaj sem govoril?
Torej, 25, in se izkaže, 24, kot tudi, ker v tem primeru ne spada
V zavitih oklepajih.
Torej samo malo nadloga, ampak zelo enostavno rešiti tako, da preprosto razglasitvi
spremenljivka zunaj same funkcije.
>> Zdaj bomo videli kasneje danes, lahko greš korak naprej.
In bi lahko celo malo leni -
in to ni priporočljiv, na splošno -
vendar pa bi lahko celo dobili leni in dal spremenljivko svetu, tako rekoč ni
znotraj funkcije, ne znotraj zanke, vendar v samo datoteko, zunaj
vseh funkcij ste napisali, kot sem tukaj na spletu 15.
Ampak to je na splošno namrščil.
Toda zavedati, da je to rešitev, včasih na druge težave, kot bomo
sčasoma videli.
Torej za zdaj, ga bomo kar tako pustili.
Toda poglejmo, če lahko zapišemo samo to, da začnete izražanje sebe
malo drugače.
>> Torej ta program, tako da je jasno, je positive1.
Naj gredo naprej in tukaj v moji terminalsko okno, da positive1, Enter.
Pripravlja, 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, se zdi, da deluje.
Morda ne najbolj strog preskus.
Ampak vsaj to je lepo sanity preverjanje, da smo na pravi poti.
Torej, zdaj pa grem naprej in odprite različico 2 tega.
In kaj je drugače že?
Izvaja isto stvar.
Toda kaj skakali kot očitno tokrat drugače?
Ja, tako je to int v zeleni barvi.
Gedit je poudarjeno v zeleni to ključno besedo, znano kot int,
ki je podatkovni tip.
Saj to, da ni vgrajena v vseh različicah C. morate vključiti
posebno knjižnico.
V našem primeru sem vključil CS50 knjižnico, tako da smo
dostop do int.
Toda v vrstico 18, se zdi, da ima logično vrednost, tukaj imenujejo hvaležen.
Tako bi jaz imenoval ničesar.
Ampak sem ga imenovali hvaležen, samo da nekako izraziti neko semantično pomen.
Torej, najprej na liniji 18, jaz sem hvaležen, ker očitno ni
Logična vrednost hvaležen je initialized kot neresnično, v skladu 18.
In potem se zdi, kar sem tukaj naredil v vrsticah 21 do 23, je pravkar sem
nekako moj predelajo logiko.
Torej ni funkcionalno drugačen.
Toda v vrstico 22 zdaj sem preveriti, če int si je zagotovila večja 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 za različico 1, ker je vsaj
Malo bolj intuitivno, morda.
To je malo bolj utemeljena v angleščini.
Torej, naredite naslednje ko niste hvaležen, ali pa hvaležen, je napačen.
In tokrat tudi jaz očitno ne skrbi, da se spomnimo, kaj si tipkal
V obvestilu, ker ni spremenljivka n.
Torej, pravzaprav sem -
Malo laž tam.
Funkcionalno je program nekoliko drugačna, ko bomo prišli do dna
Zato, ker jaz ne spomnimo, kaj je n.
Ampak sem hotel dokazati, da sem tudi, da čeprav smo videli GetInt in
GetString ki se uporabljajo na desni strani enačaja doslej, tako da
smemo pozabiti na vrednost, tehnično, to ni nujno potrebno.
Če iz kakršnega koli razloga preprosto ne zanima, da shranite vrednosti, si samo želim,
Za preverjanje vrednosti, opazili, da smo lahko enostavno napisati, da je to GetInt odprt
paren, 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 število 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, smo enostavno reči, hvala za pozitivno celo število, ne glede na to
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 variance
V positive3.
Torej, opazil edina razlika je, kaj vrstico kode?
Ja, torej 25.
In nikoli nismo zares videl ta trik še.
Vendar pa smo videli klicaj v ponedeljek, ki označuje, kaj?
Torej 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 intuitivna od načina
pisno kodo, ker sem še vedno inicializirati hvaležen napačen.
Še vedno naredite naslednje.
Sem iz hvaležen res, ko pride čas.
Zdaj pa lahko res samo prevesti to kodo ustno leve proti desni,
pa ne hvaležen.
Ker je pok, ali klicaj, pomeni pojem ne, zato pa
Ne hvaležen.
>> Torej, še enkrat, da nismo uvedli nobenih novih konceptov na sebi.
Govorila sva o Booleans nazaj, ko smo igrali z Scratch.
Toda zavedati, zdaj smo lahko le začeli pisati svojo kodo
na veliko različnih načinov.
Torej, še posebej v pset1, če ste nekako bori, da ugotovimo, da je pot do
napisal nek program, odds so imaš srečo, ker se dogaja, da je vsaka
Število rešitev, ki jih lahko srečate.
Na primer, to je le tri 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, ki sem jih izvedla kocke funkcijo.
To ni zapletena.
To je samo-krat-krat, v tem primeru.
Toda, kaj je pomembno pa je, da sem ob vložek v obliki in
Jaz sem vrača moč v obliki Občasno-krat.
>> Zdaj sem imel možnost, tako kot sem se z printf samo, da pokličete
Ta funkcija s pozivom kocke funkcijo.
In kocka funkcija traja nekaj vhoda.
In kocka funkcija vrne neko moč.
In tako se, nasprotno, le printf naredila.
To ni vrnil vse, kar smo skrbeli - čeprav, kot je
poleg tega pa vrne vrednost.
Pravkar ste na splošno 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, to je na splošno -
Za tiste, seznanjeni s tem, da je dokaj enostavna ideja.
Toda za tiste, ki še ne poznate te ideje poteka v vložkov in pridobivanje
nazaj izhodi, poskusimo le nekaj super enostavno.
Ali kdo udobno prihaja na oder za kratek čas?
Moraš biti zadovoljni s kamero na vas, kot dobro.
Ja.
V redu, kako ti je ime?
KEN: Ken.
David J. Malan: Ken.
V redu, Ken.
Pridi gor.
Torej, Ken se bo funkcija vrste tukaj.
In gremo 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 tablo.
In kaj sem jaz, je glavna funkcija, na primer.
In nimam iPad v moji roki.
Ne spomnim se, kako - no, pravzaprav ne moremo reči, da je.
Jaz nimam dobrega pisanja.
In tako zato, hočem natisniti nekaj na zaslonu za mene.
>> Torej, jaz sem pa glavni program.
In jaz bom, da ste rekli to, da ga v mojem pisanju piščanca in nič
nato mimo vas vnosa.
Tako kot neumno, čeprav je ta vaja je pojem funkcij in kliče
funkcija in vrne funkcijo res izvira do tega.
Jaz sem glavni.
Pravkar sem napisal printf ("kaj"), na zaslonu.
Tečem ta program.
In takoj, ko dobi printf pozval, traja en argument - ali en parameter,
včasih -
med dvojnimi narekovaji.
Tukaj je ta argument.
Jaz gre v Ken.
Zdaj je črna skrinjica napisal nekaj več leti, ki očitno
Samo ve, kako natisniti stvari na zaslonu.
>> Torej, izvršitev.
To ni slabo.
Torej, zelo dobro.
Torej, zdaj je naredil Ken izvršitve.
Ali je potrebno, da bi mi karkoli?
Torej ne, da smo videli doslej.
Spet printf, dejansko vrne številko.
Ampak bomo prezreti, da za zdaj, ker nikoli nismo uporabljali.
Tako da je pri Kenu.
In zdaj glavni vrne za izvedbo -
Glavni prevzame nadzor programa še enkrat, ker to vrstico kode,
printf, se opravi izvršitve.
In gremo o našem načinu izvršitve ne glede na druge linije so tam.
>> V redu.
Torej, zdaj poskusimo nekoliko drugačen primer.
In tokrat sem, naj po prvi zaslon počistite tukaj.
In tokrat bomo narediti cubing funkcijo.
Ampak tokrat pričakujem, da bo izhodno vrednost.
Torej, gremo naprej in to je to.
Torej, zdaj imam vrstico kode, ki pravi x = kocka (x).
Torej, dejansko let's -
vrstico kode, odpoklic, tako izgleda.
x = kocka (x).
Torej, kako se bo to delovalo?
Torej, gremo naprej in dal bel zaslon znova.
In jaz bom zdaj zapišite vrednosti x, ki je v tem trenutku v
Čas se zgodi, da se, recimo, 2, naj bo enostavno.
Zato sem zapisal na list papirja, vrednost 2,
, ki je moja vrednost x.
Sem ga predati Ken.
KEN: In jaz sem samo napisal odgovor?
David J. Malan: Ja, kaj je samo napisal odgovor.
Ok.
In sedaj ima vrniti mi nekaj.
Torej -
popolna.
Lepo segue.
>> Torej, zdaj mi roke nazaj na vrednost 8, v tem primeru.
In kaj naj naredim z njim?
No, pravzaprav, pa poglejmo.
Get to pravico.
Kaj bom z njim?
Zdaj bom izkoristil to vrednost in dejansko ga shranite v tistih
Isti bitov v pomnilniku.
Ampak obvestilo, sem nekako borila tukaj.
Jaz sem malo zmeden, saj kje sem dejansko napisal vrednost x?
Kajti to, kar sem pravkar naredil, je fizično ročno Ken kos papirja
da je vrednost 2, kar je x.
In res, to je točno to, kar se dogaja.
Tako se izkaže, da če pokličete funkcijo, in hodite v argumentu
kot "Hello World", ali hodite na argument kot 2, na splošno, si
poteka v kopiji te trditve.
In tako kot sem napisal številko 2 tukaj, in ga izročil Kena, da morajo
pomeni, da sem še vedno kopijo vrednosti 2 nekje.
Ker je res, zdaj, ko sem prišel nazaj na vrednost 8, moram iti nazaj
RAM in dejansko napišite 8, kjer sem nekoč imel številko 2.
>> Tako vizualno spomnite tega pojma poteka v dobesedno
izvod vrednosti.
Ken ima svojo stvar, mi roke spet nekaj - v tem primeru,
vrednost kot 8.
In potem sem moral nekaj storiti s to vrednostjo, če bi
želite obdržati okoli.
Torej bo vse to je vse preveč seznanjeni kmalu.
Najlepša hvala za ta demo tukaj, Ken.
V redu.
Zelo dobro opravljeno.
Torej, da vidimo, kako se navsezadnje nanaša na nekatere funkcije
kliče, da smo bili tu.
Torej, naj gredo naprej in nas pripelje nazaj cubing primer tukaj.
In opazil, da če hočemo, da dejansko začnete jemati to naprej, bomo
da morajo biti pozorni na dejstvo, da se je število x je, da je prenesel v
Tukaj je drugačen od tistega, kar je dejansko prenesena v funkciji.
Torej, še enkrat, to mimo kopija bo postala precej
nem v trenutku.
>> Torej, da pogled na nekaj, kar ne deluje čisto prav je prazna.
Grem, da gredo naprej in odprite tretji primer hroščat, ki
je pomanjkljiv z naravo.
In temu se reče buggy3, in izvaja swapping funkcijo.
Torej, tukaj imamo glavno funkcijo, ki je x in y samovoljno inicializiranega za
1 in 2, v tem zaporedju.
Mi lahko uporabite GetInt, vendar smo morali preprosto vajo.
Zato 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 pokličete funkcijo v skladu z imenom 24 swap
ki traja dve trditvi.
To je popolnoma legalno za funkcije, da bi dva argumenta.
Videli smo printf to že.
Torej, zamenjava očitno meni x in y.
In kot že ime pove, bi upam, da se bo
swap teh dveh vrednosti.
Torej trdim na liniji 25, zamenjali.
In jaz ponatis x in y, ob predpostavki, da
oni so res zamenjali.
Ampak, če sem dejansko zagon tega programa -
Naj odpre terminalsko okno.
Naj 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, oni so še vedno v bistvu isto.
>> Torej, temelji na dokazu pravkar z Ken, kaj se pravzaprav dogaja?
No, da 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 zgodba
tukaj s Ken?
Zakaj je zamenjava pokvarjen?
[Neslišno]
Točno tako.
Torej smo za shranjevanje kopijo, ni je spremenljivka sama.
Z drugimi besedami, zamenjava očitno traja dve trditvi, int.
Pa tud če je samovoljno imenuje in b.
In tu gor, 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, kot je skoraj kot da bi kopirali in prilepili v swap vrednosti, ki jih
želite, da se dejansko manipulirati.
Torej, če je to tako, ko sem program, začne izvajati
linija 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?
Zato bi moralo biti samo 1.
Imam prav?
Ker je x sprejet kot prvi argument.
In ta funkcija le arbitrarno kliče svojo prvo trditev,.
Podobno je y, drugi argument.
In to je le arbitrarno kliče drugega argumenta b.
>> Zdaj je to dihotomijo pravzaprav precej enostavno razložiti.
Premisli.
Nihče od nas ni srečal osebo, ki je napisal printf.
Torej vsekakor, on ali ona nima pojma, kaj so naši spremenljivke 30 let kasneje se dogaja
da se imenuje.
Torej je treba razlikovati med pravite spremenljivke v
Funkcije, ki jih pišeš in kaj praviš spremenljivke v funkcijah, ki jih boste
in ne uporabljate.
Torej, z drugimi besedami, ki sem jih napisal svoje spremenljivk, x in y.
Ampak, če bi nekdo napisal swap funkcijo, on ali ona zagotovo
Ne bi vedel, kaj moji spremenljivke se dogaja, da se imenuje.
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 ta oseba, ki je napisal
swap bila uporabljena ista imena.
>> V redu.
Torej, v tem trenutku v zgodbi, linija 37, je 1.
b je 2.
In zdaj sem nadaljevati, da jih swap.
No, najprej, naj dejansko to veliko bolj preprosto.
Ne vem, kaj te tri vrstice kode so počeli.
Naj samo to.
b dobi.
dobi b.
Done.
Zakaj je to napačno, logično?
To je nekako intuitivno stvar, kajne?
Tako postane b.
In b postane.
Ampak problem je, da takoj, ko postavka 37 izvaja, kaj je
vrednost in b?
Enako, 1.
Ker ste clobbered, če se tako izrazim, ste spremenili b, da enaka.
Torej, ko se izvaja linija 37, ki je super.
Zdaj imate dve kopiji številko 1 znotraj te funkcije.
Torej, ko ste rekli, v skladu 38, dobi b, dobro, da si nekako zajebali.
Ker ste ravno 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.
To je int, ker je za tekmo, kaj želim narediti kopijo.
I shranite kopijo notranjosti tmp. Torej, 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.
Torej, ko linija 38 izvaja, prevzame vrednosti b.
In b je 2.
Tako je sedaj 2.
Torej, na tej točki v zgodbo, je 2, b 2,
tmp in je 1.
Torej, zdaj je logično, lahko cenimo samo Pljuskanje NTU je v b.
In končamo.
>> Tako smo rešili ta problem.
Na žalost, ko sem zagon tega programa v tej obliki, se dejansko ne zamenjate
vse vrednosti.
Vendar mora biti jasno, zakaj?
Popravil sem logično težave s samo trenutek nazaj.
Ampak še enkrat, če sem teči ta program, x in y ostane nespremenjena do konca leta
programa za izvedbo.
[Neslišno]
David J. Malan: Torej nismo vrnili ničesar.
Torej, to 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,
V tem primeru, sem nekako obtičal tukaj
ker sem lahko vrne novo vrednost x, ali sem lahko vrne
Nova vrednost y.
Ampak hočem tako nazaj.
Torej se ne vrača enostavna rešitev tukaj.
Ampak problem je bistveno zakaj?
Kaj smo dejansko zamenjali?
in b.
Ampak a in b so kopije x in y, kar pomeni, da pravkar storil vse to
delo - smo pravkar preživel kot tri minute govori o zamenjavi
funkcija in vse tri od teh spremenljivk.
In to je super, popolnoma prav v izolaciji.
Toda obseg in B je le, da je v teh vrsticah tukaj.
Torej, tako kot za zanke, če ugotovi, celo število i notranjosti za
zanka - podobno, če ste razglasitvi in ​​b znotraj funkcije, ki
si napisal, da si velja samo znotraj te funkcije.
Kar pomeni, da takoj, ko se zamenjava opravi izvršilni in gremo od vrstice 24 do
linija 25 x in y niso 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, da se vrnete vrednosti, saj smo lahko
Samo vrnejo eno vrednost.
In jaz res ne želim, da bi zamenjali x in y sta ob istem času.
Torej se bomo vrnili k temu.
Toda za zdaj ugotovili, da je vprašanje bistveno izhaja iz dejstva,
da sta a in b izvodov.
In če so v njihovem okviru.
No, poskusimo rešiti to na nek način.
Naj se dejansko pomaknete nazaj in odprla, recimo, četrta različica
tega, buggy4.
In kaj je to?
To je podobno, vendar enostavnejši problem pogledati, preden sprejme zabodel
ga reševanja.
Ta program se imenuje prirastek.
In očitno inicializira celo število x, 1 v skladu 18.
Nato sem trdijo x 1.
Nato sem trditvi povečevanje, pika, pika, pika.
Nato sem poklical prirastek.
Potem pa v vrsticah 22 in 23 Trdim, da so se poveča.
Trdim x Zdaj je, kar je, 2 verjetno.
>> Vendar pa je ta program nečistnik.
V čem je težava?
Ja?
[Neslišno]
David J. Malan: Točno tako.
Tako je bila razglašena x očitno na liniji 18.
To je znotraj zavitih oklepajih je glavni.
Torej preprost odgovor tukaj je, da je dobro, obstaja x tukaj.
To ni v skladu 32.
Torej, ta program dejansko sploh ne bo prevesti.
Prevajalnik, ko sem poskusil priprave tega kodeksa, bo vpij name
o nekaterih neprijavljeno identifikator ali nekaj v tem smislu.
V bistvu, dajmo poskusiti.
To je lahko buggy4.
Tukaj je.
Uporaba neprijavljenega x identifikator v skladu 32.
In dejansko, bodimo bolj jasno danes, tako da je to koristno
Uradne ure 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, ena, dva, tri, štiri, pet.
To je v resnici, kje je problem.
In tudi, da v mislih pri 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, še enkrat,
zavedati, da lahko Najnižja eno samo simptomatsko z dne
za vrhunske nove.
Torej vedno lovil svoje napake od vrha navzdol.
Ker je lahko samo daisy verige učinek, ki vas predlaga
Tako imajo več težav, kot jih dejansko storiti.
>> Torej, kako bi lahko to popravimo, če je moj cilj je, da prirastek x?
Kaj je to?
Ok.
Tako lahko naredimo x globalna.
Oglejmo bližnjico, ki sem opozoril, pa že prej.
Ampak vraga, smo morali hitro popraviti.
Torej, recimo, int x tukaj.
To naredi x globalna.
Torej, zdaj je glavni dostop do njega.
In prirastek ima dostop do njega.
In tako mi gredo naprej in zbira sedaj.
Naredite buggy4, Enter.
Zdi se, da zdaj pripraviti.
Naj teče buggy4, in zdi se, da dejansko delajo.
No, to je ena od teh stvari -
stori, kot ti rečem, ne kot jaz, kot sem pravkar končal.
Ker v splošnem naši programi bodo dobili veliko bolj zanimiv in
veliko več kot to.
In če je vaša rešitev za težave v življenju je samo ah, dal vse
spremenljivke na vrhu datoteke, zelo hitro naredite programi dobili
grozljivo težko upravljati.
To postane težje izmisliti nove imeni spremenljivk.
To postane težje razumeti, kaj počne, kaj spremenljivka.
>> 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.
Torej, lahko bi očitno -
Na koncu dneva, to je nekako neumno zgodbo, saj smo samo to.
Ampak če nisem vedel o tem izvajalcu ali je ne smem
spremenite v glavnem sama, kako drugače bi lahko izvajala Ken tukaj, to
Čas ni kocko, ampak prirastek?
Kako spremenimo te stvari tukaj?
Ja.
[Neslišno]
David J. Malan: Dobro, dobro.
Torej, zakaj ne bi šel mimo mene in x?
In potem ne vrne, zakaj ne sem naredil obračun x + 1?
Zdaj pa še nekaj stvari je tukaj spremenilo.
Sem na pravi poti.
Kaj še moram poteg?
Nekdo drug.
Ja?
[Neslišno]
David J. Malan: moram spremeniti vrnitev vrsto prirastek
ker ne nična.
Praznina pomeni nič se je vrnil.
Toda jasno je, zdaj pa je.
Torej, to pa je treba spremeniti v int, da je v skladu s kakršnimi koli
Jaz sem pravzaprav vrača.
>> Zdaj nekaj drugega je še vedno buggy tukaj.
Ja?
[Neslišno]
David J. Malan: Torej moram prirastek x?
[Neslišno]
David J. Malan: Ah, tako da moram opraviti x.
Torej moram narediti tukaj.
Torej prototipa, moram spremeniti to tukaj.
Torej, to je, da postane int.
To mora postati -
hmm.
Pravzaprav sem napako tukaj.
Spravimo tole prvi.
Kaj bi to dejansko bilo?
Torej, to je dobil, da je nekaj int.
Lahko bi bilo x.
Ampak odkrito povedano, če ste začeli klicati vse vaše x spremenljivke, da bo dobil
manj jasno, kateri je kateri.
Vzemiva poljubno izberete drug način poimenovanja za mojo
helper funkcije, funkcije pišem.
Bomo rekli.
Ali bi jo lahko imenovali - recimo ji even_number še bolj izrazita.
Torej moram vrniti ne glede na število plus 1.
In zdaj moram spremeniti še eno stvar sem gor in 1
Druga stvar, ki sem gor.
Kaj moram spremeniti na spletu 21 prvi?
Imam jih dodeli x.
Torej, ne morem poklicati prirastka x.
Moram se spomniti odgovor s spreminjanjem vrednosti x na
na levi strani.
In čeprav je x sedaj na levi in ​​desni, to je povsem v redu, saj
desna stran dobi 1. izvede nato se plopped v levo
ročno stvar x v tej zadevi.
In potem končno, to je enostavno popraviti zdaj.
To naj bi samo tekmo, kaj je spodaj.
Int številko.
>> V redu.
Torej cel kup sprememb za res neumno funkcijo.
Toda predstavnik stvari, da bomo vedno bolj želijo storiti.
Torej, da buggy4.
Sem nekje zajebali.
Oh, moj bog.
Pet napak pri, recimo, 6-line program.
Torej, kaj je narobe na liniji 18, značaj 5?
V redu.
Torej moram prijaviti to int.
V redu.
Torej, da vidimo, cel kup drugih napak.
Oh, moj bog.
19, 18, 21.
Ampak še enkrat, kaj je samo počistite zaslon -
Nadzor L tu - in ponovno zagnati Jek.
Torej 5 problemov je pravzaprav le, da je eden.
Torej, zdaj pa teče buggy4, Enter.
Vav.
x je bil pravilno poveča.
>> V redu.
Vsa vprašanja o tem, kako prirastek številke?
Ja?
ZVOČNIK 2: Zakaj je tako, da lahko samo spremeni x na številko v spremenljivko
ime in ga bomo vedeli, kaj misliš?
David J. Malan: Dobro vprašanje.
Kako to, da sem lahko samo spremeniti x na številko in program bo vedel
takoj?
Torej, še enkrat, mislim, da je to abstrakcijo.
Torej, če sem glavni in Ken je postopen, odkrito povedano, me ne zanima
Ken, kaj zahteva njegov iPad.
Ni mi mar, kaj se kliče vse, kar ima opraviti z njegovim izvajanjem
te funkcije.
Torej, to je izvajanje Podatek, da sem glavni, ne
skrbeti za.
In tako preprosto spreminjanje dosledno znotraj funkcije, število tukaj
in številko tukaj, je vse to traja tako dolgo, kot sem prevedem.
To je neke vrste kot če pomislite - mnogi izmed nas, tiste, ki ste voznika
Dovoljenja, ki jih poganja, ali pa ste celo vozi v avtomobilu -
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.
Mi ne bo treba skrbeti, kaj vse palice in bati in kablov v notranjosti
avto dejansko delaš.
>> Torej nekaj podobnega, kar imenujete bat ni pomembno
Tukaj v tej zadevi.
Enako ideja.
Ja?
[Neslišno]
David J. Malan: Če bi bilo 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.
[Neslišno]
David J. Malan: zlasti, da tako kot tukaj?
Če je to int drugo številko?
Ja.
Torej, da je pomembno, 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
Argument tukaj.
Oprostite, ta ne bi smela biti oklepaj.
Drugi argument poravna z druge.
>> Tako da, ja, zadeve.
V redu.
Žal sem dolgo pot do tja.
Druga vprašanja?
V redu.
Torej, da vidimo, če ne moremo naslikati sliko, kaj se pravzaprav dogaja
Tukaj pod pokrovom, tako rekoč.
Torej, to je pravokotnik, ki lahko predstavljajo pomnilnik računalnika.
Torej, tudi če nimate pojma, kako spomin deluje in kako deluje RAM, vsaj
Predvidevamo, da imate grozde njem teh dneh.
Imaš MB njej.
Imaš gigabajtov njim.
In vemo, da od nič tedna bajt je samo, kaj?
8 bitov.
V redu, torej 8 ničle in narave.
Torej, če ima računalnik koncert RAM, 2 nastopov RAM-a v teh dneh, morate
ali 2 milijardi milijarda bajtov pomnilnika, ali približno 8 milijard 16000000000
bitov, notranjost računalnika.
Zdaj pa za razliko od malega Volneno primer Willy, ni magnetni delci
običajno več.
Vedno bolj v prenosnih računalnikih vsaj to Solid State diski SSD, da je,
Samo nimajo gibljivih delov.
To je vse elektronsko.
To je vse na elektriko.
Torej mislim, čeprav, to je samo pravokotnika, ki predstavlja eno ali dve
gigabajta pomnilnika, ki ga imajo.
>> Torej je kos pomnilnika.
Zdaj je svet računalništva je nekako ločen koščkih
spomin na različne stvari.
Tako 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, tako da
govoriti, je na splošno, kar se imenuje besedilo segment.
Tisti, ki so ničle in tiste, ki ste jih pripravljeni.
Torej, ko smo si ogledali pod pokrovom, kaj a.out je vse
na ničli, in tisti, ki -
Ko zaženete program, se te ničle in tisti, ki nalagajo iz trdega
pogon v nekaj, kar ti RAM.
In v RAM, oni dajo na vrhu.
Sedaj medtem, imate druge stvari.
Initialized podatkov, nezaceto podatkov.
Ti redi pomnilnika se nanašajo na globalne spremenljivke, ki
ne uporabljajo pogosto.
Ampak včasih, če boste to storili, končajo tam kot dobro.
Potem je tu še nekaj drugih stvari.
Okolje spremenljivk, ki jih ne bodo porabili veliko časa na.
Potem pa bosta dve pomembni stvari, da pridejo nazaj skozi to
semester, kup in kup.
>> Tako je večina spomin računalnika pridržane ko teče program za
nekaj, kar ti stack in nekaj, kar ti kup.
In ne bomo govorili o kupu danes, vendar bomo
govorimo o kupu.
In je sklad namenjen pričarajo vizualno kot jedilnici
zdroba pladnji v Mather doma, ali kjer koli se zgodi, da se, kadar je to
jedilnica osebja, ki jih čistijo vsak dan.
Jih zlagajo od tal gor.
In prav v spominu, da je ta ideja, ki postavlja nekaj na
nakladanje, dajanje nekaj na kup, s čimer nekaj na kupu.
In kaj mislimo s tem?
No, da povečate samo spodnji polovici slike, vašega računalnika
RAM-a, da predlaga naslednje.
Izkazalo se je, da ko zaženete program, kot a.out ali hello, ne glede na
Program je, da ste napisali,
spet so te ničle in tisti, naložen s trdega diska - kar je
dolgoročno hrambo, ostane tam tudi, ko si potegnite vtikač -
naložen v RAM.
RAM je hitrejši od trdih diskov.
To je manjši od trdih diskov.
Ampak to je, kadar programi v živo, ko ste jih izvaja.
>> Torej dvokliknete program na Mac ali PC - to je naložen z
trdega diska v RAM.
Takoj, ko je naložen v RAM, se ničle in tisti, ki gredo na pot vrhu,
tako imenovane besedilo segment.
Potem pa takoj, ko se program dejansko začne delovati, glavni
Funkcija se imenuje.
In glavno, kar smo videli, je pogosto lokalnih spremenljivk.
In to je ints in godala in znakov, in podobno.
Torej, če vaš program, ki ste napisali ali program, ki ga imajo
dvojno kliknili uporabljajo nekatere spremenljivke znotraj glavnem končajo na
spodnji strani kup pomnilnika, tako rekoč.
Zdaj, bolj konkretno, kaj to dejansko pomeni?
To samo pomeni, da če bomo šli na številko stvari -
če smo bili, da bo število bajtov RAM-a v računalniku, opazite, da
to je lahko bajt številka nič.
To je lahko bajt številka ena, dva, tri, štiri, pet, šest, vsi
Tako do všeč -
2000000000 bi vso pot tja gor na vrhu.
Torej, z drugimi besedami, ko govorimo o RAM in spomin glede bajte, da
samo pomeni, da je nekdo odločil, kaj štetje vseh
tiste kose pomnilnika.
>> Torej, ko boste potrebovali 32 bitov za notr, ali pa boste potrebovali 8 bitov za char, kjer je
da končajo v spomin?
No konceptualno so pravkar končala na dnu tega
stvar, ki se imenuje sklad.
Ampak kaj je zanimivo, zdaj, ko glavna zahteva funkcija.
Recimo funkcijo imenovano foo, le poljubno ime.
Kaj se zgodi, je glavni na dnu te kup pomnilnika.
Foo je zdaj dal na vrhu glavnega pomnilnika.
Torej, vse lokalne spremenljivke, ki foo je končal nekakšno konceptualno zgoraj
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 ker te funkcije 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
napišite funkcije, ki jih nikoli ne vrnejo.
>> Tako na primer, kaj je pokazati toliko s
namerno buggy program.
Naj gredo naprej in ne vključujejo # , int main (void).
In jaz bom storiti, ko (2> 1), ki verjetno ne bodo 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).
Naj bo to napako, sem + +.
In da ne printf tukaj.
Naj praksi, kar sem pridigal.
Pa način tukaj.
Praznina zbor, in bomo rekli, int i.
In potem bom rekel, printf -
Oh, naredimo to bolj zanimivo.
Naj se dejansko ne natisne ničesar.
Naj samo to.
Chorus (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
obresti.
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 bi smeli pozabiti na resnično
Temeljna napaka.
Glavna zahteva chorus peti nekaj refren.
Potem pa sem naredil nekaj neumnega, in sem imel refren Chorus klicev, ker sem domnevala,
nekdo drug 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.
Uporaba neznanega prijavitelju i.
Oh, to je bilo neumno.
Ne potrebujemo argument.
Naj samo to.
Želim si, da smo začeli na ta način.
Bilo bi veliko lažje napisati program.
Torej obstaja.
Zdaj greva v mojo terminalsko okno, ponovno zaženite Jek.
In tukaj smo.
To je bilo res hitro.
Kaj se je dejansko zgodilo, kajne?
No, zdaj bom dodati tiskanja linijo, tako da bomo videli.
Naj povem printf, recimo, da sem tukaj.
Ok, ne spremenljivke, ga bomo pustiti tako.
Naj ponovno zagnati narediti.
Naj ponovno zagnati zbor.
In daj no.
Kar naprej.
Kot prahi, zakaj je ni doživel še?
Segmentacija je zgodila napaka, super hitro, preden.
[Neslišno]
David J. Malan: Točno tako.
Zato je potreben čas za tiskanje.
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?
No, če pomislite, kako je spomin računalnika, določenimi v tem
zgodi, da je glavni.
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, refren,
zbor, zbor, zbor, zbor, zbor, zbor, ad nauseum.
In na koncu, kaj se bo zgodilo?
Če velika slika dobesedno 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
na ničli, in tisti, ki predstavljajo svoj program.
Skratka, to je samo super, super slabo.
Imam prav?
Vaš program je spiraled izpod nadzora.
Tako boste uporabljali več pomnilnika, kot si namenjen vsem, ker neumen
napaka v tem primeru.
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.
Toda dejstvo, da nikoli nisem ustaviti sebe kliče, je temeljni
Slabost tukaj tega programa.
Torej, kam gremo z vsem tem?
No, 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 ena.
Tako se zgodi naslednje.
Torej gremo v shrambo primer.
In ta človek tu.
Torej, tukaj je, kaj se dejansko dogaja.
Ko sem poklical prirastek, in sem mimo in x, slikovno, kaj je
dogaja je to -
če imam vrednost 1 shranjene tukaj in dejansko sem poklical prirastek, ki
se zdaj imenuje refren -
ja, to me je vrgel tukaj.
Torej, kaj je to imenujemo prirastek.
In ne vemo, kaj je to poleg funkcije bo treba.
Torej, kaj se pravzaprav dogaja tu nekje v glavnem imam kos
pomnilnika, ki je shranjevanje številko 1.
Ko sem poklical prirastek, sem z drugo kos pomnilnika, zdaj pa
imeti kopijo 1.
Ko sem prirastek te vrednosti, to postane 2 - hudo napisan na
Zaslon tukaj.
Ampak potem, kaj se bo zgodilo takoj, ko prirastka vrne?
Ta spomin dobi samo vrnejo na operacijski sistem, kar pomeni, da vse
ste storili nič koristno.
1, ki je bil prvotno iz main je še dejansko obstaja.
>> Torej, kam gremo s tem?
No, izkazalo se je, da je v spomin imate to back to back zaporedje
zlogov, ki jih lahko dajo stvari noter
In izkazalo se je, da smo že videli nekaj, kar vključuje dajanje
stvari, back to back to back to back.
Kaj je niz, ki temelji na teden 1 in 2 tedna zdaj?
Torej, to je samo zbirka znakov.
Tako se je izkazalo, tako kot si lahko postavite številke v spominu, podobno lahko
postaviti znake v spominu.
In ko smo začeli polaganje znake v spomin na hrbtni strani za nazaj, da
nazaj, se je izkazalo, da je uporaba najenostavnejših stvari, kot za zanke ali
while zanko, lahko izbirate -
od leve proti desni preko znakov v nizu -
in jih začele vmasirajte v različnih znakov v celoti.
Lahko postane B. B lahko postane C. Tako da na koncu, bomo lahko
Angleški stavek, ki dejansko smiselna in pretvorbo vseh tistih
črke eno za drugo s hojo skozi spomin našega računalnika prepustiti
Pravica do dejansko šifriranje.
>> Torej vzamemo 5-minutni odmor tukaj, in ko se vrnemo, bomo
začetek tega procesa kodiranja informacij.
>> V redu.
Torej, preden se potopite v določeni CRYPTO in te stvari se imenuje nizi, kaj mi
pavza za vsa vprašanja, ker se počutim, kot da sem res nekako megleno nekaterih
o teh temah.
Torej, kaj je zdaj popraviti, če lahko.
Tako smo pravkar govorili o izračunani vrednosti.
Pogovarjali smo se o argumentih.
In smo se pogovarjali o tem pojmu, ki jih bomo vrnili v prihodnjih tednih
prihaja, si spomin kot cel kup teh nalaganjem
pladnji, tako rekoč.
Od spodaj gor, tako da je vsaka posoda, ki dobi dal na sklad predstavlja
funkcija je, da se trenutno imenuje.
Kakšno vprašanje?
Torej, kako gre - naj poskusim sprašujem.
Držim uničil, ampak zdaj it's - you've vsi videli dečkovo obraz.
Torej bomo vrnili k temu.
>> Torej, kaj mi postavite vprašanje tukaj.
Naj poenostaviti to nazaj, kar je bil pred nekaj naše prejšnje Q & A.
In dejstvo, da je prirastek ima odprto oklepajev, int številka, zaprt
oklepaj.
Kaj int številka predstavlja?
[Neslišno]
David J. Malan: argument.
Ok, ampak kaj je razlog?
[Neslišno]
David J. Malan: Žal mi je, kaj je to?
SPEAKER 3: Nekaj, kar boste peljali noter
David J. Malan: Ok.
Torej nekaj, kar boste peljali noter
In na splošno, to je samo vhod.
Če pišete funkcijo in to funkcijo opravlja na cilj v življenju je, da to
nekaj malo drugačen vsakič, ko ga uporabljate, potem je edini način za
, da bi se res zgodilo, se zdi, da se ji z vložkom tako, da
lahko naredite nekaj drugačnega s tem vhodu vsakič.
>> Torej boste morali določiti dve stvari, ko se funkcija vhodov.
Morate navesti ime, ki ga želite dati to vhod za izključno
svoje udobje, tako da lahko sklicujete nanjo v funkcijo, 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 če hočeš spremenljivko, boste morali povedati računalnik, kaj
vrsta podatkov je,
v veliki meri tako, da se ve, koliko bitov
dodeliti za to spremenljivko.
Ker bi bilo šest -
Žal to ne bo šest.
Lahko je 16.
To je lahko 8.
To je lahko 32, celo 64.
Ampak računalnik mora vedeti.
Zdaj int na levi strani predstavlja, kaj je v nasprotju?
[Neslišno]
David J. Malan: Kaj je to?
[Neslišno]
David J. Malan: tip funkcije in, natančneje,
Vrsta njegovih rezultatov.
Prav.
Torej, ker je stvar v oklepaju predstavlja vložek, če obstaja,
stvar na levi predstavlja svojo proizvodnjo.
In v tem primeru očitno prirastek vrne int.
In tako je vrnitev int tip te funkcije.
>> Kaj to pomeni, da se vrnete?
Dobesedno, uporabite ključno besedo donos.
In če, kaj se vračajo na desni strani je ključna beseda
celo število, potem je to dejansko v skladu s tem, kar smo obljubili.
Ti ne bi mogel storiti kaj takega -
Pozdravljen svet -
ker je to niz.
Očitno to ni celo število.
Torej na kratko, breme je res na nas, programer, da je specifična, saj
s tem, kar smo vračajo in nato dejansko iti na njeno vrnitev.
In potem bi malenkost bolj jasen okvir -
pa je spet.
Kontekst -
Veliko presenečenje prihaja v trenutku.
Kontekst tukaj je, da računalnika spomin, še enkrat,
GB, 2 GB, karkoli.
Mogoče je več.
Mogoče je manj.
Ampak računalnik ga vidi kot ob različnih oddelkov.
Nekaj ​​gre dol.
Nekaj ​​drugega gre gor.
Različne stvari se dogaja v sredini.
In danes smo pravkar začeli povedal to zgodbo.
>> Ampak bomo vrnili k temu daljšem časovnem obdobju.
Za zdaj je le del spomina res skrbi, je del besedila
ker to preprosto predstavlja ničel in enic
Jek, da je izhodni.
Torej, ko zaženete ukaz na tipkovnici, kot a.out, ali pa dvakrat
kliknite na ikono Mac OS ali Windows, je vaš program naložiti s trdega
voziti v RAM.
In to je plopped na vrhu RAM računalnika, tako rekoč.
Sedaj medtem, kot je vaš program zažene in glavni gets imenovane v
Program, ki ga je napisal ali program Microsoft ali Apple napisal, vsak od njenih
lokalne spremenljivke končajo tam dol na dnu pomnilnika računalnika.
Ampak, če glavna zahteva drugo funkcijo, ki ima samo po sebi spremenljivk ali
Argumenti, ki jih na koncu nad njo.
In če je ta funkcija zahteva nekaj, končajo nad njo,
nad njo, nad njo.
In šele ko je funkcija opravi izvršitve ne Sveženj pladnjev, tako
govoriti, začne, da bi dobili nižje in nižje.
In to je tisto, nato pa na kratko pojasni, zakaj, ko ste klic kocka -
ali pokličete prirastek -
ti gre v kopiji vrednosti.
In kaj to pomeni slikovno je, da ste dobesedno pisanjem
številka 1 v drugem delu pomnilnika, ki spreminja 1-2, v primeru
prirastek -
ali do 8, v primeru kocke -
in nato vrgel proč, da je spomin takoj, ko je prirastek ali kocke
funkcija vrne.
>> Vprašanje.
[Neslišno]
David J. Malan: Kje - so globalne spremenljivke shranjene v kaj je
Trenutno se imenuje initialized podatkov ali nezaceto podatkov.
Razlika je v tem, če imate globalno spremenljivko in jo določite
Takoj vrednost z enačajem, se konča na vrhu je.
In če si rekel int x podpičje brez vrednosti, se konča nekoliko
nižje RAM preprosto 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.
Ampak za zdaj, imejmo kratek uvod v kriptografijo, posebna vrsta
kriptografije, ki ne rešuje vseh težav na svetu, vendar ne reši
nekatere od njih.
V tem primeru je tukaj imamo nekaj, kar ti skrivni ključ kriptografija.
In skrivni ključ kriptografija, kot že ime pove, ima svojo varnost
od skrivnosti.
Tako na primer, če ste že v osnovni šoli in ste mimo
mala skrivnost ljubezensko pismo na fant ali dekle, ki ga na tlačnem - če ste
želel opraviti, da se z občinstvom, ti verjetno ne bi pisal
kot opomba v angleščini ali karkoli vaš materni jezik, temveč si
Morda šifriranje.
Ali pa boste morda le 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čitelj
Ne vem, kaj pišete, boste morda prišli do precej preprost
Algoritem -
mladi, čeprav ste morda -
da samo Izokrenuti besede.
Torej, namesto pisanja, lahko napišete B. Namesto B, lahko napišete
C. Namesto C, lahko piš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 mora
veš kaj.
Kar je tisto, kar je očitno?
Všeč mi je, kaj je tvoj skrivnost.
Všeč mi je, kaj je to preslikava med AS in BS in DS in DS?
Je samo dodati eno, tako rekoč za vsako od črk, da gredo iz
B, B in C?
Je bolj zapleten kot to?
Torej vi in ​​vaš simpatijo morajo imeti te tajne informacije.
Ampak obstaja nekakšna Catch-22 tukaj.
Če je to zelo prvič ste pošiljanje to ljubezensko pismo prek
razred, kako je to fant ali dekle bo vedel, kaj je skrivnost tudi ni?
Torej skrivni ključ kripto ni rešitev za vse probleme sveta.
In tam je pravzaprav odnos, da bomo prišli nazaj proti
semester konec.
>> Podobno se nihče od nas verjetno nikoli poslala -
podobno, pa večina izmed nas ne pozna nekoga, ki dela na primer na
Amazon.com.
In vendar so mnogi od nas verjetno kupil stvari na Amazon.com.
In že smo se naučili, da domneva, da ti e-poslovanje
Transakcije so varni.
Imam prav?
Naslov URL verjetno pravi https.
Tam je morda neumno malo ključavnico ikona nekje.
Obstaja kakšna kriptografije zagotavljanje podatkov o kreditni kartici
med vami in Amazon.com.
In vendar, če kriptografija vključuje vedo nekaj skrivnosti, pa vendar ne vem
poznate koga na Amazon in sem zagotovo ni urejeno vse vrste
Skrivnost z nekom na Amazon, kako je moj računalnik ali moj brskalnik to počne?
No, izkazalo se je druga vrsta kriptografije, ki skupaj rešujejo
ta problem.
Toda danes, se bomo osredotočili na preproste 1, kjer se lahko dogovorite na
vnaprej vedeti nekaj skrivnosti, kot plus 1 ali nekaj kartiranje med AS in BS.
>> In proces kriptografije splošno vključuje to.
Imaš nekaj golo besedilo, prikazano tukaj na levi.
Si ga vodijo skozi neke vrste algoritem ali postopek
za njegovo šifriranje.
Mogoče je to le postane B, B postane C. In potem si na koncu z
šifra besedilo.
Medtem, ko vaš simpatijo prejme tajne vedite, on ali ona mora nato
dešifrira s splošno spreminjanje tega algoritem, tako da se
podprejo golo besedilo.
Zdaj obstajajo fizične inkarnacije tega.
Na primer, to je skrivnost dekoder prstan.
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 se s tem
obroč, lahko nekako obrnejo navzven, vendar ne v notranjosti, da se postavijo v vrsto
črk.
In v posnetku boste kmalu videli - nekateri od njih ste lahko videli 24/7
okoli božičnega iz filma imenovano Božična zgodba.
Videli boste, da je malo Ralphie bil tako nestrpen, da ugotovimo, kaj malo siroto
Skrivnost sporočilo Annie je bila z njim, ki so bili posredovani, mislim, da
obliki številčnih sporočil na serijski polje.
In ti si se kopičijo vse majhne kartice, ki ste jih dobili
V polje žit.
Imeli ste jih pošljete noter
Moral si priti nazaj skrivnost obroč dekoder, tako da lahko končno ugotovimo
kaj je preslikava med črkami in številkami,
ali črke in črke.
Zato sem dal ta kratek posnetek iz Božična zgodba motivirati pset 2 in
naša razprava, v trenutku, z nizi.
Torej, tukaj imamo Ralphie.
>> [VIDEO PREDVAJANJE]
-Se je znano, da vsi po vrsti, ki je Ralph Parker se imenuje
član Little Orphan Annie kroga Secret in pravico za vse
v čast in koristi se pojavljajo z njim.
-Podpisal, Little Orphan Annie.
Sopodpiše, Pierre Andre!
V črnila!
Priznanja in koristi, že pri starosti 9.
Dajmo, dajmo s tem.
Ne rabim vse, da jazz o kriminalcih in pirate.
-Poslušaj jutri zvečer na zaključni avanturo Črna
Piratsko ladjo.
Zdaj je čas za skrivno sporočilo Annie za vas člani
The Secret Circle.
Ne pozabite, da otroci lahko samo člani Secret kroga Annie je dekodirati
Skrivnost je Annie sporočilo.
Ne pozabite, Annie je odvisno od vas.
Nastavite zatiči B2.
Tukaj je sporočilo.
12, 11 -
-Jaz sem v svojem prvem sestanku skrivnost.
-14, 11, 18, 16 -
Pierre je v veliki nocoj glasu.
Jaz lahko povem, da je bila današnja sporočilo zelo pomembno.
-3, 25.
To je sporočilo od Annie sama.
Ne pozabite, ne povej nikomur.
-90 Sekund kasneje, sem v edinem prostoru v hiši, kjer fant 9
bi lahko sedeli v zasebnost in dekodiranje.
Aha, B. sem šel naprej.
E. Prva beseda je lahko.
S. Prihajal je lažje zdaj.
U.
Oh, daj no, Ralphie.
Moram iti.
Takoj se dol, ma.
-Gee duša.
-T, O. Bodite prepričani, da.
Bodite prepričani, da česa?
Kaj je bilo malo Orphan Annie poskuša povedati?
Bodite prepričani, da česa?
-Ralphie!
Randy je iti.
Bi, prosim, pridi ven?
V redu, mama.
Pridem takoj.
-Bil sem bližje zdaj.
Napetost je bilo grozno.
Kaj je bilo?
Usoda našega planeta lahko visi na nitki.
-Ralphie!
Randy mora iti.
Takoj se ven, za zjokat.
-Joj, že skoraj tam.
Moji prsti letel.
Moj um je bil jekla past.
Vsak por vibrira.
Bilo je skoraj čista.
Ja, ja, ja, ja.
-Bodite prepričani, da popij Ovaltine.
Ovaltine?
Crummy komercialno?
Kurbin sin.
[END VIDEO PREDVAJANJE]
>> David J. Malan: Torej imamo kriptografije.
Torej, kako v računalniku, lahko gremo o izvajanju ali
predstavljajo stvari, kot je ta?
Torej, potrebujemo način izražanja sebe malo bolj fleksibilno kot
naši spremenljivke so doslej dovoljeno.
Imeli smo ints.
Imeli smo znakov.
Imeli smo boje in v dvojicah in nekaj drugih.
Ampak to so unikatni pomnilnika, ki v resnici ne nam omogočajo
predstavljajo stvari, kot besed in stavkov in izrazov.
Dejansko smo tako imenovane nize stvari.
Ampak mi je obljubil, da je to res samo poenostavitev v CS50
knjižnica, ki smo nameravajo lupine nazaj.
>> In tako začnimo za to tukaj.
Naj gredo naprej in odpiranje datotek -
Vse te datoteke so na voljo na spletu kot običajno -
pozval array.c rešiti problem povezan s strunami, vendar slika
slika tule, kako jih bomo uporabili nekaj imenovano matriko.
Matrika je podatkovni tip.
To je tip spremenljivke, z menoj, da je več manjših vrst podatkov
znotraj nje back to back to back to back.
Tako na primer, če želimo napisati malo program, ki vam omogoča vaš
kviz povprečje za tečaj kot 50, ki ima 2 kvize, si lahko zelo enostavno
napisati ta program - temelji tudi na nekaterih snovi prejšnji teden -
z GetInt in nekaj spremenljivk.
Int quiz1, int quiz2, in to je precej preprosta.
To je morda 10, 20 vrstic kode, največ, za izvajanje programa, ki zahteva
si za dve 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, ko
nekaj več minut.
>> Ampak problem je, da predvidevam, da je 50 imel tri ali štiri kvizov.
Recimo, da ste želeli uporabiti isti program za razred, ki je imel
tedenski kvizi.
Pomislite na razred, ki je tedensko kvizov.
Če je tako ali tako 16 tednov na semester, 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, bi morala začeti, da bi si želel je bilo bolje tako.
In na srečo, zaradi nizi, pa je.
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.
Konvenciji o človekovih pri ustvarjanju konstanta je, da uporabite ves kapital
črke, samo zato, da resnično izstopa v kodi.
In posebna ključna beseda, ki jo uporabljajo v C # je definirati.
Torej, če ste rekli # define, nato presledek, nato pa besedo, ki jo želite uporabiti za
Konstanta ime, nato pa je vrednost konstante.
Torej, z odpovednim rokom, to je drugačen od dodeljevanju nekaj spremenljivko.
Ni enačaj.
Ni podpičje.
To je tisto, kar je splošno znano kot Preprocessor direktive, temveč bolj na
da je še čas.
>> Za zdaj, to ustvarja nespremenljiva pozval vrednost kvizi, katere dejanski
številčna vrednost je 2.
Torej, kjerkoli vidite, kvizi, kvizi, kvizi vsej tej zadevi, to je
samo številka 2.
Zdaj, če gledam na glavni zdaj, da vidimo, kako to deluje.
Sprva je videti malce skrivnosten.
Ampak to je vse stvari iz tedna 1.
Vprašaj uporabnika za razrede.
Kako to storiti?
No, v vrstico 22 -
to je res sočen del -
Izjavljam, plovec, ne pa samo eno float.
Jaz sem razglasitvi, temveč niz s plavajočo vejico.
Ta spremenljivka se dogaja, da se imenuje razrede, kot je vsebovano tukaj.
Ampak samo kos novim sintakso potem so ti oglati oklepaji, dejstvo,
da sem rekel obtoku ocene in nato oklepaj in nato številko.
Obvestilo, če je to konstanta, to je tako kot smo to naredili.
To pomeni, hej računalnik, daj mi dve boje, in naj skupaj imenujemo
jih razredov.
To je v nasprotju z veliko bolj dolgočasno postopku, kot je ta.
Float Grade1, plavajo grade2, in tako naprej.
Torej matrika nam omogoča, da izvajajo to zamisel, vendar veliko manj messily v
tak način, da bomo lahko napisali eno vrstico kode, namesto, recimo, 16 za 16
teden semester.
Zato nisem hotel, da je težko koda 2, ker če menite o tem zdaj
Logično - Predvidevam, naslednje leto CS50 spremembe 3 kvizi namesto tega.
In sem imel številko 2 tukaj.
Imel sem številko 2 tukaj.
To postane zelo dolgočasno in zelo težko zajebal in da se po nesreči spremenite
1 vrednost 3 in pogrešam kakšno drugo vrednost 2.
Zato bom namesto abstraktnih to stran, uporabite ta konstanta, kot njenega
ime pove, se ne spreminja.
In zdaj, ne glede na to, ali imamo različne kvize letos ali naslednje, sem
Samo, da ga spremeni na enem mestu, tu 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, da skupaj
Pravimo jim razrede tukaj.
In zdaj poglejmo, kaj bom naredil.
Tukaj, v skladu 24 je za začetek zanke.
To je res nič posebnega.
To je samo z uporabo kvizov namesto težko kodirane številke.
Ampak ni nič drugačen intelektualno tam od prejšnjega tedna.
To je samo printf.
Torej printf ("kviz številka% d od% d"), ker želim, da natisnete daj mi kviz
Številka ena od dveh, nato pa dva 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
vrednost, lahko ponovno uporabite oglate oklepaje.
V tem primeru, sem uporabljam, ker je ta zanka se je začelo z i izenačila
kakšno vrednost, očitno?
0.
>> Torej na prvi ponovitvi te zanke je, kot da sem
je to napisal v šifrah.
Toda na drugi ponovitvi te zanke je, kot da sem
to napisal v mojem kodo.
Toda dejstvo, da sem z uporabo spremenljivke je kot nalašč, saj, kot je ime
predlaga, da se različne svojo vrednost na vsaki ponovitvi.
Torej sem polnjenje tem polju eno mesto naenkrat.
Kaj to polje videti?
No, razlog, da sem narisal to super preprost pravokotnik na zaslonu tukaj
prej je bil zaradi tega.
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 tukaj, vse bi rad počel s
vnašati v mojih kviz rezultatov, kot tu.
Imam 100, glede tega.
In potem sem dobil 99 na to.
Potem je ta spomin celo ne uporabljajo, saj sem samo vprašal
Računalnik za matriko velikosti 2.
Ti trgi so še vedno tam.
Imam prav?
Imate še 2 GB RAM-a, tudi če ste le
prosi za dva 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 pomnilnika, znotraj katerega lahko postavite stvari.
>> No, 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 vseh vrednosti v matriki.
In potem sem uporabo okroglo funkcije tu dejansko storijo
Skratka, 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, deljeno z 2, nato pa tiskanje
ven 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.
In oprosti 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, pove
si, koliko znakov je v tem nizu.
To je vse.
Dejstvo, da je strlen namesto dolžine niza je samo zato, ker je
bolj skope.
Pred 30 leti so ljudje všeč, da napišete stvari, kot na kratko kot je mogoče.
Tako da smo ohranili to konvencijo tukaj.
i + + pomeni le i prirastek v vsaki ponovitvi.
In zdaj opazil to, kar je res zanimivo.
Torej, v skladu 24, povem računalnik, daj mi znak, 8
bitov, in ga imenujemo c.
Ampak kaj je to na desni strani govoriš?
V angleščini, kaj to pomeni?
[Neslišno]
David J. Malan: Točno tako.
Daj mi prvi znak v polje.
Ali bolj splošno, daj mi i-ti znak v polje.
In spoznali, da je zdaj pomembno, da so znanstvenike s področja računalništva, smo dejansko
šteto od 0.
Nimaš diskrecijsko zdaj začeti s tem.
Zdaj imate, da se obnašajo v skladu s pričakovanji računalnika in
šteti od nič, ker [0] se bo 1.
znakov v nizu.
[1] se bo drugi.
[2] se bo tretja in tako naprej.
Torej ta program, če ga pripravijo - to je spet niz1.
>> Torej, da niz1.
In zdaj sem prost niz1 v mojem terminalskem oknu.
Čaka na vhod, tako da bom s tipom, recimo, David.
Enter.
In zdaj se natisne David vse na različnih progah, saj
opazili, kaj počnem.
Jaz tiskanje en znak naenkrat.
Zdaj ne bom šel v podrobnosti o tem danes.
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 daš
št niz sploh.
Ali pa, če ste zlobni, lahko poskusite prilepite v vrednosti Gigabyte z dne
esej izpolniti tega niza.
In če računalniku zmanjka spomina, se je izkazalo, da bomo
, da bi dobili nazaj to posebno vrednost, imenovano null.
Torej za zdaj, samo vem, da je to posebno vrednost imenujemo null da
nam bo omogočilo, da preveri, ko bomo 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č.
Toda kaj je drugače približno za zanko tokrat?
In sem šel nazaj na prejšnji primer.
Torej, to je različica 2.
To je različica 1.
Ena, dve, ena dve.
Torej strlen klic je kje?
To je v prvi del za zanko.
Vsak misli, zakaj to delam?
Ja.
[Neslišno]
David J. Malan: Torej ne kliči funkcije vsak čas.
Točno tako.
Odpoklic iz for zanke, da so si zelo enostavna, ko ste nekako
Razumem, da je to inicializacijo, se
stanje in posodobitev.
Problem je, da je pogoj zgodi na vsakih
ponovitev zanke.
In tako se je v tem primeru v tej zadevi, kar je slabo, o tem,
da je to moje stanje?
Kličeš strlen znova in znova in znova.
Ampak, ko sem ga vnesli v DAVID, dolžina tega niza je pet.
In to ne bo spremenilo na vsaki ponovitvi zanke, saj je
Niz je še vedno D-V-I-D. Torej, to je namig, kaj se dogaja, da postanejo
bolj pomembna ideja, znan kot oblikovanje odločitev, kadar je to - pač ne
da računalnik to nepotrebno delo.
>> Zdaj pa tako kot slepar predogled pset 2, pset 2 v standardni različici je
vas bo izpodbijala dejansko izvajajo nekaj več, nekaj šifre
Število šifrirnih algoritmov, tako da lahko oba šifriranje in dešifriranje
skrivnih sporočil, podobno kot eni Ralphie je dešifriral.
V hacker izdaji pset 2, smo šli malo naprej.
Bomo izročil datoteko iz dejanskega računalniškega sistema, ki vsebuje
Cel kup imen in gesel dejanskih šifriranih in izziv
Za heker izdaja se bo crack teh gesel in slika
kaj kriptografije ali kaj skrivnost je bila uporabljena za dejansko
pridobivanje teh gesel.
In mi bomo to z novo funkcijo, tu v C, da bom dal
si demo, znan kot argumenti v ukazni vrstici.
>> Tako se je izkazalo, 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, ki jih vnesete po
ime programa na 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 z pset 2, se
nekaj takega.
Če naredim argv1, ki je na primer, da bomo vrnili v ponedeljek, in vodijo
je, opazite, 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 ima uporabnik
vnesli v ukazno vrstico je s spremembo glavni, ki se začne ta konec tedna, od notr
main (void) int main (argc, argv).
In bo tako rodil argumente v ukazni vrstici.
In ko se res sofisticiran na to, boste lahko pisali
Res trippy programi, kot je tale tukaj, ki presega presegajo
nekatere funkcije smo naredili doslej, ampak vse zelo močna.
>> Torej bomo pustim pri tem na zaslonu.
In se vidimo v ponedeljek.