[Powered by Google Translate] DAVID J. Malan: Bone.
Ĉi tiu estas CS50, kaj ĉi tiu estas la fino de semajno du.
Se vi atendis esti malsata por ĉi tiu epoko morgaŭ, sciu ke ni iras
kunvoki kiel malgranda grupo morgaŭ, ĵaŭdo, 1:15 PM.
Estas ĉi tiu URL tie se vi ŝatus RSVP.
Spaco estas limigita, do bonvolu pardoni se la formo plenigis per la tempo vi
plenigi ĉi eksteren.
Alia URL kvankam tiu povus esti de intereso estas ĉi.
>> Do en preskaŭ tutan monaton, la kurso tuj estos disponebla
des pli vaste tra edX, vojo kiu onin sur la interreto estos
povis sekvi kune, partopreni en la kurso sufiĉe aktive, fakte.
Ili estos uzi la CS50 Appliance kaj CS50 diskuti kaj la plejparto de la
diversaj programoj iloj por ke ni jam estis uzante ĉi semestro.
Kaj unu el la iniciatoj ni ŝatus alpreni kiel eksperimento ĉi tiu jaro
estas vidi, kiom multe enhavo ni povas traduki en aliajn parolata kaj
skribita lingvoj.
Do, se vi povus havi intereson en partopreni en ĉi tiu projekto, per kiu
ni provizos anglan transskriboj kaj subtitoloj por la kurso de
prelegoj kaj pantalono kaj seminarioj kaj sekcioj kaj similaj -
se vi parolas flue aŭ skribi flue iu alia lingvo, ni havus
amas engaĝiĝi vin en tiu projekto, per kiu vi prenas sur unu aŭ pli el la
videoj, tradukante ilin al lingvo vi scias sufiĉe bone.
Doni al vi la senton de la interfaco, ne estas tio ttt-bazita uzulinterfaco
ke ni estos uzi tiun kreos esence UI ŝatas tion.
Ĉi tio estis mi instruis kelkajn Halloween antaŭe.
Kaj sur la dekstra flanko tie en nigra apud tiuj tempo poŝtmarkojn,
vi vidos la diversajn aĵojn kiuj eliris el mia buŝo tiu tago.
Kaj tiam sub ĝi, vi povos traduki en iu alia lingvo.
Ekzakte kion la surĵeto estas inter, en ĉi tiu kazo, la angla
kaj, ni diru, la hispana.
Do ĝi estas vere tre uzantamika ilo.
Vi povas rebobinar kaj rapida antaŭen tre facile kun klavarkurtvojoj.
Do se vi ŝatus partopreni en ĉi tiu eksperimento kaj havi vian vortoj
vidis kaj legita de potenciale miloj da homoj tie, bonvolu senti
liberaj por partopreni.
>> Nun unu vorton pri la katido de lundo, por ke ni sendis tro
timigas mesaĝo.
Ĉu rimarkas ke kiel oficejo horoj sugestas kaj kiel sekcioj sugestas, la
dezajno de la kurso estas tre multe esti studentoj kunlabori kaj
parolante labori tra problemo aroj kaj problemoj kune.
Kaj vere la linio simple venas malsupren al, denove, la laboro vi finfine
devus submetiĝi devus esti via propra.
Kaj tiel ĝi estas, tute honeste - en oficejo horoj, ĝi estas tute normala -
ĝi estas plene atendi, eĉ - por esti babili kun iu
amikoj apud vi.
Se li aŭ ŝi luktas kun iu temo, kaj vi estas kiel, oh, bone lasu
mi donos al vi duonvidi de iu linio de kodo, kiun mi skribis.
Tio estas bone.
Tio okazas.
Kaj tio estas tre favoraj, mi pensas, kun la procezo de lernado.
Kie la linio, denove, gets transiris estas kiam la kapo estas speco de klinita super
ĉi tie tro da sekundoj aŭ minutoj por ke vere havi nur
estis desbloquear ŝancon por via amiko.
Kaj certe, kiam aferoj get interŝanĝis per retpoŝto kaj Dropbox kaj
similaj, ne tro estas la linio.
Do por supozita, senti komforta kaj senti kuraĝigis babili kun geamikoj
kaj kompanoj sur psets kaj pli.
Kaj ĝuste rimarkas ke kion vi finfine submeti devus vere esti la
produkto de via kreado kaj ne iu alia.
>> Do, en la sama stilo de cuddly uloj, vi povus
scias pri ĉi tiu viro tie.
Do ĉi tiu estas horrifically cheesy filmo de jaroj.
Neniu tie vidis Spaceballs?
Bone.
Do bonan numeron tie.
Do tiu estas nia mirinde akademia maniero enkonduki hodiaŭ finfine
la nocio de ĉifriko.
Kaj tiel unu el la domajno specifaj problemoj por pset 2, kiu venos
el malfrua morgaŭ nokte, estas plonĝi en la mondon de ĉifriko, kiu
estas la arto de encrypting aŭ grimpadi informo.
Kaj jen finfine rilatas al la mondo de sekureco.
>> Nun sekureco por la plimulto ni venas en la formo de sufiĉe sekulara mekanismoj.
Ĉiuj el ni havas uzanto kaj pasvortoj.
Kaj ni ĉiuj havas tre malbona usernames kaj pasvortoj, plej verŝajne.
Se via pasvorto estas la sama sur multnombraj retejoj, jen probable ne
la plej bona ideo, kiel ni diskutos al semestro la fino.
Se vian pasvorton estas skribita sur glueca noto - neniu ŝerco - en via
monitoro, ke ankaŭ tio ne nepre la plej bona dezajno sed sufiĉe komuna
fenomeno.
Kaj se vi ne uzas ĉifriko por ĉifri pasvortojn viaj, ili estas
aparte vundebla.
Do, se vi pensas ke vi estas super saĝa por havi kaŝitan Vorto
dokumenti ie en vian malmolan diskon kiu havas ĉiujn viajn pasvortojn sed
ĝi estas en dosierujo, ke neniu tuj rigardi, ke ankaŭ tio ne estas tre
sekura mekanismo.
Kaj tiel kion pset 2 enkondukos estas ĉi arton de ĉifriko kaj
grimpadi informon por ke aferoj kiel pasvortoj
des pli sekura.
Do kiel motivi ĉi tre reala mondo problemo kun tre ne-reala mondo
scenaro, lasu min enkonduki vin al unu el niaj plej ŝatataj klipoj tien el ĉi
filmo, Spaceballs.
>> [Vídeo]
-Kasko, vi fiend, kio okazas?
Kion vi faras al mia filino?
-Permesu prezenti la genian juna mola kirurgo, D-ro Philip
Schlotkin, la plej granda nazo laboron viro en la tuta
universo kaj Beverly Hills.
-Via moŝto.
-Nazo laboron?
Mi ne komprenas.
Ŝi jam havis nazon laboron.
Estis dolĉa 16 ĉeestis.
-Ne, ĝi ne estas kion vi pensas.
Estas multe, multe pli malbonaj.
Se vi ne donos al mi la ĉifro al la aero ŝildo, Dr Schlotkin volo
doni vian filinon reen sian malnovan nazo.
-Ne!
Kie vi akiris tion?
-Bone.
Mi rakontos.
-Ne, daddy, ne.
Vi ne devas.
-You're right, mia kara.
Vi mankos via nova nazo.
Sed mi ne diros al ili la kombino ajn.
-Tre bone.
Dr Schlotkin, faru vian plej malbona.
-Mia plezuro.
-Ne!
Atendu, atendu.
Mi rakontos.
-Mi sciis, ke tio funkcios.
Bone, donu ĝin al mi.
-La kombinaĵo estas unu.
-Unu.
-Du.
-Tri
-Tri.
-Kvar.
-Kvin
-Kvin.
-Do la kombino estas unu, du, tri, kvar, kvin.
Tio estas la stupidest kombinaĵo Mi iam aŭdis en mia vivo.
Tio estas la speco de afero idioto havus sur lian pakaĵon.
-Dankon, via moŝto.
-Kion vi faris?
-Mi elŝaltis la muro.
-Ne, vi ne.
Vi elŝaltis la tuta filmo.
-Mi devas premis malĝustan butonon.
-Nu, remetis ĝin plu.
Metu la filmo denove sur.
-Jes, sinjoro.
Jes, sinjoro.
-Ni iru, Erna.
Venu, Gretchen.
Kompreneble vi scias Mi ankoraŭ devas Bill vi pro tio.
-Nu, tio funkcias?
Kie estas la pordego?
-Ĝi laboris, sinjoro.
Ni havas la kombinon.
-Granda.
Nun ni povas preni ĉiun lastan spiron de freŝa aero de planedo Druidia.
Kio estas la ĉifro?
-Unu, du, tri, kvar, kvin.
-Unu, du, tri, kvar, kvin?
-Jes.
-Tio estas miriga.
Mi havas la saman kombinon sur mia pakaĵo.
Prepari Spaceball 1 por tuja foriro.
-Jes, sinjoro.
-Kaj ŝanĝi la kombino de mia pakaĵo.
-Aj!
[FINO vídeo]
>> DAVID J. Malan: An amazing filmon vi devus nun ĉiuj vidas.
Do la kunteksto estas, ke kun necerta datumoj venas ŝancon
ĉifri ĝin kaj levi ĝin.
Kaj tiel tio, ekzemple, estas ekzemplo de ĉifrita mesaĝo.
Tiu fakte diras ion en la angla.
Sed estas klare ne tute evidenta.
Kaj ni venos plena cirklo hodiaŭ al tease krom kio estas tiu sekreta
mesaĝon ĉi tie estas.
Sed en la reala mondo de komputiloj, aĵoj eĉ ne aspektas kiel ili povus
esti angla frazoj.
Ekzemple, ĉi tio estas kion vi povus trovi en norma Linukso aŭ Mac aŭ
Unikso komputilo en dosiero, kiu estis iam nomata la pasvorton dosiero.
Nuntempe, ĝi estas movita en aliaj lokoj.
Sed se vi rigardas en la ĝusta loko en sistemo, vi vidos ne nur vian
salutnomo aŭ tiu de aliaj homoj en la sistemo, sed vi vidas
ĉifrita versio de ilia pasvorton.
Efektive, la vorto kripto tie sugestas ke la sekvaj aferoj estas ĉifrita.
Kaj ĉi tiu serio de kvazaŭe hazarda literojn kaj signojn kaj nombrojn kaj
ktp povas esti deĉifrita nur ĝenerale sciante iu sekreta -
sekretan vorton, sekreta nombro.
Kaj tiel ja, la arto de ĉifriko finfine abscesoj malsupren fidi de iu
varo kaj sciante ion ke iu alia ne.
Ni esploru tion en iom pli detale hodiaŭ kaj en la pset veni.
>> Kaj nun unu vorton sur pass / malsukcesas.
Do precipe, kiel kelkaj el vi plonĝis en pset 1, la aparato, kaj
tre nova mondo por vi mem, rimarkis ke frustroj kaj
konfuzo kaj simple teknikaj malfacilaĵoj estas por atendi.
Speciale kun la unua pset, kie estas nur tiel nova, nur nun
familiara kun ls kaj cd kaj ĉiuj tiuj arcano komandojn en nova medio.
Kaj tio estas apartigita for la efektiva materialo kaj programado mem.
Do realigi, ankaŭ, ke estas certe oficejo horoj kiuj ekzistas kiel
la apogo strukturo.
Sekcioj komenci ĉi venas dimanĉon.
Sed plej grave, se vi sentas ĝuste tio ĉi ne estas la
mondo por vi, kompreni ke vere ne nur preni tempon.
Kaj se ne por tiu ĉi ŝanco jarojn por mi de preni klaso
pasi / malsukcesos, honeste, mi neniam estus eĉ tretis la klasĉambro.
Kaj vi povas ŝanĝi ĉi ĝis, ni diru, la kvina lundo de la kurso.
Do se vi estas sur la rando nun rimarkas ke anstataŭ kapon en iu alia
akvoj aro, do certe konsideras nur ŝanĝas pasi / maltrafi.
Denove, ne estas vere tiu kulturo tie en Harvard de preni aĵojn
pasi / malsukcesos ĉar ĉiuj vere volas atingi aŭ overachieve.
Sed sincere, ĉi tiu estas bonega maniero de provi ion ke ne fariĝu
esti konata al vi.
Kaj vi finos faras plejofte tute bone, eble
multe al via surprizo.
Kaj en pli konkretaj terminoj, kion mi kredas pasi / malsukcesos ĝenerale faras,
speciale kiel vi eble spertis kun pset 0, se vi metas
en 10 horoj, 15 horoj, 25 horojn en iu pset - kaj vi nur banging
vian kapon kontraŭ la muro,
kaj Fariĝas super malfrue en la nokto,
sed vi prenis la pset kiel 90% de la vojo,
vi scias, ke vi tute ne povas kalkuli unu afero -
pasi / malsukcesos vere prenas la rando ekstere de klaso kiel ĉi tiu, kie vi povas ordigi
de feliĉe diras bone, mi scias ke ne perfekta.
Sed mi laboris mia azeno sur sur ĉi.
Estas sufiĉe feliĉa kun kie finis.
Kaj tio estos renkonti la atendojn por pass / maltrafi.
Do observu, ke en la menso.
>> Bone.
Do tiuj el vi, kiuj luktis por uzi la Universitato Harvard Wi-Fi scias
ke estas CS50 SSID, a Wi-Fi ŝvebantan ke vi
havu bonan sorton por.
Ĝi estas iom ironia ke la pasvorto por tio - se vi ŝatus provi
konektante al ĉi por pli bona rapidoj kaj ni scias se ĝi estas pli bona -
estas unu, du, tri, kvar, kvin, la tuta vojo ĝis ok ĉar ok estas
pli sekura ol kvin.
Do, se vi bezonas la Wi-Fi pasvorton, konekti al CS50 sendrata tie.
Unu, du, tri, kvar, kvin, ses, sep, ok.
Kaj post en CS50 Diskutu se vi ankoraŭ havas intermitaj conectividad temoj,
kaj ni lasu la povoj kiujn oni scias ĉi tiu spaco.
>> Bone.
Tial rapidaj teaser, precipe por tiuj el vi, kiuj estas fano knaboj aŭ knabinoj
de ĉiuj aĵoj Apple.
Kion mi elfosis de kelkaj jaroj malantaŭen, estis jena dosiero tie, ilock.c, nur por
speco de fari pli konkretaj kaj pli kompleksaj kelkaj el la pli bazaj C
programoj ni estis skribante.
Do mi malfermis ĉi-dosiero, ilock.c.
Estas disponebla en la prelegoj paĝo hodiaŭ.
Sur la maldekstra flanko, vi vidas longan liston de funkcioj.
Do la ulo kiu skribis ĉi redaktis multajn funkciojn,
pli ol nur ĉefaj.
Li uzis tutan faskon da bibliotekoj ĉi tie.
Kaj se ni komencos movo tra, kio estas tiu fakte estas estas la tre
unue, mi kredas, fendi por la originala iPhone.
Kiam vi volis jailbreak la originala iPhone, kiu signifas untether
ĝin de AT & T kaj vere instali specialan programaron sur ĝi kaj fari aferojn
ke Apple ne volis personoj faru -
nu, iu prenis la tempon por eltrovi ĝuste kiel ili povus eksplodi
programaro difektoj, erarojn, erarojn, en Apple programaro.
Kaj tiel naskiĝis ilock.c.
Ke se vi kompilis ĝin en komputilo kaj instalis ĝin sur iPhone ke
estis konektita al via komputilo per, ekzemple, USB kablon, ĉi tio donas al vi
administraj aŭ radiko privilegiojn en via iPhone kaj lasos vin fari preskaux
kion ajn vi volas.
>> Kaj do ili pasis tiu fascina kato kaj muso ludo inter Apple kaj
la resto de la mondo en aparta kiel ili, kiel multaj entreprenoj, klopodi ŝlosi
iliaj aĵoj malsupren tiel ke vi povas nur fari kun ĝi, kion ili intencas.
Sed danke al homoj ŝatas ĉi kaj ilia kompreno de malalta nivelo
detaloj kaj, en ĉi tiu kazo, programado C kaj multe de la familiara konstruoj
ke ni komencis ludi kun vi kapablas vere influon la
aparataro en maniero ke vi decidos, kaj ne nepre iu kompania ento.
Do ekzemple, mi ne havas ideon kion ĉiuj ĉi faras.
Sed GetVersion sonas sufiĉe simpla.
Kaj ĝi aspektas kiel ĉi estas funkcio kiu tiu persono skribis.
Prenu ian entjero kiel argumento, ne revenas nenion, sed
ŝajnas buklo kun por buklo tie kaj se kondiĉo, se kondiĉo,
rompi, kaj iel rilatas al versio nombroj.
Se ni rulumu malsupren -
kvankam multe da tiuj ŝlosilvortoj tuj estos nova, kaj tie estas
tuta multajn funkciojn en ĉi tie ni neniam vidis kaj eble ne cxiam vidas pli
la kurson de la semestro -
ĉe la fino de la tago, sekvas la samajn regulojn kaj logiko, ke ni estis
ludante kun tiel for.
Do ĉi tiu estas tro maljuna por fendi via iPhone 3s aŭ 4s aŭ baldaŭ 5s, tiuj tagoj,
sed sciu, ke ĝi estas ĉiuj tre derivita de ĉi tiu mondo kiu ni
plonĝis en.
>> Do ni rigardu iom pli simpla ekzemplo.
Ĉi tiu, nur por preni hejtita kun iuj sintakso kaj ankaŭ iuj aliaj datumoj
tipo kiu ni jam parolis pri sed ne vere vidas en C. Do ĉi tiu estas
dosiero nomata positive1.c.
Kaj po la komentojn ĉe la supro, ĉi nur postulas ke la uzanto ofertas
pozitiva nombro.
Do ĝi estas ekzemplo de do-dum ciklo, kiu estas agrabla por uzanto-interaga
programoj kie vi bezonas diri al la uzanto fari ion.
Kaj se ili ne kunlabori, vi krias al ili aŭ malakcepti lian enigo.
Kazo en punkto, mi iras fari linioj 19 tra 24 tiel longe, kiel la uzanto havas
ne donis al mi pozitiva nombro.
Nun ĉi tiu detalo tie sur linio 18, kial mi deklaras n super ĉi tiu tuta
looping konstruo kiel kontraŭ tuj apud linio 22, kie mi
vere gravas por ricevi n?
Yeah?
[Inaudible]
>> DAVID J. Malan: Jes, tia ĉi demando de medio.
Kaj en lego de termino, kion signifas medion referi al?
Yeah?
[Inaudible]
DAVID J. Malan: Ĉu vi povas paroli iom pli laŭta?
Parolanto 1: Kie vi povas aliri aparta variablo.
DAVID J. Malan: Perfekta.
Kie vi povas aliri al aparta variablo.
Kaj ĝenerale, la regulo de thumb ĝis nun estis ke la medio de iu
variablo estas difinita de la plej freŝa krispa krampoj, ke vi vidis.
Kaj tiel en tiu kazo, se mi faris la eraron de deklarante n sur linio 22,
tiun linion laborus.
Mi ricevas int, kaj mi metis ĝin en tiun variablon n en linio 22.
Sed kion linio de kodo nun ne havas ideon kion mi parolas?
Do 25, kaj ĝi rezultas 24, siavice, ĉar en ĉi tiu kazo, ĝi falas ekstere
de la frizita krampoj.
Do nur iom da ĝeno sed tre facile solvita per simple deklarante
la variablo ekstere de la funkcio mem.
>> Nun ni vidos poste hodiaŭ, vi povas iri unu paŝon.
Kaj vi povis saltigi iom mallaborema -
kaj ĉi tiu estas ne al esti rekomendita, ĝenerale -
sed vi povis saltigi mallaborema kaj metis variablo sume, por tiel diri, ne
ene de funkcio, ne interne de ciklo, sed en la dosieron mem, ekstere
de ĉiuj funkcioj vi skribis, kiel mi faris tie sur linio 15.
Sed ĉi tiu estas ĝenerale malaprobita.
Sed realigi ĉi estas solvaĵo foje al aliaj problemoj, kiel ni instruos vin
eventuale vidi.
Do nuntempe, ni lasos ĝin kiel ĉi tio.
Sed ni vidu se ni povas reverki ĉi nur por komenci esprimi al ni
iom malsame.
>> Do ĉi tiu programo, nur por esti klara, estas positive1.
Lasu min ĉi tie kaj en mia fina fenestro fari positive1, Enter.
Kompilas, okay.
Mi tuj kuros positive1, batis Eniru.
Mi postulas ke vi donu al mi pozitiva entjero.
Mi diros -1.
Tio ne funkcios.
0, 99, kiu ŝajnas funkcii.
Eble ne la plej rigora provo.
Sed almenaŭ ĝi estas bela prudento ĉeko ke ni estas sur la ĝusta vojo.
Do nun mi antaŭeniri kaj malfermi versio du de ĉi.
Kaj kio estas malsama jam?
Ĝi altrudas la sama aĵo.
Sed kio saltante kiel klare malsamaj tiu tempo?
Yeah, do ĉi bool en verdo.
Gedit estas emfazita en verdo ĉi ŝlosilvorto konata kiel bool,
kiu estas datumtipo.
Ĝi ne venos konstruita por ĉiuj versioj de C. Vi devas inkludi
specifaj biblioteko.
En nia kazo, mi inkludis la CS50 biblioteko por ke ni
havas aliron al bool.
Sed en linio 18, ni ŝajnas havi Bulea valoro ĉi tie nomas dankemaj.
Do mi povus esti nomata ĉi ion ajn.
Sed mi nomis ĝin dankema nur por ia transdoni iun semantikan signifon.
Do komence en linio 18, mi ŝajne ne danka ĉar la
Bulea valoro dankema estas inicializado al falsa en linio 18.
Kaj tiam ĝi ŝajnas kion mi faris tie en linioj 21 tra 23 estas mi ĵus
speco de reskribita mia logiko.
Do ne funkcie malsama.
Sed en linio 22 nun, mi kontrolu se la int la uzanto havigis estas pli granda ol
0, tiam mi simple ŝanĝi la valoron de dankema al vera.
Kaj kial mi faru tion?
Ĉar en linio 25, ŝajne, mi iros por kontroli kondiĉo.
Ĉu ĉi tiu buklo dum dankema estas falsaj.
>> Do mi proponas tion kiel alternativo al la versio ĉar ĝi estas almenaŭ
iom pli intuicia, eble.
Ĝi estas iom pli bazite en la angla.
Do faru la sekvajn dum vi estas ne dankema aŭ dum dankema estas falsaj.
Kaj ĉi tiu tempo, tro, mi ŝajne ne gravas memori kion la uzanto tajpas
en ĉar avizo ne estas variablo n.
Do fakte, mi -
iom blanka kuŝas tie.
Funkcie, la programo estas iom malsamaj iam ni atingos la fundon de
ĉar mi ne memoras kio n estas.
Sed mi volis pruvi ĉi tie ankaŭ, ke eĉ se ni vidis GetInt kaj
GetString uzitaj sur la dekstra flanko de egala signo tiel malproksime por ke
ni memoru la valoro, teknike, tio ne estas strikte necesaj.
Se ial ajn vi simple ne deziras savi la valoro, vi nur volas
por kontroli la valoron, rimarki ke ni povas simple skribi ĉi tiu kiel GetInt malfermita
paren, proksime paren.
Tiu funkcio tuj resendas valoron, kiel ni estis dirante.
Ĝi tuj donu vin al int.
Kaj do se vi mense pensas pri ĉi okazas, kiam mi tajpas en 99, GetInt
redonas la numeron 99.
Kaj tiel koncepte ĝi estas kvazaŭ mia kodo estis fakte ĉi.
Do, se 99 estas ja granda ol 0, tiam dankema iĝas vera.
Tiam linio 25 rimarkas ooh, ni faris ĉar mi estas nun dankemaj.
Kaj en linio 26, ni simple diri, dank al la pozitiva entjero, kio ajn ĝi
okazis esti.
>> Nun ni faru malgravaj sintaksa sukero tie, por tiel diri.
Ni vidu se ni povas purigi ĉi tiun linion 25 kun ĉi tiu tria kaj lasta varianco
en positive3.
Do rimarki la sola diferenco nun estas kion linio de kodo?
Yeah, do 25.
Kaj ni ne vere vidis tiun atuton nur ankoraŭ.
Sed ni vidis la ekkrio punkto lundon, kiu signifas kion?
Do ne, aŭ nego.
Do prenu Bulea valoro kaj klaki ĝian valoron.
Vera igas falsa.
Falsa iĝas vera.
Do ĉi, mi proponas, estas eĉ iom pli intuicia de maniero de
skribi la kodon cxar mi ankoraŭ pravalorizi dankis falsaj.
Mi ankoraŭ faras la sekvajn.
Mi fiksis dankis vera kiam la tempo venas.
Sed nun vi povas vere nur traduki tiun kodon parole maldekstre dekstren,
dum ne dankemaj.
Ĉar bang, aŭ ekkrion punkto, signifas la nocio de ne, do dum
ne dankemaj.
>> Do denove, ni ne enkondukis novajn konceptojn per si mem.
Ni jam parolis pri Booleans reen kiam ni ludis kun Scratch.
Sed realigi nun ni povas simple komenci skribi nian kodo
multaj diversaj manieroj.
Do precipe en pset1, se vi estas ia luktas por kalkuli la vojon al
skribi iun programon, malakordo vi estas en sorto ĉar tuj estos neniu
numeron de solvoj kiuj povas okazi sur.
Ekzemple, ĉi tiu estas nur tri por eĉ la plej simpla de programoj.
Bone.
Kaj nun memori lundon, ni lasis en tiu ĉi noto kun reveno valoroj.
Do por la unua fojo, ni skribis programon kiu ne simple devas ĉefa,
ĝi ankaŭ havas sian propran funkcion kiu mi skribis ĉi tie.
Do en linio 31 tra 34, mi implementado kubo funkcio.
Ne kompleksa.
Estas nur fojojn fojojn, en ĉi tiu kazo.
Sed kio estas grava pri tio estas ke mi ferios enigo en la formo de a kaj
Mi revenis eligo en la formo de fojojn fojojn.
>> Do nun mi havas la kapablon, multe kiel mi kutimis kun printf sola, nomi
ĉi funkcio per nomante la kubo funkcio.
Kaj la kubo funkcio prenas iujn enigo.
Kaj la kubo funkcio redonas iuj eligo.
Kaj tiel per kontrasto, printf ĵus faris ion.
Ĝi ne revenis ion ke ni zorgis pri - kvankam, kiel
flanken, jes redonas valoron.
Vi nur ĝenerale ignoras ĝin.
Printf ĵus faris ion.
Ĝi havis kromefikon videbligi al la ekrano.
Kontraŭe tie, ni havas la kubo funkcio, kiu
fakte revenas ion.
>> Do ĉi tiu estas ĝenerale -
por tiuj, kiuj konas tiun, estas sufiĉe simpla ideo.
Sed por tiuj malpli familiara kun tiu ideo de pasi en eniroj kaj atingi
reen eligoj, ni provu simple io super simpla.
Estas iu komforta leviĝas sur la scenejo mallonge?
Vi devas esti komforta kun ĉambro sur vi, ankaŭ.
Yeah.
Konsentite, kio estas via nomo?
Ken: Ken.
DAVID J. Malan: Ken.
Bone, Ken.
Venu supren.
Do Ken tuj esti funkcio de varoj tie.
Kaj ni faru tion.
Ni lasu iom kaprico.
Nice to meet you.
Bonvenon centro scenejo.
Bone.
Ni batis tiun butonon tie.
Bone.
Do jen vi havas modernan chalkboard.
Kaj kion mi estas la ĉefa funkcio, ekzemple.
Kaj mi ne havas iPad en mia mano.
Mi ne vere memoras kiel - nu, efektive, ne povas diri tion.
Mi ne vere havas bonajn manskribo.
Kaj tiel do, mi volas ke vi presi iun sur la ekrano por mi.
>> Do mi estis la ĉefa programo.
Kaj mi iras al vi tion diras de skribi en mia kokido nulo kaj
tiam pasi vi enigo.
Do kiel stulta kvankam tiu ekzerco estas, la nocio de funkcioj kaj vokas al
funkcio kaj revenante funkcio vere bolas al tiu.
Mi estas ĉefa.
Mi ĵus skribis printf ("iu") sur la ekrano.
Mi kuras ĉi tiu programo.
Kaj tuj kiam printf gets nomis lin prenas unu argumenton - aŭ unu parametro,
kelkfoje -
inter duoblaj citiloj.
Jen estas tiu argumento.
Mi pasante ĝin al Ken.
Nun li estas nigra skatolo skribita iu nombro da jaroj, ke ŝajne
nur scias presi tion en la ekrano.
>> Do, ekzekuti.
Tio ne estas malbona.
Do, tre bona.
Do nun Ken realigas ekzekuti.
Ĉu li bezonas transdoni al mi ion reen?
Do ne ke ni vidis ĝis nun.
Denove, printf ne vere redonas nombron.
Sed ni tuj ignori ke por nun ĉar ni neniam uzis ĝin.
Do jen ĝi por Ken.
Kaj tial nun ĉefa revenas por ekzekuti -
ĉefa transprenas la kontrolon de la programo denove ĉar tiu linio de kodo,
printf, estas farita ekzekuti.
Kaj ni iru sur la vojon ekzekuti ajn aliaj linioj estas tie.
>> Bone.
Do nun ni provas iomete malsaman ekzemplon.
Kaj ĉi tiu fojo ĉi tie, ni unue liberigi la ekrano tie.
Kaj ĉi tiu tempo, ni faros la cubing funkcio.
Sed ĉi tiun fojon, mi atendas eliro valoro.
Do ni faru ĉi.
Do nun mi havas linion de kodo kiu diras x = kubo (x).
Do efektive let's -
la linio de kodo, revokon, aspektas kiel ĉi tio.
x = kubo (x).
Do kiel estas ĉi irante labori?
Do ni iru antaŭen kaj doni al vi blankan ekranon denove.
Kaj mi tuj skribos nun laŭ la valoro de x, kiu en ĉi tiu momento en
tempo pasas al, ni diru, 2, teni ĝin simpla.
Do mi skribis sur peco da papero la valoro de 2,
kio estas mia valoro x.
Mi transdonos ĝin al Ken.
Ken: Mi nur skribos la respondon?
DAVID J. Malan: Jes, ni nur skribos la respondon.
Okay.
Kaj nun li devas reveni al mi ion.
Do -
perfekta.
Nice segue.
>> Do nun li manoj min redoni la valoron de 8, en ĉi tiu kazo.
Kaj kion mi faru per ĝi?
Nu, fakte, ni vidos.
Get this right.
Kion mi faros per gxi?
Nun mi iros por preni tiun valoron kaj reale stoki ĝin en tiuj
sama bitoj en memoro.
Sed avizo, mi estas ia luktas ĉi tie.
Mi estas iom konfuzita pro kie mi fakte skribas la valoron de x?
Ĉar kion mi ĵus faris estas fizike mano Ken peco de papero
kiu havis la valoron 2, kiu estis x.
Kaj efektive, jen precize kio okazas.
Do rezultas ke kiam vi nomas funkcio, kaj pasas en argumento
kiel "saluton mondo" aŭ sekvinberoj en argumenton kiel 2, ĝenerale, vi estas
pasante en kopio de tiu argumento.
Kaj tiel same kiel mi notis la numeron 2 tie kaj enmanigis ĝin al Ken; ke devas
signifas ke mi ankoraŭ havas kopion de la valoro 2 ie.
Ĉar ja, nun ke mi alvenas reen la valoro 8, mi devas iri reen en
RAM kaj reale noti 8 kie mi iam havis la numero 2.
>> Do vide memori tiu nocio de pasi en laŭvorte
kopio de la valoro.
Ken faras lian aferon, manoj min io - en ĉi tiu kazo,
valoro kiel 8.
Kaj tiam mi devas fari ion kun tiu valoro, se mi
volas konservi ĝin ĉirkaŭe.
Do ĉio ĉi estos tro familiara antaux longe.
Dankon tiom por ĉi tiu demo tie, Ken.
Bone.
Tre bone farita.
Do ni vidu kiel tiu fine rilatas al kelkaj el la funkcio
nomante ke ni estis ĉi tie.
Do lasu min antaŭeniri kaj alporti nin al la cubing ekzemple ĉi tie.
Kaj rimarki ke se ni volas vere komenci porti ĉi tiun for, ni iras
por havi memoru la fakto ke la nombro x ke tio esti pasis en
tie estas malsama de tio, kio efektive aprobotaj en la funkcio.
Do denove, ĉi preteriris kopion tuj fariĝis sufiĉe
germane en nur momento.
>> Do ni rigardu aĵo kiu ne sufiĉe laboras dekstra ankoraŭ.
Mi tuj iros antaŭen kaj malfermi tria kalesxo ekzemplo, kiu
estas misa por naturo.
Kaj ĝi estas nomata buggy3, kaj implementa interŝanĝi funkcio.
Do jen ni havas ĉefan funkcion kiu x kaj y arbitre inicializado al
1 kaj 2, respektive.
Ni povus uzi GetInt, sed ni nur bezonas simplan ekzercon.
Do ĝi estas malmola kodita kiel 1 kaj 2.
En linioj 21 kaj 22, oni ŝajne presi x kaj y, unu po linio.
Tiam, sur linio 23, mi asertas mi interŝanĝi tiujn valorojn, pentras, pentras, punkto.
Mi ŝajne nomas funkcio en linio 24 nomita interŝanĝa
kiu prenas du argumentojn.
Estas tute legit por funkcioj preni du argumentojn.
Ni vidis printf fari ĝin jam.
Do interŝanĝa ŝajne prenas x kaj y.
Kaj kiel ĝia nomo sugestas, mi esperas ke ĝi tuj
interŝanĝi tiujn du valoroj.
Tial mi diras on line 25-interŝanĝis.
Kaj mi represi x kaj y sub la supozo ke
ili jam vere estis svopitaj.
Sed se mi vere kuras ĉi programo -
lasu min malfermi fina fenestro.
Lasu min fari buggy3.
Kiel la nomo sugestas, ĉi tio ne tuj finos bone.
Ĉar kiam mi batis Enter, rimarki ke x estas 1.
y estas 2.
Kaj tamen ĉe la fino de la programo, ili estas ankoraŭ, fakte, la sama.
>> Do surbaze de la manifestacio gxuste nun kun Ken, kio efektive okazas?
Nu, ni plonĝi en tiun interŝanĝa funkcio.
Estas super mallonga.
Estas nur malmultaj linioj de kodo longa.
Sed kio estas la fundamenta problemo bazita sur la simpla historio rakontis
tien kun Ken?
Kial interŝanĝa rompita?
[Inaudible]
Ekzakte.
Do ni provizon al kopio, ne la variablo mem.
En aliaj vortoj, interŝanĝa ŝajne prenas du argumentojn, la int.
Kaj ĝi estas arbitre nomas a kaj b.
Kaj ĝis ĉi tie, mi pasis en x kaj y, kiuj estas respektive 1 kaj 2.
Sed mi ne laŭvorte pasante en x.
Mi ne laŭvorte pasante en y.
Mi pasante kopion de x kaj kopion de y.
Estas kiel preskaŭ kvazaŭ vi kopiis kaj pasted en interŝanĝi la valorojn kiuj
vi volas ke ĝi reale manipuli.
Do se tiu estas la kazo, kiam mi, la programo, starti ekzekuti
linio 35, tiam 36 -
kiam mi reiros al la linio 37, je ĉi tiu punkto en la historio, kio estas la valoro de?
Je ĉi tiu punkto en la historio, linio 37, kio estas la valoro de ĉe ĉi tiu punkto?
Do ĝi devus simple esti 1.
Ĝuste?
Ĉar x estis aprobita en la unua argumento.
Kaj ĉi tiu funkcio nur arbitre alvokas lia unua argumento, al.
Simile estas y, la dua argumento.
Kaj ĝi estas nur arbitre nomi la dua argumento b.
>> Nun ĉi dicotomía fakte sufiĉe simple klarigita.
Pensu pri tio.
Neniu el ni renkontis la persono kiu skribis printf.
Do certe, li aŭ ŝi havas neniun ideon pri kio nia variabloj 30 jaroj poste iras
esti nomata.
Do devas esti distingo inter tio, kion vi nomas variabloj en
funkcioj vi skribas kaj kion vi nomas variabloj en funkcioj vi estas
nomante aŭ uzante.
Do alivorte, mi skribis mian variabloj kiel x kaj y.
Sed se iu alia estis skribinta la interŝanĝa funkcio, li aŭ ŝi certe
ne scias, kion mia variabloj tuj nomos.
Do rimarkas ke ĉi tiu estas kial vi havas ĉi duvarianteco de nomoj.
Teknike, mi povus fari tion per hazardo.
Sed ili ankoraŭ pasis en kiel kopioj.
Estus nur esti pura koincido estetike se tiu persono kiu skribis
interŝanĝa estis uzintaj la samajn nomojn.
>> Bone.
Do je ĉi tiu punkto en la historio, linio 37, a estas 1.
b estas 2.
Kaj nun mi procedi por interŝanĝi ilin.
Nu unue, lasu min reale fari ĉi multe pli simple.
Mi ne scias, kion tiuj tri linioj de kodo estis farante.
Lasu min nur faru tion.
b ricevas.
oni ricevas b.
Faris.
Kial estas ĉi rompita, logike?
Estas speco de la intuicia afero, ĉu ne?
Do oni revenas b.
Kaj b iĝas.
Sed la problemo estas ke tuj kiam linio 37 ekzekutas, kio estas la
valoro de a kaj b?
La sama, 1.
Ĉar vi clobbered, por tiel diri, vi jam ŝanĝis b egali al.
Do iam linio 37 estas ekzekutita, jen granda.
Nun vi havas du kopiojn de la numero 1 ene de ĉi tiu funkcio.
Tial, kiam vi diras en linio 38, ricevas b, nu, vi estas speco de ŝraŭbitaj.
Ĉar vi ĵus atribui 1 al 1.
Vi ia perdis la valoron vi zorgis pri.
>> Do, en la originala versio de ĉi tiu, rimarkos, kion mi faris.
Mi anstataŭ havis trian linion de kodo kiu aspektis kiel ĉi tio.
Mi deklaras portempa variablo - tmp estas tre komuna nomo
por portempa variablo.
Ĝi estas int ĉar ĝi havas por kongrui kion mi volas fari kopion de.
Mi stoki kopion de interne tmp. Do iam linio 37 estis ekzekutitaj,
la valoro de a estas -
rapida prudento kontroli -
1.
La valoro de b estas 2.
Kaj la valoro de tmp estas ankaŭ 1.
Do nun mi ekzekuti linion 38.
Do iam linio 38 ekzekutas, oni prenas la valoro de b.
Kaj b estis 2.
Tial nun estas 2.
Do je ĉi tiu punkto en la rakonto, estas 2, b estas 2,
kaj tmp estas 1.
Do nun logike, oni povas simple plop tmp valoro al b.
Kaj ni faris.
>> Do ni solvis tiun problemon.
Bedaŭrinde, kiam mi kuros ĉi programo en ĉi tiu formo, ĝi ne vere interŝanĝi
neniu valoroj.
Sed esti klaraj, kial?
Mi riparis la logika problemo de nur antaŭ momento.
Sed denove, se mi kuros ĉi programo, x kaj y restas neŝanĝita por la fino de
la programo ekzekuto.
[Inaudible]
DAVID J. Malan: Do ni ne revenis nenion.
Do tio estas vera.
Sed ĝi rezultas ekzistas iom da problemo ĉi tie, ĉar ĝis nun, la
sola afero ni povas reveni estas unu afero.
Kaj jen estas limigo de C. Oni povas nur denove vere valoro,
en kies kazo, mi estas ia kaptita ĉi tie
ĉar mi povis reveni al la nova valoro de x aŭ mi povus redoni la
nova valoro de y.
Sed mi volas ambaŭ dorso.
Do reveni ne la simpla solvo ĉi tie.
Sed la problemo estas fundamente kial?
Kion ni vere interŝanĝis?
a kaj b.
Sed a kaj b estas kopioj de x kaj y, kio signifas ke ni ĵus faris ĉion ĉi
labori - ni simple pasigis kiel tri minutoj parolas la interŝanĝa
funkcio kaj ĉiuj tri de ĉi tiuj variabloj.
Kaj tio estas granda, perfekte ĝentila en izolado.
Sed a kaj b estas medion nur estas en tiuj linioj tie.
Do ĝuste kiel por ciklo, se vi rakontos entjero i interne de la por
buklo - simile, se vi deklarante a kaj b ene de funkcio kiu
vi skribis, ili estas nur valida interne de tiu funkcio.
Kio signifas tiel frue kiel interŝanĝa estas farita ekzekuti kaj ni iros de linio 24 al
linio 25, x kaj y ne estis ŝanĝita tute ne.
Vi nur malŝparis tuta multan tempon interŝanĝi kopiojn de variabloj.
>> Do rezultas ke la solvo al ĉi estas fakte ne-evidenta.
Ne tute sufiĉa por reveni valoroj ĉar ni povas
nur reveni unu valoro.
Kaj mi vere volas interŝanĝi ambaŭ x kaj y en la sama tempo.
Do ni tuj revenos al ĉi tio.
Sed nuntempe, rimarkas ke la afero funde derivas de la fakto
ke a kaj b estas kopioj.
Kaj ili estas en lia propra medio.
Nu, ni provu solvi ĉi iel.
Lasu min reale rulumu reveni ĉi tien kaj malfermu, diru, kvara varianto
de ĉi tio, buggy4.
Kaj kio pri tio?
Ĉi tiu estas simila sed pli simpla problemo por rigardi antaux ni preni ponardopiko ĉe
solvi ĝin.
Ĉi tiu programo estas nomita pliigo.
Kaj ŝajne inicializa x entjero al 1 en linio 18.
Mi tiam postuli x estas 1.
Mi tiam aserto pliigante, pentras, pentras, punkto.
Mi tiam nomita pliigo.
Sed tiam en linioj 22 kaj 23 Mi asertas ĝi estas estinta incremented.
Mi asertas x estas nun kion ajn ĝi estas, 2 supozeble.
>> Sed tiu programo estas kalesxo.
Kio estas la problemo?
Yeah?
[Inaudible]
DAVID J. Malan: Ĝuste.
Do x estis deklarita evidente on line 18.
Tio estas ene ĉefa La frizita krampoj.
Do la simpla respondo estas, ke, nu, x ekzistas tie.
Ne ekzistas en linio 32.
Do ĉi tiu programo fakte eĉ ne kompili.
La tradukilo, kiam mi provas kompili tiun kodon, tuj krias al mi
pri kelkaj nedeklarita ensalutilo aŭ ion pri tio.
Fakte, ni provu.
Ĉi tiu estas fari buggy4.
Tie ĝi estas.
Uzo de nedeklarita ensalutilo x en linio 32.
Kaj efektive, ni estu pli eksplicita tie hodiaŭ, por ke ĉi tiu estas utila en
oficejo horoj kaj hejme.
Rimarku, ke ĝi estas iom cryptically skribita.
Sed la fakto, ke Clang havas kriis al ni, dirante
buggy4.c: 32:5, estas fakte utila.
Ĝi signifas ke la eraro estas ĉe linio 32 en karaktero pozicio kvin.
Do unu, du, tri, kvar, kvin.
Tio estas, fakte, kie la problemo estas.
Kaj ankaŭ al memoru ĉe oficejo horoj kaj hejme, mi estas bonŝanca tie.
Mi havas unu eraro.
Ĝi tuj estos relative facile ripari.
Sed se vi ricevas tutan ekranon plenan de blindiga erarmesaĝojn, denove,
rimarkas ke la ĉefundan unu povus simple esti sintomática de
la plejsupra aĵoj.
Do ĉiam persekuti viajn erarojn de supre malsupren.
Ĉar ne povus simple esti lekanto-ĉeno efekto kiu sugestas vin
havi vojon pli problemoj ol vi vere faras.
>> Do kiel ni povus ripari tion ĉi se mia celo estas pliigo x?
Kio estas tio?
Okay.
Do ni povas fari x tutmonda.
Ni prenu la fulmoklavo, ke Mi avertis pri pli frua.
Sed heck, ni nur bezonas rapidan solvon.
Do ni nur diros int x tien.
Tio faras x tutmonda.
Do nun ĉefa havas aliron al ĝi.
Kaj pliigo havas aliron al ĝi.
Kaj tial mi iros antaŭen kaj kompili tiun nun.
Faru buggy4, Enter.
Ŝajnas kompili nun.
Ni kuras buggy4, kaj ĝi similas al reale funkcias.
Nun tio estas unu el tiuj aĵoj -
faru kiel mi diras, ne kiel mi faras, kiel mi ĵus faris ĉi tie.
Ĉar ĝenerale, niaj programoj ricevos multe pli interesa kaj
multe pli longa ol tio.
Kaj se via solvo al la vivo la problemoj estas nur ah, metu ĉiujn
variabloj ĉe la supro de via dosiero, tre rapide fari programojn akiri
horrifically malfacile sukcesas.
Ĝi alvenas pli malfacile pensi novajn variablo nomoj.
Ĝi alvenas pli malfacile kompreni kion variablo faras kion.
>> Kaj tiel ĝenerale, ĉi tio ne estas bona solvo.
Do ni faru ĉi pli bone.
Ni ne volas uzi malloka variablo tie.
Mi volas pliigo x.
Do mi povis evidente -
ĉe la fino de la tago, estas speco de stulta historio ĉar ni nur faru tion.
Sed se mi ne sciis pri tiu operatoro, aŭ mi ne permesis al
ŝanĝi ĝin en ĉefa mem, kiom ajn mi povus apliki Ken super ĉi tie, ĉi
tempo ne kubo sed al pliigo?
Kiel mi ŝanĝu tiun aferon ĉi tie?
Yeah.
[Inaudible]
DAVID J. Malan: Konsentite, bona.
Do kial mi ne pasas en x?
Kaj tiam anstataŭ redoni ĝin, kial ne mi simple fari reveno x + 1?
Nun, paro pli aĵoj devas ŝanĝi ĉi tie.
Mi estas sur la ĝusta vojo.
Kion alian mi bezonas Tweak?
Iu alia.
Yeah?
[Inaudible]
DAVID J. Malan: Mi bezonas ŝanĝi la reveno tipo de pliigo
ĉar ĝi estas ne neniigas.
Void signifas nenion'S esti revenis.
Sed klare, nun ĝi estas.
Do ĉi devas ŝanĝi al int esti konsekvenca kun kion ajn
Mi vere reveni.
>> Nun io alia estas ankoraŭ kalesxo tie.
Yeah?
[Inaudible]
DAVID J. Malan: Do mi bezonas pliigo x?
[Inaudible]
DAVID J. Malan: Ha, do mi bezonas por pasi x.
Do mi bezonas fari ĉi tie.
Do la prototipo, mi devas ŝanĝi ĉi tien.
Do tiu havas igi int.
Tiu devas esti -
hmm.
Mi vere havas cimon cxi tie.
Ni fiksas ĉi tiu unua.
Kion tio efektive estus?
Do ĝi estas alvenis al esti int ion.
Ĝi povus esti x.
Sed sincere, se oni komencas nomi cxiujn el viaj variabloj x, ĝi estas tuj akiri
malpli kaj malpli klara kiu estas kiu.
Do ni nur arbitre elekti alian nom-normo por mia
helpanto funkcioj, la funkcioj mi skribas.
Ni nomas ĝin.
Aŭ ni povus nomi ĝin - ni nomas ĝin even_number esti eĉ pli eksplicitaj.
Tial mi devas reveni ajn la nombro estas plus 1.
Kaj nun mi devas ŝanĝi unu alia afero tie supre kaj unu
alia aĵo ĝis ĉi tie.
Kion mi devas ŝanĝi la linion 21 unuan?
Mi devas atribui ĝin al x.
Do mi ne povas simple nomi pliigo x.
Mi bezonas memori la respondon per ŝanĝanta la valoro de x sur
la maldekstra flanko.
Kaj eĉ se x estas nun en la maldekstra kaj dekstra, jen tute delikata ĉar
dekstre mana flanko gets ekzekutita unua tiam gets plopped en la maldekstra
mano afero, x en ĉi tiu kazo.
Kaj poste laste, ĉi tiu estas facila riparas nun.
Tiu devus ĝuste kongruas kio estas malsupre.
Int nombro.
>> Bone.
Do tuta amaso de ŝanĝoj por vere stulta funkcio.
Sed reprezentanto de aĵoj kiujn ni pli kaj pli volas fari.
Do fari buggy4.
Mi ŝraŭbita supren ie.
Ho mia Dio.
Kvin erarojn en, kiel, ses-linia programo.
Do kio estas malĝusta en linio 18, karaktero 5?
Bone.
Do mi devas deklari ĉi int.
Bone.
Do ni vidas, tuta aro da aliaj eraroj.
Ho mia dio.
19, 18, 21.
Sed denove, ni nur liberigi la ekrano -
Kontrolo L tie - kaj re-run Clang.
Do kvin problemoj estas fakte nur tiu.
Do nun ni kuras buggy4, Enter.
Whew.
x estas incremented ĝuste.
>> Bone.
Demandojn pri kiel pliigo nombroj?
Yeah?
Parolanto 2: Kial vi povas simple ŝanĝi x al nombro en la variablo
enoficigi kaj rekonos kion vi signifas?
DAVID J. Malan: Bona demando.
Kial mi povas simple ŝanĝi x al nombro kaj la programo scios
tuj?
Do denove, pensi pri tio kiel ĉi abstraktado.
Do, se mi estas ĉefa kaj Ken estas incremental, sincere, mi ne zorgas
kion Ken nomas lia iPad.
Mi ne zorgas kion li nomas ion, kio devas vidi per sia efektivigo
de ĉi funkciojn.
Do ĉi tiu estas efektivigo detalo kiun mi, ĉefa, ne
devas maltrankviligas.
Kaj tiel simple ŝanĝi ĝin konsekvence ene de la funkcio, nombro ĉi tie
kaj nombro ĉi tie, estas ĉio prenas tiom longe kiom mi recompilar.
Estas iel kiel se vi pensas pri - multaj el ni, tiuj de vi kun ŝoforo
licencojn kiuj jam forpelis, aŭ se vi eĉ pelita en aŭto -
la plimulto de ni ne havas ideon kiom aŭto laboras sub la kapuĉo.
Kaj laŭvorte, se vi malfermas la kapuĉo, la plimulto de ni - mi mem komprenis -
ne tuj vere scias kion ni rigardis.
Ia kiel vi eble sentas kun stuff kiel tiu nun.
Sed ni ne devas vere gravas kiom la aŭto funkcias.
Ni ne devas prizorgi kion ĉiuj la bastonojn kaj piŝtoj kaj kabloj ene de
la aŭto fakte faras.
>> Do iu kiel vi nomas la piŝto ne gravas
tie en ĉi tiu kazo.
Sama ideo.
Yeah?
[Inaudible]
DAVID J. Malan: Se estis pli uzoj de la variablo XA antaŭ momento,
vi, la programisto, devus ŝanĝi ilin ĉie.
Aŭ vi povus laŭvorte do Dosieraj, Menuo, kaj tiam Trovi / Replace,
io simila.
Sed vi tuj devas fari tiujn ŝanĝojn mem.
Vi devas esti konsekvenca.
[Inaudible]
DAVID J. Malan: Aparta ordon kiel ĉi tie?
Se ĉi tiu estis int alia numero?
Yeah.
Do sekve gravas kiam vi vokas la funkcio.
Do se mi nomis pliigo tie kun iu komo ion,
ekzistas rekta surĵeto.
La unua variablo, kia ajn ĝi estas nomata, estas farita kopio de la unua
argumento super tie.
Pardonu, tiu devus ne esti parentezo.
La dua argumento regiono kun la dua.
>> Do ordo, jes, aferoj.
Bone.
Pardonu mi prenis longan vojon por atingi tien.
Aliaj demandoj?
Bone.
Do ni vidu, se ni ne povas pentri bildon de kio vere okazas
tie sub la kapuĉo, por tiel diri.
Do ĉi tiu estas ortangulo, kiuj povus reprezenti via komputilo la memoro.
Do eĉ se vi ne havas ideon kiom memoro funkcias aŭ kiel RAM verkoj, almenaŭ
supozi ke vi havas aroj da ĝi ĉi tiuj tagoj.
Vi havas megabajtoj ĝi.
Vi havas gigabajtoj de ĝi.
Kaj ni scias el semajno nulo kiu bajto estas precize kion?
8 bitoj.
Bone, do 8 nuloj kaj aĵoj.
Do se via komputilo havas koncerton de RAM, du koncertoj de RAM tiuj tagoj, vi havas
miliardo aŭ 2 miliardoj bajtoj de memoro, aŭ proksimume 8 milionoj aŭ 16 miliardoj
bitoj, ene de via komputilo.
Nun kontraste kun la iom hareca Willy Ekzemple, ne estas magneta eroj
tipe plu.
Ĉiufoje, en tekkomputiloj almenaŭ, estas solida stato diskoj, SSDs, ke
simple ne movante partoj.
Estas ĉio elektronika.
Estas ĉio elektro bazita.
Do opinias, tamen, ĉi tiu rektangulo kiel ĝuste reprezentas la unu aŭ du
gigabajtoj de memoro kiun vi havas.
>> Do ĝi eron de memoro.
Nun la mondo de komputiko havas ia dispartigita sur pecoj de
memoro fari malsamajn aferojn.
Do ekzemple, se tio estas via komputilo RAM - kiel sugestita de la
rektangulo tie - rezultas ke per konvencio, sur la supro de via memoro RAM, tiel
paroli, estas ĝenerale kion nomas tekston segmento.
Tiuj estas la nuloj kaj aĵoj kiujn vi kompilis.
Do kiam ni rigardis sub la kapuĉo je kioma a.out estas, ĉiuj
la nuloj kaj aĵoj -
kiam vi kuros programo, tiuj nuloj kaj aĵoj estas ŝarĝitaj de via malmola
drive en ion nomita RAM.
Kaj en la memoro RAM, ili estas metitaj en la pinto.
Nun dume, vi havas aliajn aferojn.
Inicializado datumoj, uninitialized datumoj.
Tiuj du swaths de memoro referi al tutmonda variabloj, kiuj
vi ne ofte uzas.
Sed kelkfoje, se vi faras, ili finas tie ankaŭ.
Tiam ekzistas iu alia materialo.
Medio variabloj, kiuj ni ne pasigas multe da tempo plu.
Sed tiam du gravaj aĵoj kiuj revenos tra tiu
semestro, pilo kaj amaso.
>> Do plej de via komputilo la memoro estas rezervita al la kuri programon por
iu nomita la pilo kaj iu nomis la amaso.
Kaj ni ne tuj paroli pri la amaso hodiaŭ, sed ni volas
paroli pri la stako.
Kaj la pilo celas sorĉvenigi la vida de kiel la manĝejo
faruno pletoj en Mather Domo, aŭ kien ajn vi hazarde estas, kie la
manĝejo bastonon purigi ilin ĉiutage.
Ili pilo ilin el planko plu supren.
Kaj simile en memoro, estas ĉi ideon de meti ion sur
pilo, metante ion sur pilo, metante ion sur pilo.
Kaj kion ni celas diri per tio?
Nu, ni zomi en nur la malsupra duono de ĉi tiu pentraĵo, via komputilo
RAM, por proponi la sekvan.
Rezultas, ke kiam vi kuros programon kiel a.out aŭ saluton, estu
la programo estas ke vi skribis,
denove, tiuj nuloj kaj aĵoj estas ŝarĝitaj de via malmola disko - kiu estas
longtempe stokado, restas tie ĝis kiam vi tiras la plug -
ŝarĝita en RAM.
RAM estas pli rapida ol malmolaj diskoj.
Estas malgranda ol malmolaj diskoj.
Sed estas kie programoj vivi dum vi kuras ilin.
>> Do vi duoblan klaku programon sur Mac aŭ PC - ĝi estas ŝarĝita de
malmola disko en RAM.
Tuj kiam ĝi estas ŝarĝita en RAM, la nuloj kaj aĵoj iru ĉe la vojo pinto, la
tiel nomata teksto segmento.
Sed tiam tuj kiam via programo fakte komenciĝas kurante, la ĉefa
funkcio estas nomita.
Kaj ĉefa, kiel ni vidis, ofte havas lokajn variablojn.
Kaj ĝi havas ints kaj kordoj kaj signoj kaj similaj.
Do, se via programo, kiun vi skribis aŭ la programo, ke vi havas
duobla clicked uzis iujn variabloj ene de ĉefaj, ili finas en la
fundo de via pilo de memoro, por tiel diri.
Nun pli konkrete, kion signifas ĉi reale signifas?
Tiu simple volas diri ke se ni tuj kalkuli la aferojn -
se ni iris al la numero la bajtoj de RAM en via komputilo, rimarki ke
povas esti tiu bajto nombro nulo.
Tio povas esti byte numero unu, du, tri, kvar, kvin, ses, ĉiuj
la vojo supren al ŝati -
2 miliardoj estus tuta vojo ĝis tie supre.
Do alivorte, kiam ni parolas pri RAM aŭ memoro en terminoj de bajtoj, ĝi
nur signifas, ke iu decidis kion prikalkulu ĉiu el
tiujn pecojn de memoro.
>> Do, kiam vi bezonas 32 bitojn por int, aŭ vi bezonos 8 bitoj por char, kie
do ili finas en memoro?
Nu koncepte, ili nur finos je la fundo de tiu
afero nomita la pilo.
Sed kio estas interesa nun estas kiam ĉefa nomas funkcio.
Supozi funkcio nomita foo, ĝuste arbitran nomon.
Kio okazas estas ĉefa estas ĉe la malsupro de tiu pilo de memoro.
Foo nun estas metita sur ĉefa en memoro.
Do iu loka variabloj kiuj foo jam fini ia koncepte supre
tiuj en ĉefa.
Se foo nomas alian funkcion nomita trinkejo, tiuj variabloj fini ĉi tie.
Se trinkejo nomas ion alian, jen, jen, tie ĉi.
Do kio estas interesa pri kurante programo estas ke kiel vi nomas funkcioj,
kaj kiel tiuj funkcioj vokas funkciojn, kaj kiel tiuj funkcioj vokas funkciojn,
vi konstruos ĉi pilo de funkcioj en memoro.
Kaj nur unu fojon funkcio redonas vi komencu akiri tiu memoro dorso.
Do unu el la plej facilaj manieroj por kuri el memoro en komputila programo estas
skribi funkciojn kiuj neniam revenus.
>> Do ekzemple, ni pruvi tiel kun
intence kalesxo programo.
Lasu min antaŭeniri kaj ne # include , int main (void).
Kaj mi tuj faros dum (2> 1), kio verŝajne ne cxiam
ŝanĝi nin.
Kaj lasu min iri antaŭen nun kaj faros printf.
Efektive, tiu tuj estos malpli vide interesa.
Ni faras tion.
Por int (i = 0; i> 0).
Ni faras tiun eraron, mi + +.
Kaj ni ne printf tie.
Ni praktiki kion mi predikis.
Ni havas metodon tie.
Void ĥoro, kaj ni diru int i.
Kaj poste mi iros diri, printf -
oh, ni faros tiun pli interesa.
Ni fakte ne presi ion ajn.
Ni nur faru tion.
Ĥoro (i).
>> Bone.
Do ĉi tiu estas kalesxo ĉar kial?
Mi faras ĉi tion dum mi iros, ĉar la programo ne vere fari ion
de intereso.
Sed tio ne estas la celo.
La celo estas skribi programon kies ĉefa funkcio faras kio, ŝajne?
Voku mem.
Kaj efektive, ni ne bezonas la ciklo.
Ni eĉ simpligi ĉi nur por ne perdi antaux vere la
fundamenta eraro.
Ĉefa alvokoj ĥoro kanti iujn ĥoro.
Tiam mi faris iun stultan, kaj mi devis ĥore alvoko ĥoro ĉar mi supozis
iu alia tuj apliki ĝin eble.
Kaj nun ĉi tio ne tuj kompili ankoraŭ.
Mi bezonas fari kion?
Mi bezonas la prototipo, memoru.
Do mi bezonas havi ĝis tie dezerta ĥoro (int i);.
>> Do nun, se mi iros tien -
fakte, ni uzos la pli granda fenestro.
Ni iru antaŭen kaj fari ĥoro.
Uzo de neidentigita declarer i.
Ho, tio estis stulta.
Ni ne bezonas la argumento.
Ni nur faru tion.
Wish ni komencis tiun vojon.
Estus multe pli facile programo por skribi.
Do tie.
Nun ni transiros al mia fina fenestro, re-run Clang.
Kaj tie ni iru.
Tio estis vere rapida.
Kio fakte ĝuste tio okazis, kvankam?
Nu, nun mi aldonos la impreso linio, do ni povas vidi.
Do mi diru printf, diru, mi estas en ĉi tie.
Konsentite, neniu variabloj, ni lasos ĝin tiel.
Lasu min re-ruli fari.
Lasu min re-run ĥoro.
Kaj venu plu.
Konservu tuj.
Kiel flanken, kial ĝi ne frakasis yet?
La segmentación kulpo okazis super rapida antaŭe.
[Inaudible]
DAVID J. Malan: Ĝuste.
Do ĝi prenas tempon por presi.
Ĝi simple prenas pli da laboro sur la komputilo parto.
Kaj tie ĝi estas.
Segmentación kulpo.
>> Do rimarki kiom rapida programoj kuri.
Se vi ne presi ion, super rapida.
Sed ni ankoraŭ havas ĉi segmentación kulpo ĉar tio, kio okazas?
Nu, se vi pensas pri kiel via komputilo la memoro estas jalonada, ĉi
hazarde estas ĉefa.
Sed ĉi tie -
ni simple nomas tion ĥoro, kaj ni nomas tiun refrenon.
Kaj nun se mi faras mian estetiko pravas, tio estas nur intencas diri ĥoro,
koruso, hxoro, koruso, ĥoro, koruso, ĥoro, ad nauseum.
Kaj fine, kio okazos?
Se la granda bildo laŭvorte estas tio, kio ĵus okazas koncepte?
La pilo overruns la amaso.
Aŭ malbona, vi simple invadita ĉio, inkluzive de la teksto segmento, kiu estas
la nuloj kaj aĵoj kiuj reprezentas vian programon.
Unuvorte, tiu estas nur super, super malbona.
Ĝuste?
Via programo spiraled el kontrolon.
Vi uzas vojon pli memoro ol vi intencis ĉiuj pro stulta
eraro, en ĉi tiu kazo.
Aŭ en tiu kazo, tre intence faris funkcio kiu nomas sin.
Nun ĉi tio ne estas ĉio malbona.
Funkcioj nomante sin reale havas grandan potencon
kiam vi uzas ĝin ĝuste.
Mi ne uzis ĝin ĝuste ĉi tie.
>> Do tiu estas ne ĉiuj malbonaj.
Sed la fakto, ke mi neniam vere halti nomante min estas fundamenta
malforteco tie de tiu programo.
Do kie ni iras kun ĉio ĉi?
Nu, kio vere okazas?
Kiam mi vokas la pliigo funkcio, kiel ni faris en tiuj ekzemploj,
Mi havas valoro kiel 1, ke mi pasas in
Mi pasas en kopio de la numero unu.
Do la sekvan okazas.
Do ni iru en la pliigo ekzemplo.
Kaj tiu viro rajton super tie.
Do jen kio reale okazas.
Kiam mi nomas pliigo, kaj mi pasas en x, pictóricamente kio estas
okazas ĉi tie estas tio -
se mi havas la valoron de 1 stokitaj tie, kaj mi vere nomas pliigo, kiu
oni nun nomas ĥoro -
yeah, ke tio ĵetante la aferon ĉi tie.
Do ni nomas tion pliigo.
Kaj ni ne scias kio estas tiu sekva funkcio tuj estos.
Do kio vere okazas estas ĉi tie ie en ĉefa, mi havas eron de
memoro kiu stoki la nombro 1.
Kiam mi vokas pliigo, Mi uzas alian eron de memoro, sed nun mi
havas la kopio de 1.
Kiam mi pliigo tiu valoro, ĉi iĝas 2 - hide skribita en la
ekrano tie.
Sed tiam, kio okazas tuj kiam pliigo revenas?
Tiu memoro nur gets enmanigis al la mastruma sistemo, kiu signifas ĉiuj
vi faris estas nenio utila.
Kiu estis origine enhavis en ĉefa estas ankoraŭ efektive tie.
>> Do kie ni iras kun tio?
Nu, tio rezultas ke en memoro vi havas ĉi malantaŭo al malantaŭo vico de
bajtoj ke vi povas meti aĵojn in
Kaj ĝi rezultas ke ni jam vidis iun kiu konsistas meti
aĵoj malantaŭo al malantaŭo al malantaŭo al malantaŭo.
Kio estas ĉeno, bazita en semajno kaj nun semajno du?
Do ĝi estas simple kolekto de karakteroj.
Do rezultas, same kiel vi povas meti numerojn en memoro, simile you can
metis karakteroj en memoro.
Kaj unufoje ni komencu meti signojn en memoro malantaŭo al malantaŭo al malantaŭo al
dorso, ĝi rezultas ke uzante la plej simplaj aferoj kiel por buklo aŭ
momenton buklo, ni povas persisti -
de maldekstre al dekstre super la gravuloj ĉenon -
kaj komenci massaging ilin en malsamaj karakteroj aro.
Al povus igi B. B povus igi C. Por ke finfine, ni povas preni
English frazo kiu fakte havas sencon kaj konverti ĉiu de tiuj
literojn unuope per promenante tra nia komputilo memoro lasis al
rajto vere kodi.
>> Do ni prenu nian kvin minutoj ripozon ĉi tie, kaj kiam ni revenos, ni instruos vin
komenci ĉi procezo de grimpadi informo.
>> Bone.
Do antaŭ ol ni plonĝi en iuj kripto kaj tion nomis arrays, lasu min
paŭzo por ajna demandoj ĉar mi sentas min vere ia malklara kelkaj el
tiuj temoj.
Do ni ripari nun se ni povas.
Do ni nur parolis pri reveno valoroj.
Ni parolis pri argumentoj.
Kaj ni parolis pri tiu nocio, kiun ni revenos al la semajnoj
venu, de viewing memoro entute amaso de tiuj modular
pletoj, por tiel diri.
De malsupre supren, tia ke ĉiu pleto ke gets surmetis la pilo reprezentas
funkcio ke tio aktuale estas vokita.
Demandojn?
Do kiel pri - mi provos demandi demandon.
Mi gardas difektante tion, sed nun it's - you've ĉiuj vidis la knabon vizaĝo.
Do ni revenu al tio.
>> Do mi demandas tien.
Lasu min simpligi ĉi reen al kio estis antaŭ kelkaj niaj antaŭaj Q & A.
Kaj la fakto ke pliigo havas malferma parentezo, int nombro, fermita
parentezo.
Kion int nombro reprezenti?
[Inaudible]
DAVID J. Malan: An argumento.
Konsentite, sed kio estas argumento?
[Inaudible]
DAVID J. Malan: Pardonu, kio estas tio?
Parolanto 3: Io sekvinberoj in
DAVID J. Malan: Okay.
Do iu kiu pasas in
Kaj pli ĝenerale, estas nur la enigo.
Se vi skribas funkcio kaj ke funkcia celo en la vivo estas plenumi
io iom malsama ĉiufoje kiam vi uzas gxin, tiam la sola maniero por
ke tio okazas vere ŝajnus esti provizi ĝin per enigo por ke ĝi
povas fari iun malsama kun tiu enigo ĉiufoje.
>> Do vi bezonas specifi du aferoj kiam funkcio prenas enigoj.
Vi devas specifi la nomo kiun vi volas doni al tiu enigo, simple nur por
Via propra komforto por ke vi povas referi al ĝi en la funkcio kiun vi
mem skribas, kiel mi faris tie en linio 32.
Sed vi ankaŭ bezonos specifi lia tipo ĉar C estas komputila programlingvo
ke nur postulas
ke se vi volas variablo, vi devas diri al la komputilo kio
datumoj tajpu ĝin estas,
en granda parto por ke ĝi sciu kiom da bitoj por
destini por tiu variablo.
Ĉar ĝi povus esti ses -
sorry, ne estos ses.
Ĝi povas esti 16.
Ĝi povas esti 8.
Ĝi povas esti 32, eĉ 64.
Sed la komputilo bezonas scii.
Nun la int sur la maldekstra flanko reprezentas kio, per kontrasto?
[Inaudible]
DAVID J. Malan: Kio estas tio?
[Inaudible]
DAVID J. Malan: La tipo de la funkcio kaj, pli specife, la
tipo de lia eliro.
Ĝuste.
Do dum la aferon en krampoj reprezentas lian enigo, se iu, la
aferon al la maldekstra reprezentas sian produktadon.
Kaj en ĉi tiu kazo, pliigo ŝajne redonas int.
Kaj tiel int estas la reveno tipo de ĉi tiu funkcio.
>> Kion ĝi signifas por reveno?
Laŭvorte, vi uzas la ŝlosilvorto reveno.
Kaj tiam se kion vi reveni al la rajto de la ŝlosilvorto estas
entjero, tiam tio estas ja kohera kun kion ni promesis.
Vi ne povis fari ion kiel tiu -
saluton, mondo -
ĉar tio estas ĉeno.
Evidente ne estas entjero.
Do mallonge, la ŝarĝo estas vere kontraŭ ni, la programisto, esti specifa kiel
al kio ni reveni kaj tiam efektive irad reveni.
Kaj poste fari tad pli klara la kunteksto -
tie li estas denove.
La kunteksto -
granda surprizo venon nur momento.
La kunteksto tie nun estas, ke via komputilo memoro estas, denove,
gigabajto, du gigabajtoj, kiom.
Eble estas pli.
Eble estas malpli.
Sed la komputilo vidas ĝin kiel havanta malsamajn sekcioj.
Iu iras tien.
Ion alian iras tien.
Malsamaj stuff iras en la mezo.
Kaj hodiaŭ, ni nur komencus diri ĉi tiu historio.
>> Sed ni revenos al ĉi tempo.
Ĉar nun, la sola peco de memoro ni vere zorgas pri la teksto segmento
ĉar tio ĝuste reprezentas la nuloj kaj aĵoj
ke Clang havas outputted.
Do, kiam vi kuris de komando en la klavaro kiel a.out, aŭ vi duobla
klaku ikono en Mac OS aŭ Vindozo, via programo estas ŝargita de via fiksita
forpelos en RAM.
Kaj ĝi estas plopped supre de via komputilo RAM, por tiel diri.
Nun dume, kiel via programo komencas kuri kaj ĉefa gets vokita en la
programo vi skribis aŭ la programo Microsoft aŭ Apple skribis, iu ajn el liaj
lokaj variabloj fini tie malsupre sur la fundo de via komputilo memoro.
Sed se ĉefa nomas alian funkcion kiu mem ne havas variabloj aŭ
argumentojn, ili finas super ĝi.
Kaj se tiu funkcio vokas ion, ili finas super ĝi,
super ĝi, super ĝi.
Kaj nur unu fojon funkcio estas farita ekzekuti faras la pilo de pletoj, do
paroli, komencas akiri pli kaj pli malalte.
Kaj tio estas tiam, en vortoj, klarigas kial, kiam vi nomas kubo -
aŭ vi nomas pliigo -
vi pasante en kopio de la valoro.
Kaj kion tio signifas pictóricamente estas ke vi laŭvorte skribi la
numero 1 en alia parto de memoro, ŝanĝante ke 1 al 2, en la kazo de
pliigo -
aŭ al 8, en la kazo de kubo -
kaj poste ĵeti ke memoro for kiam la pliigo aŭ la kubo
funkcio redonas.
>> Demando.
[Inaudible]
DAVID J. Malan: Kie - tutmonda variabloj estas stokitaj en kio estas
aktuale nomita inicializado datumoj aŭ uninitialized datumoj.
La diferenco estas, se vi havas malloka variablo, kaj vi atribuas ĝin
tuj valoron kun la egalaj subskribi, ĝi finas ĉe la pinto.
Kaj se vi simple diru int x punktokomo sen valoro, ĝi finas iomete
pli malalta en RAM simple konvencio.
Aliaj demandoj.
Bone.
>> Do ĉi tiu bildo revenos kiam ni atingos pli potenca, per kio ni povas fari
kun la komputilo.
Sed nuntempe, ni havas mallongan intro al ĉifriko, specifa tipo de
ĉifriko kiu ne solvas ĉiujn mondproblemojn sed ne solvi
kelkaj el ili.
En ĉi tiu kazo tie, ni havas ion nomita sekreta ŝlosila ĉifriko.
Kaj sekreta ŝlosila ĉifriko, kiel la nomo sugestas, ĝi derivas ĝia sekureco
de sekreta.
Do ekzemple, se vi estas denove en grado lernejo kaj vi pasi
iom sekreta amleteron al la knabo aŭ knabino vi premante sur - se vi
volis preterpasonta tra la spektantaro, vi probable ne skribi
tia noto en angla aŭ kion ajn via denaska lingvo estas; prefere vi
povus kodi ĝi.
Aŭ vi povus simple sendi ilin tekston mesaĝon tiuj tagoj.
Sed vi eble vere pasi ilin noto tra la klasĉambro.
Kaj fari tion sendanĝere, en tia maniero, ke viaj amikoj kaj la majstro
ne scias kion vi skribas, vi eble supreniru kun sufiĉe simpla
algoritmo -
juna kvankam vi eble -
justaj levi la vortoj.
Do anstataŭ skribi A, vi povus skribi B. Anstataŭ B, vi povus skribi
C. Anstataŭ C, vi povus skribi D, ktp.
Aŭ vi povus veni supren kun pli kompleksa traduko de literoj
al malsamaj literoj.
Sed la ruzo estas la knabo aŭ knabino, al kiu vi sendas ĉi noto bezonas
scias ion.
Kiu estas kio, evidente?
Kiel, kion via sekreto estas.
Kiel, kio estas ke surĵeto inter Kiel kaj Bs kaj C kaj D?
Ĉu ĝuste aldonante, por tiel diri, por ĉiu el la literoj iri
A al B, B al C?
Ĉu pli kompleksa ol tio?
Do vi kaj via crush bezonas havi tiun sekretan informon.
Sed estas speco de catch-22 ĉi tie.
Se ĉi estas la unua fojo vi sendas tiun amleteron tra la
klaso, kiel estas tiu knabo aŭ knabino tuj scias, kion la sekreta eĉ estas?
Do sekreta ŝlosilo kripto ne solvas ĉiujn mondproblemojn.
Kaj estas vere rilato kiu ni revenos al cele
semestro la fino.
>> Simile, havas neniu el ni probable iam sendis -
simile, ĉu la plimulto de ni ne konas iun kiu funkcias, ekzemple, ĉe
Amazon.com.
Kaj tamen, multaj el ni probable aĉetis frandajxojn cxe Amazon.com.
Kaj ni estis instruitaj por supozi, ke tiuj TTT-komerco
transakcioj estas sekura.
Ĝuste?
La URL probable diras https.
Estas eble stulta iom pendseruro ikono ie.
Ekzistas ia ĉifriko certigi viajn kreditkartajn detalojn
inter vi kaj Amazon.com.
Kaj tamen, se ĉifriko engaĝas sciante iu sekreta, kaj tamen mi ne
scias neniu en Amazonio, kaj mi certe ne aranĝis ian
sekreta kun iu en Amazonio, kiom estas mia komputilo aŭ mia retumilo faras tion?
Nu, rezultas ekzistas aliaj specoj de ĉifriko aro kiun solvi
tiun problemon.
Sed por hodiaŭ, ni enfokusigas la simpla, kie vi povas aranĝi en
antaŭi scii iu sekreta, kiel plus 1 aŭ iu surĵeto inter Kiel kaj Bs.
>> Kaj la procezo de ĉifriko ĝenerale engaĝas ĉi.
Vi havas iujn simpla teksto, reprezentita tie maldekstre.
Vi kuras ĝi tra ia algoritmo aŭ proceduro
por encrypting ĝin.
Eble tio estas nur A iĝas B, B iĝas C. Kaj tiam vi finos kun
kodita teksto.
Dume, unufoje vian crush ricevas la sekreta mesagxo, li aŭ ŝi devas tiam
deĉifri ĝin ĝenerale dorsflankanta ke algoritmo por tiel akiri
apogi la simpla teksto.
Nun estas fizika personigoj de ĉi.
Ekzemple, jen estas iom sekreta deĉifrilo ringo.
Kaj jen estas ringo en la senco ke ekzistas du diales tie.
Sur la ekstera periferio de tiu afero, estas literoj A tra Z,
kvankam ili estas en hazarda ordo.
Kaj en la interno, ekzistas efektive iuj nombroj, tia ke kun ĉi
ringo, vi povas ia turni la ekstera sed ne interne por laŭliniigi
nombroj kun literoj.
Kaj en la klipo vi baldaŭ vidos - kelkaj el kiuj eble vi vidis 24/7
ĉirkaŭ la kristnasko de filmo nomita Al Kristnasko Story.
Vi vidos ke iom Ralphie estis tiel avida por elkompreni kiel iom orfa
Annie la sekreta mesaĝo estis al li, ke ĝi estis komunikita, mi kredas, en la
formi el nombraj mesaĝojn sur seria skatolo.
Kaj vi havus por amasigi ĉiuj malgrandaj kartoj kiuj venis
en la cerealo skatolo.
Vi devis sendi ilin in
Vi devis reiri la sekreta deĉifrilo ringon, por ke vi povas finfine kompreni
el kio la surĵeto estas inter literoj kaj numeroj,
aŭ literoj kaj literoj.
Do mi donos al vi mallongan klipo de A Christmas Story motivi pset 2 kaj
nia diskuto, tre frue, de tabeloj.
Do jen ni havas Ralphie.
>> [Vídeo]
-Estu sciate al ĉiuj kaj sundry ke Ralph Parker maniere nomumis
membro de la Malgranda Orfino Annie Sekreta Rondo kaj povas postuli la tutan
la honoroj kaj profitoj okazanta tio.
-Subskribita, Little Orphan Annie.
Legalizita, Pierre André!
Inke!
Honoroj kaj profitojn, jam en la aĝo de naŭ.
Venu, ni iru sur ĝi.
Mi ne bezonas ĉion, kion ĵazo pri kontrabandistoj kaj piratoj.
-Aŭskultu morgaŭ nokte por la konkludante aventuro de La Nigra
Pirato Ŝipo.
Nun estas tempo por Annie la sekreta mesaĝo por vi membroj
de la Sekreta Rondo.
Memoru, infanoj, nur membroj de Annie La Sekreta Rondo povas deĉifri
Annie la sekreta mesaĝo.
Memoru, Annie estas dependanta sur vi.
Ŝanĝu vian pingloj al B2.
Jen la mesaĝo.
12, 11 -
-Mi estas en mia unua sekreta kunveno.
-14, 11, 18, 16 -
-Pierre estis en granda vocxo nokto.
Mi povus diri, ke ĉi tiu nokto la mesaĝo estis vere grava.
-3, 25.
Tio estas mesaĝo de Annie sin.
Memoru, ne diru al neniu.
-90 Duaj poste, mi estas la sola ĉambro en la domo kie knabo de naŭ
povis sidi en privatecon kaj malkodi.
Aha, B. Mi iris al la sekva.
E. La unua vorto estas esti.
S. Ĝi venis pli facile nun.
U.
-Ho, venu, Ralphie.
Mi devas iri.
-I'll be right sube, ma.
-Gee Whiz.
-T, O. Nepre.
Nepre kio?
Kio estis Little Orphan Annie provas diri?
Nepre kio?
-Ralphie!
Randy has got to go.
Ĉu vi bonvolos veni el?
-Bone, ma.
Mi tuj eliris.
-Mi ricevas pli proksime nun.
La streĉiĝo estis terura.
Kio estis tio?
La sorto de la planedo povas pendi en la pesilo.
-Ralphie!
Randy havas jam iri.
-I'll be right out, por laŭte ploris.
-Gee, preskaŭ tie.
Miaj fingroj flugis.
Mia menso estis ŝtalo kaptilo.
Ĉiu poro vibris.
Estis preskaŭ klara.
Jes, jes, jes, jes.
-Nepre trinku vian Ovaltine.
Ovaltine?
Al crummy komerca?
Filo de ĉiesulino.
[FINO vídeo]
>> DAVID J. Malan: Do ni havas ĉifriko.
Do kiel en komputilo ni povas iri apliki aŭ
reprezentas aferojn tiel?
Nu, ni bezonas maniero de esprimi nin iom pli flekse ol
nia variabloj tiel malproksime permesis.
Ni havis ints.
Ni havis signoj.
Ni havis flosas kaj duoblaj kaj kelkaj aliaj.
Sed tiuj estas individuaj pecoj de memoro kiu ne vere nin permesas
esprimi aferojn kiel vortoj kaj frazoj kaj frazoj.
Ja, ni nomas tion kordoj.
Sed ni promesis ke ĉi tio estas vere nur simpligo en la CS50
biblioteko kiu ni intencis senŝeligi dorso.
>> Kaj tial ni komencu fari tion tie ĉi.
Lasu min kaj malfermu dosieron -
ĉiuj el tiuj dosieroj estas haveblaj kiel kutime en linio -
vokis array.c solvi problemon nerilataj al kordoj sed tio pentras
bildo tie pri kiel ni povus uzi iun nomita tabelo.
Tabelo estas datumtipo.
Ĝi estas tipo de variablo, de varoj, kiu havas plurajn malgrandaj datumtipoj
ene de ĝi malantaŭo al malantaŭo al malantaŭo al malantaŭo.
Do ekzemple, se ni volas skribi iom programo kiu donas al vi viajn
kvizon averaĝa por kurso kiel 50 kiu havas du kvizoj, vi povus tre facile
skribi ĉi programo - bazita eĉ en iuj de la pasinta semajno materialo -
uzante GetInt kaj paro de variabloj.
Int quiz1, int quiz2, kaj ĝi estas bela simpla.
Estas eble 10, 20 linioj de kodo, max, apliki programon kiu petas al la
uzanto por du kvizo partituroj kaj tiam komputas ilia averaĝa aldonante ilin
kune, dividanta per du, kaj poste presi la rezultojn.
Ni povus probable faras tion sufiĉe facile nun post
iu nombro de minutoj.
>> Sed la problemo estas ke supozu ke 50 Havis tri kvizojn aŭ kvar.
Supozu ke vi volis uzi la saman programon por klaso kiu havis
semajna kvizojn.
Pensu pri klaso kiu ĉiusemajne kvizojn.
Se tie estas kiel 16 aŭ tiel semajnoj en semestro, nun vi havas 16 variabloj -
int quiz1, int quiz2, int quiz3, int quiz4.
Tuj kiam oni komencas vidi ĉi redundo, ĉi kopii kaj bati
de kodo, ĝi devus komenci fari vi deziras, ke estis iam pli bona vojo.
Kaj dankeme, pro arrays, ekzistas.
Do ni faru ĉi.
Unue, lasu min enkonduki tre simpla afero, ke ni ne uzas tiel malproksime,
sed vi vidos ĝin foje en kodo.
Tio estas kio ĝenerale nomis konstanto.
Do ĝi estas konstanto en la senco ke ĉi tiu valoro neniam ŝanĝas.
La homa konvencio kiam kreante konstantan estas uzi ĉiuj ĉefurboj
literoj, nur por ke ĝi vere elstaras en via kodo.
Kaj la speciala ŝlosilvorto ke vi uzas en C estas # difini.
Do se vi diras # difini, tiam spaco, tiam la vorto, kiun vi volas uzi por
la konstanta nomo, kaj tiam la valoro de la konstanta.
Do rimarki, ĉi tiu estas malsama de asignanta ion al variablo.
Ne egala signo.
Ne punktokomo.
Tio estas kio ĝenerale konata kiel antaŭtraktilo direktivo, sed pli en
ke alia tempo.
>> Por la momento, ĉi kreas _unchanging_ valoro nomis kvizojn kies reala
nombra valoro estas 2.
Do ajn vi vidas kvizojn, kvizojn, kvizojn laŭlonge de ĉi tiu dosiero, jen
nur la numero 2.
Nun, se mi rigardas ĉefa nun, ni vidos kiel tio funkcias.
Unue, ĝi aspektas iom kamufla.
Sed estas tute stuff de semajno unu.
Demandu la uzanto por notoj.
Kiel ni faru tion?
Nu, en linio 22 -
ĉi tiu estas vere la suka parto -
Mi deklaras kaleŝego, sed ne nur sola kaleŝego.
Mi deklaras, pli ĝuste, tabelo de flosanta punkto valoroj.
Ke variablo tuj nomos gradoj, kiel implicita tie.
Sed la sola peco de nova sintakso tiam estas tiuj rektaj krampoj, la fakto
ke mi diris kaleŝego gradoj kaj poste malfermita krampo kaj poste numeron.
Rimarki, se tio ne estas konstanta, tio estas ĝuste kiel ni faris ĉi.
Tio signifas hey komputilo, donu al mi du flosas, kaj ni kolektive nomas
ili notoj.
Ĉi tiu estas en kontrasto al multe pli teda procezon kiel ĉi tio.
Flosi grade1, flosi grade2, ks.
Do tabelo nin permesas apliki tiun ideon sed multe malpli messily, en
tiel ke ni povas skribi unu linion de kodo anstataŭ, ekzemple, 16 di 16
semajno semestro.
Do mi ne volas malmola kodo 2 ĉar se vi pensas pri tiu nun
logike - supozi venontjare CS50 ŝanĝojn al 3 kvizojn anstataŭe.
Kaj mi havis la numero 2 tie.
Mi havis la numero 2 tie.
Ĝi iĝas tre teda kaj tre facile ŝraŭbo supren kaj hazarde ŝanĝi
unu valoro al 3 kaj perdi iu alia valoro de 2.
Do mi tuj anstataŭ abstrakta ĉi for kaj uzi ĉi tiu konstanta, ke kiel lia
nomo sugestas, neniam ŝanĝas.
Kaj nun, ne gravas ĉu ni havas malsamajn kvizojn ĉi tiu jaro aŭ apud mi
Nur oni devas ŝanĝi ĝin en unu loko, ĝis ĉi tie al la top.
>> Do jen ĉio konstanto estas.
Dume, la nova koncepta trajto estas tiu de tabelo.
Do la rektaj krampoj donu al mi ĉi tio multaj flosas kaj lasas min kolektive
nomas ilin gradoj tie.
Do nun ni vidu kion mi faros.
Tie en linio 24 estas la komenco de a por buklo.
Tiu estas vere nenio kaprico.
Ĝi simple uzante kvizojn anstataŭ malmola-kodita nombro.
Sed estas nenio intelekte malsamaj tie pasintsemajne.
Tiu estas nur printf.
Do printf ("kvizo numero% d de% d") ĉar mi nur volas presi donu al mi kvizon
numero unu el du kaj tiam du el du.
Do ĉi tiu estas pure estetika afero.
Sed la interesa parto nun estas en linio 27.
Por plenigi unu el la du anstataŭiloj kun flosanta punkto
valoro, vi denove uzos kvadrataj krampoj.
En ĉi tiu kazo, Mi uzas i ĉar ĉi por buklo komencis kun i egalante
kio valoro, ŝajne?
0.
>> Do en la unua ripeto de ĉi maŝo, estas kvazaŭ mi
verkis en kodo.
Sed je la dua iteracio de ĉi maŝo, estas kvazaŭ mi
verkis en mia kodo.
Sed la fakto, ke Mi uzas variablo estas perfekta ĉar, kiel la nomo
sugestas, ĝi estas varianta ĝia valoro en ĉiu ripeto.
Do mi plenigante tiun tabelo unu loko samtempe.
Kion tio tabelo aspektas?
Nu, la kialo mi tiris ĉi tiu super simpla rektangulo sur la ekrano tie
antaux estis por tiu kialo.
Tabelo estas nur eron de memoro sekvita de alia bloko de memoro,
sekvata de alia bloko de memoro, kaj tiel plu.
Do, se miaj tabelo estas de amplekso 2, en ĉi tiu kazo tie, ĉiuj mi farus per
tajpi en mia kvizo partituroj, kiel ĉi tie.
Mi akiris 100 sur ĉi tiu.
Kaj tiam mi atingis 99 en ĉi tiu.
Tiam ĉi memoro povus eĉ esti uzata ĉar mi nur demandis la
komputilo por tabelo de amplekso 2.
Tiuj kvadratoj estas ankoraŭ tie.
Ĝuste?
Vi ankoraŭ havas du gigabajtoj de RAM, eĉ se vi estas nur
petante du flosas.
Do la ideo malantaŭ tabeloj estas ke la komputilo nur prenas eron de memoro
kaj tiam apportions malgrandaj pecoj malantaŭo al malantaŭo al malantaŭo al malantaŭo.
Kaj por ke ĉio tabelo estas.
Ĝi estas bela eron de memoro, ene de kiuj vi povas meti tion.
>> Nun ĉi tio okazas al tiam faru nur iuj enuigaj aritmetiko.
Se mi rulumu malsupren tie, ĉi tiu estas kie mi tiam ankaŭ persisti super la tabelo.
Mi venis kun la sumado de ĉiuj valoroj en la tabelo.
Kaj tiam mi uzas la ronda funkcio ĉi tie por reale fari la
Resume dividita de Quizzes.
Sed lasu min skuos mian manon en tiu kiel speco de sufiĉe aritmetiko por nun.
Sed ĉiuj ke tio faras por mi finfine estas komputanta kun mezala.
Do unue kvizo plus dua kvizo, dividita per 2, kaj poste presi
ĝin kiel int.
>> Sed estu la nun transiro al malsama ekzemple nomita string1,
kiu pentras similan bildon sed uzante ŝnurojn.
Lasu min kaj simpligi ĉi por nur momento.
Kaj pardonu la deŝovon por nun.
Avizo en linio 19 de ĉi tiu ekzemplo, mi alvenas ĉenon de la uzanto.
Sed rimarki kion mi sekva faras en linioj 22 antaŭen.
Mi vere ripetanta el i supren al - kaj ĉi estas nova lertaĵo -
strlen, kordoj longa.
Tiu estas funkcio kiu venas kun C ke se vi pasas ĝin ĉenon, ĝi rakontas
vi kiom da karakteroj estas en tiu linio.
Tio estas ĉio.
La fakto ke ĝi estas strlen anstataŭ ĉenon longo estas nur ĉar ĝi estas
pli konciza.
30 jaroj, homoj ŝatis skribi aĵojn kiel koncize kiom eblas.
Do ni observis ke konvencion tie.
i + + nur signifas pliigo i en ĉiu ripeto.
Kaj nun rimarkis tion, kio estas vere interesa.
Do en linio 24, mi diras komputilo, donu al mi karaktero, ok
bitoj, kaj nomas ĝin c.
Sed kio estas tio sur la dekstra flanko dirante?
En la angla, kio faras ke reprezenti?
[Inaudible]
DAVID J. Malan: Ĝuste.
Donu al mi la unua gravulo en la tabelo.
Aŭ pli ĝenerale, donu al mi la i-a signo en la tabelo.
Kaj realigi gravas nun ke kiel komputilo sciencistoj, ni estas vere
rakontante de 0.
Vi ne havas bontrovo nun komenci fari ĉi tion.
Vi nun devas konduti konforme al la komputilo atendoj kaj
rakonti de nulo ĉar [0] tuj estos la unua
karaktero en linio.
[1] tuj estos la dua.
[2] tuj estos la tria, kaj tiel plu.
Do ĉi tiu programo, se mi kompili ĝin - tiu ĉi estas, denove, string1.
>> Do fari string1.
Kaj nun mi kuros string1 en mia fina fenestro.
Oni atendas enigo, do mi tuj tajpi en, ekzemple, Davido.
Eniri.
Kaj nun presas DAVIDO ĉiuj en malsamaj linioj ĉar
rimarki kion mi faras.
Mi presi unu signo samtempe.
Nun ni ne iru en detalo hodiaŭ en ĉi tio.
Sed mi forviŝita antaŭ momento ĉi ĉeko tie.
Rezultas, ke se la uzanto estas misbehaving, adversarial, aŭ simple
konfuzita, vi povas efektive malsukcesas doni ĉenon de iu longa.
Se vi batis la malĝustan klavon sur la klavaro, vi donu
neniu string at all.
Aŭ se vi estas malica, eble vi provu almeti en gigabajto la valoron de
eseo plenigi tiun ĉenon.
Kaj se la komputilo funkcias el memoro, ĝi rezultas ke ni iras
reiri tiu speciala valoro nomita nula.
Do nuntempe, nur scias, ke tie estas tio specialan valoron nomita nula ke
ni permesos kontroli kiam ni estas el memoro, inter aliaj aferoj.
>> Sed se mi malfermas nun string2, rimarkos unu diferenco ĉi tie.
Rimarku unu diferenco tie kun string2.
Kun string2, ĉi por buklo estas iom malsama.
Lasu min forigi la nulls tiel ke ni povas paroli pri tiuj alia tempo.
Sed kio estas malsama pri la por buklo tiu tempo?
Kaj mi povas reveni al la antaŭa ekzemplo.
Do jen versio du.
Tio estas versio unu.
Unu, du, unu du.
Do la strlen alvoko estas kie?
Ĝi estas en la unua parto de la por buklo.
Ajna pensojn sur kial mi faras tion?
Yeah.
[Inaudible]
DAVID J. Malan: Do ni ne nomas la funkcion ĉiu unuopa tempo.
Ekzakte.
Memori el por maŝojn kiuj ili estas super simpla iam vi ia
kompreni ke tiu estas la inicialización, la
kondiĉo, kaj la ĝisdatigon.
La problemo estas, ke la kondiĉo okazas sur ĉiu
ripeto de la ciklo.
Kaj tial en ĉi tiu ekzemplo tie, kio estas malbona pri la fakto
ke ĉi tiu estas mia kondiĉo?
Vi vokas strlen denove kaj denove kaj denove.
Sed iam mi tajpis en DAVID, la longo de tiu linio estas kvin.
Kaj ĝi ne tuj ŝanĝos sur ĉiu ripeto de la ciklo, ĉar la
kordoj ankoraŭ D-Al-V-mi-D. Do ĉi tiu estas aludo al kio okazos al la
pli kaj pli grava ideo konata kiel dezajno decidon, kie - nur ne
fari la komputilon fari nenecesan laboron.
>> Nun nur kiel sneak preview de pset 2, pset 2 en la eldono normo estas
tuj defias vin al reale efektivigi iujn numero de ĉifroj, iuj
numeron de ĉifrado algoritmoj, por ke vi povu ambaŭ ĉifri kaj malĉifri
sekretajn mesaĝojn, multe kiel la Ralphie tie malkoditaj.
En la hacker eldono de pset 2, ni tuj iru iom pli.
Ni tuj transdonos vin dosiero de reala komputilo sistemo kiu enhavas
tuta amaso de uzanto kaj vera ĉifrita pasvortojn, kaj la defio
por la hacker eldono tuj estos al fendi tiuj pasvortojn kaj figuro
kio ĉifriko aŭ kio sekreta estis uzita por reale
generi la pasvortoj.
Kaj ni tuj faros ĉi uzante nova funkcio ĉi tie de C ke mi donos al
vi nur demo de, konata kiel komando-linia argumentoj.
>> Do rezultas, kiel kelkaj el vi eble vidis en sekcio aŭ en lernolibroj,
ĉefa ne ĉiam devas esti malplena en krampoj.
Ĝi rezultas ke ĉefa povas ankaŭ esti skribita kiel ĉi tiu, kun du argumentoj,
argc kaj argv, kie argc estas la nombro de vortoj kiujn vi entajpas post
la programo la nomon en via komandlinio.
Kaj argv estas la reala vortoj.
Kaj kiel la rektaj krampoj tie sugestas, argv estas ŝajne tabelo.
Ĝi tuj estos ĉeno post ĉeno post ĉenon en memoro.
Do kion ni tuj povos fari, komencante per pset 2, estas
iu kiel ĉi tio.
Se mi faras argv1, kiu estas ekzemplo ni revenos al lundon, kaj kuri
ĝin, rimarki ke ĝi ne similas al fari ion ankoraŭ.
Ĝi simple presas el lia propra nomo.
Sed se mi diras adiaŭ klaso, avertas ke ĉi tiu programo ŝajne iterates
super cxiu el la vortoj kiuj tajpis ĉe la prompto.
Kaj la rimedoj, per kiuj ni gajnos aliro al vortoj, ke la uzanto havas
tajpis ĉe la prompto estas ŝanĝante ĉefa, ekde tiu semajnfino, de int
main (void) al Mez ĉefa (argc, argv).
Kaj tiel estos naskita komandlinio argumentoj.
Kaj iam vi ricevas vere kompleksa pro tio, vi povos skribi
vere trippy programoj, kiel ĉi tiu tie, kiuj iras super kaj trans
kelkaj el la funkcioj ni faris ĝis nun sed ĉiuj sufiĉe potencaj.
>> Do ni lasos tion kun tiu en la ekrano.
Kaj ni vidos vin lunde.