[Powered by Google Translate] [Ġimgħa 4]
[David J. Malan] [Università ta 'Harvard]
[Dan huwa CS50.] [CS50.TV]
>> Kull dritt, dan huwa CS50, u dan huwa l-bidu tal-ġimgħa 4,
u dan huwa wieħed mill-algoritmi issortjar iżgħar rata possibbli.
Liema wieħed ma kien li aħna biss jaraw hemmhekk?
Dan kien it-tip bużżieqa, sabiex big O (n ^ 2) + somma,
u fil-fatt aħna l-uniċi f'din id-dinja li jidhru li jafu
liema tip bużżieqa huwa jew running time tiegħu.
Tabilħaqq, dan kien intervista ma Eric Schmidt tal-Google
u eks senatur Barack Obama biss ftit snin ilu.
>> Issa, Senatur, int hawn fuq Google,
u Inħobb naħseb tal-presidenza bħala intervista tax-xogħol.
Issa, huwa diffiċli li jsibu xogħol bħala president, u int ser permezz tal-ħruxija issa.
Huwa wkoll diffiċli li jsibu xogħol fil-Google.
Aħna mistoqsijiet, u aħna jistaqsu mistoqsijiet lill-kandidati tagħna,
u dan huwa wieħed mill Larry Schwimmer.
You guys think jien kidding? Huwa dritt hawn.
X'inhi l-aktar mod effiċjenti biex issolvi xi miljun 32-bit interi?
[Daħk]
Well-
Jien sorry. >> No, no, no, no.
Naħseb li l-tip bużżieqa tkun l-mod żbaljat biex imorru.
>> Come on, li qallu dan?
Last week lura aħna ħa pawża mill-kodiċi, għall-inqas għal ġurnata,
u beda jiffoka fuq xi ideat ta 'livell ogħla u soluzzjoni ta' problemi b'mod aktar ġenerali
fil-kuntest ta 'tiftix u għażla,
u aħna introdotti xi ħaġa li aħna ma SLAP dan l-isem fuq il-ġimgħa li għaddiet,
iżda notazzjoni asintotiku, il-Big O, il-Omega Big,
u xi kultant l-notazzjoni Theta Big, u dawn kienu sempliċiment modi
jiġu deskritti l-running time ta 'algoritmi,
kemm ħin li jieħu għall algoritmu jiddekorri.
>> U inti tista 'recall li inti tkellem dwar il-ħin qed taħdem f'termini tad-daqs
ta 'l-input, li aħna ġeneralment sejħa n, ikun x'ikun il-problema jista' jkun,
fejn n huwa n-numru ta 'nies fil-kamra,
in-numru ta 'paġni fil-ktieb tat-telefon, u bdejna biex jikteb affarijiet out
bħall O (n ^ 2) jew O (n) jew O (n log n),
u anke meta l-matematika ma pjuttost xogħol barra hekk perfettament
u kien n ² - n / 2 jew xi ħaġa bħal dik
aħna minflok sempliċiment tarmi l bogħod xi wħud mit-termini ordni aktar baxxi,
u l-motivazzjoni hemm li aħna verament jixtiequ
tip ta 'triq għan li jevalwa
il-prestazzjoni tal-programmi jew il-prestazzjoni ta 'algoritmi
li fl-aħħar tal-ġurnata m'għandha x'taqsam xejn ma ', pereżempju,
bil-veloċità ta 'kompjuter tiegħek illum.
>> Per eżempju, jekk inti jimplimentaw sort bużżieqa,
jew inti jimplimentaw jingħaqdu tip jew l-għażla it-tip fuq il-kompjuter tal-lum,
kompjuter GHz 2, u inti run,
u li tieħu xi numru ta 'sekondi, sena d-dieħla hemm GHz 3
jew kompjuter frekwenzi 4 GHz, u inti tista 'imbagħad isostni li "Ara naqra, algoritmu tiegħi
issa huwa darbtejn malajr, "meta fir-realtà dan huwa ovvjament mhux il-każ.
Huwa biss il-hardware gotten aktar malajr, imma kompjuter tiegħek
ma, u hekk aħna verament irridu li armih affarijiet simili
multipli ta '2 jew multipli ta' 3 meta niġu biex tiddeskrivi
kif fast jew bil-mod kif algoriżmu huwa u verament biss jiffoka
fuq n jew xi fattur tiegħu,
xi setgħa tiegħu bħal fil-każ tal-tipi mill-aħħar ġimgħa.
U tfakkar li bl-għajnuna ta 'tip jingħaqdu
konna kapaċi li jagħmlu dan ħafna aħjar minn tip bużżieqa u sort l-għażla
u sort inserzjoni anke.
>> Sirna sa n log n, u għal darb'oħra,
ifakkar li log n ġeneralment tirreferi għal xi ħaġa li tikber
aktar bil-mod imbagħad n, sabiex n log n s'issa kienet tajba
għaliex kien inqas minn ² n.
Iżda biex jiksbu n log n ma sort jingħaqdu
dak li kien il-raħs bażiku ta 'idea li kellna biex jinfluwenzaw
li aħna wkoll influwenzati lura fil-ġimgħa 0?
Kif aħna ma tindirizza l-problema issortjar cleverly bil sort jingħaqdu?
Liema kienet l-għarfien ewlieni, forsi?
Kulħadd fil-livelli kollha.
Okay, ejja jieħu pass lura.
Iddeskrivi jingħaqdu sort fi kliem tiegħek.
Kif ma taħdem?
Okay, aħna ser ringiela lura għal 0 ġimgħa.
Okay, yeah.
[Inaudible-istudent]
Okay, tajba, hekk aħna maqsuma l-firxa ta 'numri fil 2 biċċiet.
Aħna magħżula kull waħda minn dawk il-biċċiet, u allura aħna magħquda magħhom,
u Rajna din l-idea qabel ta 'teħid problema li l-din big
u tqattiegħ it up fis-problema li l-din kbar jew dan kbar.
>> Recall-eżempju ktieb tat-telefon.
Recall-algoritmu awto-għadd minn ġimgħat ilu,
sort hekk jingħaqdu ġie sintetizzat minn din pseudocode hawn.
Meta inti qed tingħata l-elementi n, l-ewwel kien sanità check.
Jekk n <2 allura ma tagħmel xejn fil-livelli kollha
għaliex jekk n <2 allura n hija ovvjament 0 jew 1,
u hekk jekk huwa jew 0 jew 1 hemm xejn biex issolvi.
Inti qed isir.
Lista tiegħek huwa diġà trivially magħżula.
Imma inkella jekk inti stajt ltqajna 2 jew aktar elementi jimxi 'l quddiem u jaqsmuhom
fis-2 nofsijiet, tax-xellug u tal-lemin.
Sort kull wieħed minn dawk nofsijiet, u mbagħad jingħaqdu l nofsijiet magħżula.
Iżda l-problema hawn hija li ewwel daqqa t'għajn dan iħoss simili aħna qed punting.
Din hija definizzjoni ċirkulari li jekk stajt talab li inti sort dawn l-elementi n
u int javżak me "Kull dritt, multa, aħna ser sort dawk l-elementi n / 2 u dawk n / 2,"
imbagħad mistoqsija li jmiss tiegħi se tkun "Multa, kif taħseb sort l-n / 2 elementi?"
>> Iżda minħabba l-istruttura ta 'dan il-programm,
minħabba li hemm din il-bażi, biex ngħidu hekk,
F'dan il-każ speċjali li tgħid jekk n huwa <xi valur fiss bħal 2-ritorn immedjatament.
Ma jirrispondu mal din ir-risposta ċirkolari istess.
Dan il-proċess, dan ċikli eventwalment se jispiċċaw.
Jekk Nitlobkom "Sort dawn l-elementi n," u inti tgħidli, "Fine, sort dawn n / 2,"
imbagħad inti tgħidli, "Fine, sort dawn n / 4, n / 8, n/16,"
eventwalment inti ser jaqsam minn numru kbir biżżejjed
li inti ser ikollok xellug element biss 1, f'liema punt inti tista 'tgħid,
"Hawnhekk, hawn huwa element wieħed magħżula."
Imbagħad il-brilliance ta 'dan algoritmu sa hawnhekk huwa li ġejjin mill-fatt
li ladarba inti għandek kollha ta 'dawn il-listi individwalment magħżula,
li kollha huma ta 'daqs 1, li jidher li jkun inutli,
ladarba tibda qed jingħaqdu magħhom u l-amalgamazzjoni tagħhom
inti jibnu finalment kif Rob għamlet fil-video lista finalment magħżula.
>> Iżda din l-idea testendi lil hinn issortjar.
Hemm din l-idea inkorporat f'dan il-programm magħruf bħala recursion,
l-idea li biha inti programm,
u biex isolvu xi problema inti sejħa lilek innifsek,
jew imqegħda fil-kuntest tal-ipprogrammar ta 'lingwi inti funzjoni,
u sabiex issolvi problema, inti l-funzjoni sejħa lilek innifsek
ġdid u għal darb'oħra u għal darb'oħra, imma int l-funzjoni
ma jistgħux jikkontestaw lilek innifsek drabi infinitament ħafna.
Eventwalment inti għandek qiegħ barra, biex ngħidu hekk,
u għandek xi kundizzjoni bażi hard-kodifikati li tgħid
f'dan il-punt niefqu milli nsejħulha ruħek sabiex il-proċess kollu
finalment ma fil-fatt jieqfu.
Xi jfisser dan verament tfisser, għall recurse?
>> Ejja naraw jekk nistgħu nagħmlu sempliċi, eżempju wieħed trivjali ma ', ngħidu aħna,
3 persuni me up hawn fuq il-palk, jekk xi ħadd ikun komdu.
1, come fuq up, 2 u 3.
Jekk inti tixtieq li toħroġ 3 up here.
Jekk inti tixtieq li toqgħod dritt li jmiss lili hawn fil-linja, ejja ngħidu li l-problema in kwistjoni
huwa ferm trivially jgħodd in-numru ta 'nies li huma hawnhekk.
Iżda franchement, jien għajjien ta 'dawn eżempji għadd.
Dan ser jieħu xi żmien, 1, 2, u dot, dot, dot.
Huwa ser jieħu dejjem.
I d pjuttost biss Punt din il-problema għal kollox bl-għajnuna ta 'liema l-isem tiegħek?
Sara. >> Sara, id-dritt.
Kelly. >> Kelly u?
>> Willy. >> Willy, Sara, Kelly, u Willy.
Dritt issa I ġew staqsa l-mistoqsija minn xi ħadd
kif ħafna nies huma fuq dan l-istadju, u għandi l-ebda idea.
Din hija lista verament twila, u għalhekk minflok jien ser jagħmlu dan trick.
Jien ser titlob lill-persuna li jmiss lili biex jagħmlu ħafna mix-xogħol,
u ladarba hi qed isir tagħmel ħafna mix-xogħol
Jien ser jagħmlu l-inqas ammont ta 'xogħol possibbli u biss żid 1
għal dak kollu tweġiba tagħha huwa, so here we go.
Stajt ġew mitluba kif ħafna nies huma fuq il-palk.
Kif ħafna nies huma fuq il-palk lejn ix-xellug tal inti?
Ix-xellug ta 'lili? >> Okay, iżda ma iqarrqu.
Li tajjeb, li l-korretta, imma jekk irridu li tkompli din il-loġika
ejja nassumu li inti simili trid Punt din il-problema fuq ix-xellug tal inti,
hekk minflok tweġiba direttament jimxi 'l quddiem u biss jgħaddu l-Buck.
Oh, kif ħafna nies huma fuq ix-xellug ta 'lili?
Kif ħafna nies huma fuq ix-xellug?
1.
[Daħk]
Okay, hekk 0, iva, liema issa Willy għamlet
huwa inti ħadthom lura tweġiba tiegħek f'din id-direzzjoni qal 0.
Issa, x'għandek tagħmel? >> 1.
Okay, hekk int l-1, sabiex inti tgħid, "Kull dritt, jien ser żid 1
għal dak kollu għadd Willy kien, "sabiex 1 + 0.
Inti issa 1 sabiex it-tweġiba tiegħek għall-dritt huwa issa '
1. >> U minjiera tkun 2.
Tajjeb, hekk int tieħu l-risposta preċedenti tal-1,
żżid l-ammont minimu ta 'xogħol li inti trid tagħmel, li huwa 1.
Inti issa għandhom 2, u inti mbagħad idejn lili li valur?
3, I mean, sorry, 2.
Tajba.
>> Well, kellna 0 ix-xellug.
Imbagħad kellna 1, u allura aħna żid 2,
u issa int għoti me-numru 2,
u hekk jien tgħid, okay, 1, 3.
Hemm tabilħaqq 3 min-nies bil-wieqfa li jmiss lili fuq dan l-istadju,
hekk aħna seta ovvjament għamlu dan ħafna linearment,
ħafna fil-moda ovvju, imma dak ma aħna verament do?
Aħna ħa problema ta 'daqs 3 inizjalment.
Aħna mbagħad kissru l-isfel fis-problema ta 'daqs 2,
imbagħad problema ta 'daqs 1, u mbagħad finalment l-każ bażi
Kien verament, oh, hemm ebda waħda hemm,
f'liema punt Willy lura effettiv risposta hard-kodifikati koppja ta 'drabi,
u t-tieni waħda kienet imbagħad effervexxentement up, effervexxentement up, effervexxentement up,
u mbagħad billi żżid f'dan 1 1 addizzjonali
konna implimentati din l-idea bażika ta 'recursion.
>> Issa, f'dan il-każ hija ma verament issolvi problema
kwalunkwe aktar effettiv allura Rajna s'issa.
Imma naħseb dwar l-algoritmi li aħna ghamilt fuq il-palk s'issa.
Kellna 8 biċċiet tal-karti fuq il-chalkboard,
fuq video meta Sean kienet qed tfittex għall-numru 7, u dak li ma hu verament do?
Ukoll, huwa ma jagħmel ebda tip ta 'qasma u conquer.
Hu ma tagħmel xi tip ta 'recursion.
Pjuttost hu biss ma dan algoritmu lineari.
Imma meta aħna introduċiet l-idea ta 'numri magħżula fuq il-palk jgħixu ġimgħa li għaddiet
allura kellna din istint ta 'ser-nofs,
f'liema punt kellna lista iżgħar ta 'daqs 4 jew lista oħra ta' daqs 4,
u allura kellna l-istess problema eżatt, hekk aħna ripetut, ripetuta, ripetuta.
Fi kliem ieħor, aħna recursed.
Grazzi ħafna għal 3 voluntiera tagħna hawn biex juru recursion magħna.
>> Ejja naraw jekk aħna ma tistax tagħmel dan issa konkret ftit aktar,
isolvi problema li għal darb'oħra stajna nagħmlu pjuttost faċilment,
iżda aħna ser jużawha bħala pass lejn implimentazzjoni ta 'dan l-idea bażika.
Jekk irrid biex tiġi kkalkulata l-għadd totali tal-mazz ta 'numri,
per eżempju, jekk inti tgħaddi fin-numru 3,
Irrid li jtik l-valur tal sigma 3,
hekk is-somma ta 3 + 2 + 1 + 0.
Irrid li terġa 'lura l-risposta 6,
hekk aħna ser timplimenta din il-funzjoni sigma, din il-funzjoni kalkolu totali
li, għal darb'oħra, jieħu fil-input, u mbagħad jirritorna l-għadd totali
ta 'dak in-numru it-triq kollha sa 0.
Nistgħu nagħmlu dan pretty sempliċi, id-dritt?
Stajna nagħmlu dan ma 'xi tip ta' struttura looping,
so let me imorru quddiem u tikseb dan beda.
>> Inkludi stdio.h.
Let me nikseb myself fis ewlenija biex jaħdmu ma 'hawn.
Ejja tiffranka dan bħala sigma.c.
Imbagħad jien se jmorru fil hawn, u jien ser tiddikjara n int,
u jien ser tagħmel dan li ġej waqt li l-utent ma jikkooperax.
Filwaqt li l-utent ma jkunx tani numru pożittiv
let me imorru quddiem u twassalhom għal n = GetInt,
u let me tagħtihom xi struzzjonijiet dwar x'għandek tagħmel,
hekk printf ("numru sħiħ pożittiv jekk jogħġbok").
Just xi ħaġa relattivament sempliċi bħal dan hekk li mill-ħin aħna hit-linja 14
issa għandna numru sħiħ pożittiv preżumibbilment n.
>> Issa ejja nagħmlu xi ħaġa magħha.
Let me imorru quddiem u kkalkulata l-kalkolu totali, hekk int somma = sigma (n).
Sigma huwa biss kalkolu totali, hekk jien biss bil-miktub fil-mod fancier.
Aħna ser biss sejħa hija sigma hemmhekk.
Dik hija s-somma, u issa jien ser jistampa r-riżultat,
printf ("Is-somma hija% d \ n", somma).
U allura jien ser jirritorna 0 għal miżura tajba.
Aħna ghamilt dak kollu li dan il-programm tirrikjedi ħlief il-parti interessanti,
li huwa li fil-fatt jimplimentaw il-funzjoni sigma.
>> Let me jinżlu hawn sal-qiegħ, u let me tiddikjara funzjoni sigma.
Huwa ltqajna biex jieħdu varjabbli li ta 'numru sħiħ tip,
u liema tip ta 'data ma nixtieq li jirritornaw preżumibbilment minn sigma?
Int, minħabba I tixtieq li jilħqu l-aspettattivi tiegħi fuq il-linja 15.
Fil hawn let me go l quddiem u jimplimentaw din
b'mod pjuttost sempliċi.
>> Ejja imorru quddiem u jgħidu somma int = 0,
u issa jien se jmorru jkollhom ftit loop hawn
li għaddej biex ngħid xi ħaġa bħal din,
għal (i int = 0; I <= in-numru; i + +) somma + = i.
U mbagħad jien ser jirritorna somma.
I jistgħu jkunu implimentaw din fi kwalunkwe numru ta 'modi.
I setgħet tuża loop waqt.
I setgħet tinqabeż jużaw il-varjabbli somma jekk jien verament riedu,
iżda fil-qosor, aħna biss għandhom funzjoni li jekk jien ma goof tiddikjara somma hija 0.
Imbagħad ttenni minn 0 fil sa permezz-numru,
u fuq kull iterazzjoni hija żżid li l-valur attwali biex somma u mbagħad jirritornaha somma.
>> Issa, hemm ottimizzazzjoni żgħir hawn.
Din hija probabbilment pass moħlija, iżda dan ikun hekk. Dik il-multa għal issa.
Aħna l-inqas tkun bir-reqqa u jmorru 0 it-triq kollha fuq up.
Mhux iebsa ħafna u pjuttost sempliċi,
iżda jirriżulta li l-funzjoni sigma għandna l-istess opportunità
kif għamilna hawn fuq il-palk.
Fuq il-palk aħna biss magħduda kif ħafna nies kienu jmiss lili,
iżda minflok jekk ridna li jgħodd in-numru 3 + 2 + 1
fuq l isfel għal 0 nistgħu simili Punt għal funzjoni
li jien ser minflok tiddeskrivi bħala rikursivi.
Hawn ejja do a sanità malajr jivverifika u kun żgur I ma goof.
>> Naf li hemm mill-inqas ħaġa waħda f'dan il-programm li jien ma do wrong.
Meta I hit jidħol jien se tikseb kull tip ta 'yelling fil lili?
What am I se jkunu għajjat ​​fil dwar?
Yeah, I nesa l-prototip, hekk jien jużaw funzjoni msejħa sigma fuq il-linja 15,
iżda mhux dikjarat sat linja 22, so I aħjar b'mod proattiv go up here
u tiddikjara prototip, u jien ser ngħid int sigma (int numru), u li hu.
Huwa implimentati fil-qiegħ.
>> Jew mod ieħor I tista 'ssolvi din il-
I jistgħu jimxu l-funzjoni up hemm, li mhix ħażina,
iżda mill-inqas meta programmi tiegħek tibda tikseb twil, franchement,
Naħseb li hemm xi valur fil dejjem wara prinċipali fil-quċċata
b'tali mod li inti fil-qarrej jista 'tiftaħ il-fajl u mbagħad minnufih tara
dak il-programm qed tagħmel mingħajr ma jkollhom tfittxija permezz ta 'dan
tfittex għal dik il-funzjoni prinċipali.
Ejja jinżlu għal tieqa terminal tiegħi hawnhekk, jippruvaw jagħmlu sigma jagħmlu sigma,
u I invitat up hawnhekk ukoll.
Dikjarazzjoni impliċita ta GetInt funzjoni ifisser li stajt insejt biex jagħmlu x'iktar?
[Inaudible-istudent]
Tajba, hekk apparentement żball komuni, hekk ejja tpoġġi dan up hawn,
cs50.h, u issa ejja mur lura għall-tieqa terminal tiegħi.
>> I ser ċar l-iskrin, u jien ser terġa 'ssir jagħmlu sigma.
Jidher li ikkumpilata. Let me issa run sigma.
I ser tip fil-numru 3, u jien ma nikseb 6, u għalhekk mhux kontroll rigoruża,
iżda mill-inqas jidher li tkun qed taħdem ewwel daqqa t'għajn, iżda issa ejja RIP l barra,
u ejja fatt jwieżen l-idea ta 'recursion, għal darb'oħra,
f'kuntest sempliċi ħafna sabiex fil-ħin ftit ġimgħat "
meta aħna tibda tesplora l-istrutturi tad-data fancier minn matriċi
għandna ieħor għodda fil-toolkit li biex
jimmanipulaw dawk l-istrutturi tad-data kif Ser naraw.
Dan huwa l-approċċ iterattiv, l-approċċ loop-based.
>> Let me minflok issa jagħmlu dan.
Let me minflok jgħidu li l-kalkolu totali ta 'numru
fuq l isfel għal 0 huwa verament l-istess ħaġa bħat
Numru + sigma (numru - 1).
Fi kliem ieħor, l-istess bħal fuq l-istadju I punted lil kull wieħed mill-persuni li jmiss lili,
u huma mbagħad miżmuma punting sakemm aħna finalment qiegħ barra fil Willy,
li kellhom jirritornaw risposta hard-kodifikati like 0.
Hawnhekk Issa aħna qed simili punting li sigma
l-istess funzjoni kif kien oriġinarjament imsejjaħ, iżda l-għarfien ċavetta hawn
hija li aħna mhux qed titlob sigma identiku.
Aħna ma tgħaddi fis n.
Aħna ċar li tgħaddi fin-numru - 1,
hekk problema kemmxejn iżgħar, il-problema kemmxejn iżgħar.
>> Sfortunatament, dan mhux pjuttost soluzzjoni għadhom, u qabel we tiffissa
dak li jista 'jaqbeż kif ovvji f'xi minnkom
let me imorru quddiem u terġa 'ssir jagħmlu.
Jidher li jikkompilaw okay.
Let me terġa 'ssir sigma mal 6.
Whoops, let me terġa 'ssir sigma mal 6.
Imxejna rajt dan qabel, għalkemm iż-żmien aċċidentalment aħħar ukoll.
Għaliex ma I nikseb dan tort segmentazzjoni cryptic? Yeah.
[Inaudible-istudent]
M'hemm l-ebda każ ta 'bażi, u b'mod aktar speċifiku, dak li probabbilment ġara?
Dan huwa sintomu ta 'liema komportament?
Jgħidu li ftit louder.
[Inaudible-istudent]
Huwa ta 'loop infinita b'mod effettiv, u l-problema ma' linji infinita
meta dawn jinvolvu recursion f'dan il-każ, funzjoni li ssejjaħ lilha nnifisha,
dak li jiġri kull darba li inti sejħa funzjoni?
Ukoll, think lura għal kif aħna stabbiliti l-memorja fil-kompjuter.
Aħna qal li hemm dan blokki ta 'memorja imsejjaħ il-munzell li l-fil-qiegħ,
u kull darba li inti sejħa funzjoni ta 'memorja ftit aktar gets mqiegħda
fuq din il-munzell hekk imsejħa fih varjabbli lokali li funzjoni jew l-parametri,
hekk jekk sigma sejħiet sejħiet sigma sigma jitlob sigma
jitlob sigma fejn ma dan il-għan l-istorja?
>> Ukoll, huwa eventwalment żejda l-ammont totali
ta 'memorja li inti għandek disponibbli għall-kompjuter tiegħek.
Inti qbiż-segment li int suppost li toqgħod fi,
u ikollok dan tort segmentazzjoni, qalba iddampjati,
u liema qalba dumped ifisser huwa li jien issa jkollhom fajl imsejjaħ qalba
li huwa fajl li jkun fih żero u dawk
li attwalment fil-futur se tkun diagnostically utli.
Jekk mhuwiex ovvju li inti fejn bug tiegħek
inti tista 'attwalment tagħmel daqsxejn ta' analiżi forensika, biex ngħidu hekk,
dwar dan il-fajl dump qalba, li, għal darb'oħra, huwa biss mazz sħiħ ta 'żero u dawk
li essenzjalment jirrappreżenta l-istat tal-programm tiegħek fil-memorja
il-mument li ġġarraf b'dan il-mod.
>> Il-jiffissaw hawnhekk hija li ma nistgħux biss bl-addoċċ jirritorna sigma,
in-numru + sigma ta 'problema kemmxejn iżgħar.
Għandna bżonn li jkollhom xi tip ta 'każ bażi hawnhekk,
u dak li għandu l-każ bażiku probabbilment tkun?
[Inaudible-istudent]
Okay, sakemm in-numru huwa pożittiv għandna attwalment jirritorna din,
jew fi kliem ieħor, huwa n-numru jekk, ngħidu aħna, <= għal 0
inti taf liema, jien ser imorru quddiem u lura 0,
ferm simili Willy ma, u inkella, jien ser jimxi 'l quddiem
u rritorna din, dan mhuwiex li ħafna iqsar
mill-verżjoni iterattiv li aħna bit-tarjola up ewwel użu ta 'għall-loop,
imma avviż li hemm din it-tip ta 'eleganti lilha.
Minflok jirritornaw xi numru u jwettqu dan kollu matematika
u żżid affarijiet up ma 'varjabbli lokali
int minflok qal "Okay, jekk din hija problema faċli super,
bħall-numru huwa <0, let me immedjatament jirritorna 0. "
>> Aħna mhux se jolqot numri ta 'sostenn negattivi,
hekk jien ser code hard-valur ta '0.
Iżda mod ieħor, biex jimplimentaw din l-idea ta 'ġabra fil-qosor
kollha ta 'dawn in-numri flimkien inti tista' effettivament tieħu gidma żgħir
barra mill-problema, ħafna bħal għamilna hawn fuq il-palk,
allura Punt il-bqija tal-problema lill-persuna li jmiss,
imma f'dan il-każ il-persuna li jmiss huwa lilek innifsek.
Huwa ta 'funzjoni identika jismu.
Just tgħaddiha problema iżgħar u iżgħar kull darba,
u anke jekk aħna għandna affarijiet mhux pjuttost formalizzati fil-kodiċi hawn
dan huwa eżattament dak li kien għaddej fl-f'ġimgħa 0 mal-ktieb tat-telefon.
Dan huwa eżattament dak li kien għaddej fil-ġimgħat li għaddew ma 'Sean
u ma 'dimostrazzjonijiet tagħna ta' tiftix għal numri.
Huwa jieħu problema u jiġi diviż mill-ġdid u għal darb'oħra.
>> Fi kliem ieħor, hemm mod issa 'traduzzjoni
din tibni dinja reali, dan tibni livell ogħla
ta jaqsam u jirbħu u tagħmel xi ħaġa għal darb'oħra u għal darb'oħra
fil-kodiċi, għalhekk din hija xi ħaġa aħna se tara mill-ġdid matul iż-żmien.
Issa, bħala twarrib, jekk int ġodda għall recursion inti għandek inqas jifhmu issa
għaliex dan huwa umoristiċi.
Jien ser tmur google.com,
u jien ser tfittex xi tips u tricks fuq recursion, jidħol.
Għid il-persuna li jmiss lilek jekk dawn ma kinux laughing biss issa.
Ridt tfisser recursion?
Ridt tfisser 'ah, hemm we go.
Okay, issa li l-bqija ta 'kulħadd.
A bajd tal-Għid ftit inkorporat x'imkien hemmhekk fil-Google.
Bħala twarrib, wieħed mill-links li nitfgħu fuq il-websajt tal-kors tal-
għal-lum huwa biss dan grilja ta 'algoritmi issortjar varji,
wħud minnhom ħarisna lejn il-ġimgħa li għaddiet, imma x'hemm sbieħ dwar dan viżwalizzazzjoni
kif inti tipprova wrap moħħok madwar affarijiet varji relatati ma 'algoritmi
taf li inti tista 'faċilment issa tibda ma' tipi differenti ta 'inputs.
L-inputs kollha maqluba, l-inputs l-aktar magħżula, l-inputs każwali u ibqa 'sejjer hekk.
Kif inti tipprova, għal darb'oħra, jiddistingwu dawn l-affarijiet fil-moħħ tiegħek
jirrealizzaw li dan il-URL fuq il-websajt il-kors dwar il-paġna Lectures
jistgħu jgħinuk raġuni permezz xi wħud minn dawk.
>> Illum aħna finalment nikseb biex issolvi din il-problema minn ftit lura,
li kien li din il-funzjoni tpartit biss ma 'xogħol,
u dak li kien il-problema fundamentali ma 'dan tpartit funzjoni,
l-għan tagħha kien, għal darb'oħra, biex jiskambjaw valur hawn u hawn
b'tali mod li dan jiġri?
Dan ma attwalment jaħdmu. Għaliex?
Yeah.
[Inaudible-istudent]
Eżattament, l-ispjegazzjoni għal din bugginess
sempliċement għaliex kien meta inti sejħa funzjonijiet C
u dawk il-funzjonijiet jieħdu l-argumenti, bħal aub hawn,
inti tgħaddi kopji ta 'kwalunkwe valur int jipprovdu għal dik il-funzjoni.
Inti ma jipprovdix il-valuri oriġinali infushom,
hekk aħna raw dan fil-kuntest ta 'buggyc,
buggy3.c, li ħares ftit xi ħaġa bħal din.
>> Ifakkar li kellna x uy initialized għal 1 u 2, rispettivament.
Aħna mbagħad stampat dak li kienu.
I imbagħad sostna li kien I iskambji lilhom billi ċċempel tpartit ta 'x, y.
Iżda l-problema kienet li l-iskambji maħduma,
iżda biss fl-ambitu tal-iswap jaħdem innifsu.
Hekk kif aħna hit-linja 40 dawk il-valuri biddlu
kienu tintrema, u għalhekk xejn
fil-funzjoni oriġinali ewlenija kienet attwalment nbidel f'xejn,
hekk jekk taħseb lura mbagħad dwar din xi Dehra f'termini ta 'memorja tagħna
jekk din in-naħa tax-xellug tal-bord tirrappreżenta '
u jien ser nagħmlu l-almu tiegħi għal kulħadd biex tara din il-jekk din in-naħa tax-xellug tal-bord
jirrappreżenta, jiġifieri, RAM tiegħek, u l-munzell se jikbru fuq il b'dan il-mod,
u aħna sejħa funzjoni simili ewlenija, u prinċipali għandu 2 varjabbli lokali, xuy,
ejja jiddeskrivu dawk kif x hawnhekk, u ejja jiddeskrivu dawn bħala y hawn,
u ejja tpoġġi fil-valuri 1 u 2, għalhekk dan hawnhekk hija prinċipali,
u meta jitlob il-funzjoni prinċipali tpartit-sistema operattiva
tagħti l-funzjoni tpartit radda tagħha stess ta 'memorja fuq il-munzell,
qafas tagħha stess fuq il-munzell, biex ngħidu hekk.
Hija wkoll jalloka 32 bits għal dawn ints.
Dan jiġri li jsejħu lilhom aub, iżda li l-totalment arbitrarju.
Dan seta 'talab minnhom tkun xi tkun trid, imma x'jiġri meta prinċipali
jistieden tpartit huwa jieħu din 1, ipoġġi kopja hemmhekk, tpoġġi kopja hemmhekk.
>> Hemm 1 varjabbli lokali oħra fl tpartit, għalkemm, imsejħa liema? TMP. >>
TMP, so let me jagħtu myself ieħor bits 32 hawn,
u dak li ma nagħmel f'dan il-funzjoni?
I said TMP int gets, hekk tkun 1, so I ma 'dan meta aħna l-aħħar lagħbu dan l-eżempju.
Imbagħad gets b, hekk b huwa 2, hekk issa dan isir 2,
u issa b gets temperatura, għalhekk temperatura hija ta '1,
hekk issa b isir dan.
Li l-kbir. Hija ħadmet.
Iżda mbagħad hekk kif il-prospetti funzjoni
memorja swap b'mod effettiv tisparixxi sabiex ikun jista 'jiġi użat mill-ġdid
minn xi funzjoni oħra fil-futur, u prinċipali hija ovvjament kompletament mingħajr tibdil.
Għandna bżonn mod ta 'fundamentalment isolvi din il-problema,
u llum aħna ser finalment ikollhom mod ta 'kif isir dan biha
nistgħu jintroduċu xi ħaġa imsejħa pointer.
Jirriżulta li nistgħu issolvi din il-problema
mhux billi tgħaddi kopji ta 'xuy
iżda minflok billi tgħaddi fil dak, taħseb, li l-funzjoni tpartit?
Yeah, dak dwar l-indirizz?
Aħna ma verament tkellem dwar l-indirizzi fid-dettall ħafna,
imma jekk dan blackboard jirrappreżenta memorja tal-kompjuter tiegħi
nistgħu ċertament tibda numerazzjoni-bytes fir RAM tiegħi
u jgħidu dan huwa byte # 1, dan huwa byte # 2, byte # 3,
byte # 4, byte # ... 2 biljun jekk Għandi 2 gigabytes ta 'RAM,
hekk nistgħu ċertament toħroġ ma 'xi skema ta' numerazzjoni arbitrarja
għall-bytes kollha individwali fil-memorja tal-kompjuter tiegħi.
>> X'jiġri jekk minflok meta I call swap
pjuttost milli jgħaddu kopji ta 'xuy
għaliex ma I minflok jgħaddu fl-indirizz ta 'x hawnhekk,
l-indirizz ta 'y hawn, essenzjalment l-indirizz postali
ta 'xuy għaliex imbagħad tpartit, jekk hu infurmat
ta 'l-indirizz fil-memorja ta' xuy,
imbagħad tpartit, jekk aħna mħarrġa lilu ftit,
huwa jista 'potenzjalment issuq għal dak l-indirizz, biex ngħidu hekk,
x, u jibdlu l-għadd hemmhekk, imbagħad issuq fl-indirizz ta 'y,
jibdlu l-għadd hemmhekk, anki waqt li ma attwalment jkollna kopji ta 'dawk il-valuri stess,
hekk anke jekk aħna tkellimna dwar dan bħala memorja prinċipali tal-
u l-memorja din tpartit bħala s-qawwija u l-parti perikoluża 'C
hija li xi funzjoni jistax imiss memorja kullimkien fil-kompjuter,
u dan hija qawwija li inti tista 'tagħmel affarijiet ferm fancy ma' programmi tal-kompjuter fil C.
Dan huwa perikoluż minħabba li inti tista 'wkoll screw up faċilment.
Fil-fatt, wieħed mill-modi l-aktar komuni għall-programmi f'dawn il-jiem li jiġu sfruttati
xorta huwa għal programmer ma jirrealizzaw
li hu jew hi qed jippermettu ta 'data
li tkun miktuba f'post fil-memorja li ma kienx intenzjonat.
>> Per eżempju, hu jew hi jiddikjara firxa ta 'daqs 10
iżda mbagħad aċċidentalment tipprova tqiegħed 11 bytes f'dik firxa ta 'memorja,
u tibda jmissu partijiet ta 'memorja li ma jkunux aktar validi.
Just biex kuntestwali dan, xi wħud minnkom tista 'taf li
software spiss iqajjem inti għal numri tas-serje jew ċwievet reġistrazzjoni,
Photoshop u Word u programmi bħal din.
Jeżistu xquq, peress li xi wħud minnkom jafu, online fejn int tista 'tmexxi programm ftit,
u voila, l-ebda talba aktar għal numru serjali.
Kif huwa li taħdem?
F'ħafna każijiet dawn l-affarijiet huma sempliċement konstatazzjoni fil-kompjuters
test segmenti fil żerijiet attwali tal-kompjuter u dawk
fejn huwa dik il-funzjoni fejn in-numru tas-serje hija mitluba,
u inti jissostitwixxu l-ispazju, jew waqt li l-programm qed taħdem
inti tista 'ċifra barra fejn il-muftieħ huwa attwalment maħżuna
użu xi ħaġa imsejħa debugger, u inti tista 'qasma li softwer il-mod.
Dan ma jfissirx li dan huwa l-għan tagħna għall-koppja li jmiss ta 'jiem,
iżda għandha ħafna tad-dinja reali ramifikazzjonijiet.
Li wieħed jiġri li jinvolvu serq ta 'software,
imma hemm ukoll kompromess ta 'magni sħaħ.
>> Fil-fatt, meta websajts dawn il-jiem huma sfruttati
u kompromessi u data nixxew u passwords huma misruqa
dan ħafna drabi relatat ma 'ġestjoni ħażina tal-memorja wieħed,
jew, fil-każ ta 'databases, in-nuqqas li jiġu antiċipati
input tal-kontradittorju, b'mod aktar fuq li fil-ġimgħat li ġejjin,
iżda għal issa biss Sneak preview tal-tip ta 'ħsara li inti tista' tagħmel
billi ma pjuttost jifhmu kif jaħdmu l-affarijiet minn taħt il-barnuża.
Ejja tmur dwar fehim għaliex dan huwa miksur
ma 'għodda li se jsiru aktar u aktar utli
bħala programmi tagħna jiksbu aktar kumplessi.
S'issa meta inti kellna bug fil-programm tiegħek
kif inti marret dwar debugging dan?
Liema kienu tekniki tiegħek kienu s'issa, kemm jekk mgħallma minn TF tiegħek
jew biss awto-mgħallma?
[Student] printf.
Printf, hekk printf x'aktarx ilha ħabib tiegħek li jekk inti tixtieq li tara
x'inhu għaddej ġewwa tal-programm tiegħek
inti biss jitqiegħed printf hawn, printf hawn, printf hawn.
Imbagħad inti run, u inti tikseb mazz sħiħ ta 'għalf fuq l-iskrin
li tista 'tuża biex imbagħad jiġi dedott dak li huwa attwalment tmur ħażina fil-programm tiegħek.
>> Printf tendenza li tkun ħaġa qawwija ħafna,
iżda huwa proċess ferm manwali.
Int għandek tpoġġi printf hawn, a printf hawn,
u jekk inti tpoġġi ġewwa ta 'linja inti tista' tikseb 100 linji
tal-produzzjoni li inti mbagħad ikollhom biex jiġu ffiltrati permezz.
Mhuwiex mekkaniżmu ħafna faċli għall-utent jew interattivi għall-programmi debugging,
iżda Thankfully teżisti alternattivi.
Hemm programm, per eżempju, imsejħa GDB, il Debugger GNU,
li huwa arcane ftit fil-mod kif tużah.
Huwa kumpless ftit, iżda franchement,
din hija waħda minn dawk l-affarijiet fejn jekk inti tpoġġi fil din il-ġimgħa u li jmiss
il siegħa żejda li wieħed jifhem xi ħaġa bħal GDB
se tiffranka probabbilment għexieren ta 'sigħat fit-tul,
hekk ma 'dan, let me jagħtuk teaser ta' kif dan il-ħaġa xogħlijiet.
>> Jien fil tieqa terminal tiegħi.
Let me imorru quddiem u jiġbru dan il-programm, buggy3.
Huwa diġà aġġornata.
Let me run eżatt bħal għamilna lura waqt, u fil-fatt, huwa imkisser.
Iżda għaliex hija din? Maybe I invitat l-funzjoni tpartit.
Forsi huwa au b. Jien ma pjuttost jiċċaqalqu minnhom madwar korrett.
Let me imorru quddiem u jagħmlu dan.
Pjuttost milli sempliċiment run buggy3 let me minflok run din GDB programm,
u jien ser jgħidlek li jimxu buggy3,
u jien ser jinkludi argument linja tal-kmand, TUI-,
u aħna ser tpoġġi dan fil-problemi futuri fil spec biex tfakkar.
U issa din l-interfaċċa iswed u abjad popped up li, għal darb'oħra,
huwa ftit kbira fl-ewwel għaliex hemm dan kollu
informazzjoni garanzija stabbiliti hawn, iżda mill-inqas hemm xi ħaġa familjari.
Fil-quċċata tat-tieqa hija kodiċi attwali tiegħi,
u jekk I iscroll up hawn let me iscroll għall-quċċata tal-fajl tiegħi,
u fil-fatt, hemm buggy3.c, u avviż fil-qiegħ ta 'dan tieqa
Għandi dan pront GDB.
>> Din mhix l-istess bħal fil-pront Harvard tiegħi normali John.
Dan huwa fil-pront li għaddej biex ippermettuli biex jikkontrollaw GDB.
GDB huwa debugger.
A debugger huwa programm li ihallik timxi permezz
eżekuzzjoni tal-linja program tiegħek billi linja b'linja,
tul it-triq tagħmel xejn inti tixtieq li l-programm,
anke ssejjaħ funzjonijiet, jew tfittex, aktar importanti,
fil-valuri varjabbli varji ta.
Ejja imorru quddiem u jagħmlu dan.
Jien ser jimxi 'l quddiem u t-tip fil-medda t fil-pront GDB s,
hekk avviż fil-qiegħ tax-xellug tal-iskrin stajt ittajpjat run,
u stajt hit jidħol, u dak li ma din tagħmel?
Hija litteralment dam programm tiegħi, imma jien ma attwalment tara ħafna jmorru fuq hawn
minħabba I ma attwalment qal lill-debugger
biex nieqaf f'mument partikolari fil-ħin.
Just ttajpjati run tiġġestixxi l-programm.
I ma attwalment tara xejn. I ma tista 'timmanipola dan.
>> Minflok let me tagħmel dan.
F'dan pront GDB let me minflok tip break, jidħol.
Li mhux dak I fisser it-tip.
Ejja minflok tip break prinċipali.
Fi kliem ieħor, nixtieq li jistabbilixxu xi ħaġa imsejħa breakpoint,
li huwa adattat issemmiet għaliex se waqfa jew pawża
eżekuzzjoni tal-programm tiegħek f'dak il-post partikolari.
Main huwa l-isem tal-funzjoni tiegħi.
Avviż li GDB hija pjuttost intelliġenti.
Hija dehret li jiġri prinċipali biex tibda ftit jew wisq fl linja 18
ta buggy3.c, u mbagħad avviż hawn fuq quċċata xellug
b + huwa dritt li jmiss għal-linja 18.
Li fakkruha me I waqqfu breakpoint fil-linja 18.
Din id-darba meta I tip run, jien ser jimxu programm tiegħi
up sakemm hits li breakpoint,
għalhekk il-programm se nieqaf għalija fil-linja 18.
Here we go, run.
Xejn jidher li ġara, iżda l-avviż fil-qiegħ xellug
Programm bidu, buggy3, breakpoint 1 fil prinċipali fil-linja buggy3.c 18.
X'nista 'nagħmel issa?
>> Avviż I tista 'tibda ittajpjar affarijiet simili stampati,
ma printf, x jistampa, u issa thats stramba.
Il-$ 1 huwa biss kurżità, kif Ser naraw
kull darba li inti print xi ħaġa ikollok ġdid $ valur.
Dak sabiex inti tista 'tirreferi lura għall-valuri ta' qabel biss fil-każ,
iżda għal issa dak istampar hija me javżak huwa li l-valur ta 'x f'dan il-punt fl-istorja
hija apparentement 134514032.
What? Fejn ma li anke jiġu minn?
[Inaudible-istudent]
Tabilħaqq, dan huwa dak li aħna ser sejħa valur żibel, u konna ma tkellem dwar dan għadha,
iżda r-raġuni li inti initialize-varjabbli
huwa ovvjament sabiex ikollhom xi valur li inti tixtieq li jkollok.
Iżda l-qabda tfakkar li inti tista 'tiddikjara varjabbli
bħal I ma mument ilu fl-eżempju sigma tiegħi
mingħajr ma attwalment jagħtihom valur.
Recall dak li għamilt hawn fuq fil sigma.
I ddikjarat n, iżda liema valur ma nagħti dan?
Xejn, għaliex kont naf li fil-linji li ġejjin
GetInt se tieħu ħsieb il-problema ta 'tqegħid ta' valur ġewwa ta 'n.
>> Iżda f'dan il-punt fl-istorja tal-linja 11
u l-linja 12 u linja 13 u l-linja 14
matul dawk il-linji diversi x'inhu l-valur ta 'n?
Fil Ċ inti biss ma nafx.
Huwa ġeneralment xi valur żibel, xi numru kompletament bl-addoċċ
li ħalla fuq essenzjalment minn xi funzjoni ta 'qabel
li tkun għamlet, sabiex il-programm tiegħek runs
ifakkar li l-funzjoni gets, funzjoni funzjoni, il-funzjoni.
Kollha dawn il-frejms nikseb jitqiegħdu fuq il-memorja, u mbagħad dawk ritorn funzjonijiet,
u biss bħal I suġġerit bl-Eraser memorja tagħhom huwa eventwalment jerġa 'jintuża.
Ukoll, huwa biss hekk jiġri li dan x-varjabbli f'dan il-programm
jidher li hemm xi valur żibel bħal 134514032
minn xi funzjoni ta 'qabel, mhux wieħed li I kiteb.
Jista 'jkun xi ħaġa li taqa' b'mod effettiv mal-sistema operattiva,
xi funzjoni taħt il-barnuża.
>> Okay, li l-multa, imma ejja issa javvanzaw għal-linja li jmiss.
Jekk I tip "li jmiss" fil-pront GDB tiegħi u I hit jidħol,
tinnota li l-enfasi jiċċaqlaq isfel għal-linja 19,
iżda l-implikazzjoni loġika hija dik il-linja 18
issa lest eżekuzzjoni, hekk jekk I darb'oħra tip "print x"
I issa għandhom jaraw 1, u fil-fatt, I do.
Għal darb'oħra, l-għalf $ huwa mod ta 'GDB nfarkkarkom
dak li l-istorja ta 'prints huma li inti ghamilt.
Issa let me aqbad u jistampa y, u fil-fatt, y hija xi valur crazy kif ukoll,
iżda l-ebda big deal għaliex linja 19 aħna qed dwar li tassenja din
il-valur 2, so let me tip "li jmiss" darb'oħra.
U issa aħna qed fuq il-linja printf.
Let me do x istampar.
Let me do y print. Franchement, jien jkollna ftit għajjien ta 'stampar dan.
Let me minflok tip "x display" u "wirja y,"
u issa kull darba I tip ta 'kmand fil-futur
I se jiġu mfakkra ta 'x'hemm xuy, x'hemm xuy, x'hemm xuy.
>> I tista 'wkoll, bħala twarrib, tip "lokal info."
Info huwa kmand speċjali.
Lokal jfisser li turi lili l-varjazzjonijiet lokali.
Biss fil-każ ninsa jew din hija crazy, funzjoni kkumplikata
li jien jew xi ħadd ieħor kiteb lokal info se jgħidlek
liema huma l-varjazzjonijiet lokali tal ġewwa din il-funzjoni lokali
li inti tista 'kura dwar jekk inti tixtieq li poke madwar.
Issa, printf ikun wasal biex tesegwixxi, so let me imorru quddiem u biss tip "li jmiss."
Għaliex aħna qed f'dan l-ambjent aħna mhux qed fil-fatt dan iqisuh
tesegwixxi stabbiliti hawn, iżda avviż huwa jkollna ftit mangled hawn.
Iżda l-avviż huwa prevalenti l-iskrin hemm,
hekk huwa mhux programm perfetta hawn, iżda li okay minħabba I jistgħu dejjem poke madwar
użu print jekk irrid.
>> Let me tip li jmiss darb'oħra, u issa hawnhekk l-parti interessanti.
Fuq dan il-punt fl-istorja y huwa 2, u x hija l-1,
kif issuġġerit hawnhekk, u għal darb'oħra,
ir-raġuni dan huwa awtomatikament wiri issa huwa minħabba I użat il-kmand
wiri u l-wiri x y, sabiex il-mument I tip li jmiss
fit-teorija xuy għandhom isiru skambjati.
Issa, aħna diġà jafu li mhux se jkun il-każ,
iżda Ser naraw fil-mument kif nistgħu adsa aktar profonda biex insemmu għaliex dan huwa veru.
Sussegwentement, u sfortunatament, y għadu 2 u x għadu 1, u nista 'nikkonferma kemm.
Stampa x, y print.
Tabilħaqq, l-ebda iskambji fil-fatt ġara, hekk ejja nibdew dan fuq.
Ovvjament tpartit hija maqsuma.
Ejja minflok tip "run" darb'oħra.
Let me say yes, nixtieq li terġa 'tibda mill-bidu, jidħol.
>> Issa jien back-up fil-linja 18.
Issa avviż xuy huma valuri taż-żibel mill-ġdid.
Sussegwentement, wara dan, li jmiss, li jmiss.
Jekk niġi bored I tista 'wkoll biss tip n li jmiss.
Tista 'jqassar dan il-sekwenza iqsar possibbli ta' karattri.
Swap issa hija maqsuma.
Ejja adsa fi, hekk minflok ta 'tajping li jmiss,
Issa jien se tip pass hekk li jien titjib ġewwa ta 'din il-funzjoni
sabiex I tista 'timxi permezz ta' dan, so I hit pass u mbagħad tidħol.
Avviż li l jumps tenfasizza l isfel aktar baxx fil-programm tiegħi għal-linja 36.
Issa liema huma l-fatturi varjabbli lokali?
Info lokal.
Xejn għadha biss għaliex aħna stajt ma gotten għal dik il-linja,
hekk ejja imorru quddiem u jgħidu "li jmiss."
Issa għandna jidhru li jkollhom TMP TMP istampar,.
Valur Żibel, id-dritt? I think so.
Kif dwar tipprintja b istampar,, 1 u 2?
Fil-mument, malli I tip li jmiss darb'oħra
TMP huwa ser jieħu fuq valur ta '1, wieħed jittama,
minħabba TMP se jiġu assenjati l-valur ta '.
>> Issa ejja do tistampa b istampar,,
iżda issa jistampaw TMP, u huwa tabilħaqq 1.
Let me jagħmlu li jmiss. Let me jagħmlu li jmiss.
Stajt lest il-funzjoni tpartit.
Jien xorta ġewwa ta 'dan fil-linja 40, so let me jistampaw,
istampar b, u jien ma 'kura huwa TMP dak.
Jidher qisu swap hija korretta meta niġu għall-iskambji aub.
Imma jekk jien issa tip li jmiss, I Mur lura għall-linja 25,
u ta 'kors, jekk I tip fil x u tistampa y
dawn qed għadhom ma nbidlux, hekk aħna mhux fiss il-problema.
Imma diagnostically issa forsi ma dan il-programm GDB
konna inqas gotten pass eqreb lejn fehim
x'inhu għaddej ħażin mingħajr ma jkollhom mifrex kodiċi tagħna billi jpoġġi printf hawn,
printf hawn, printf hawn u mbagħad-tmexxija mill-ġdid u għal darb'oħra
jippruvaw ċifra barra dak li għaddej ħażin.
>> Jien ser jimxi 'l quddiem u nieqaf minn dan għal kollox nieqaf.
Huwa ser mbagħad jgħidu, "Nieqaf xorta?" Iva.
Issa jien lura fil-pront normali tiegħi, u jien jsir użu GDB.
Bħala twarrib, inti m'għandekx bżonn li jużaw dan TUI-bandiera.
Fil-fatt, jekk inti tonqos li tikseb essenzjalment l-nofs ta 'isfel tal-iskrin.
Jekk I imbagħad tip waqfa prinċipali u mbagħad run
I xorta jistgħu run program tiegħi, imma dak li se tagħmel huwa aktar testwalment
biss juru lili il-linja waħda kurrenti fi żmien.
Il TUI-, user interface testwali,
biss turi inti aktar tal-programm fil-darba, li hija probabbilment daqsxejn kunċettwali aktar faċli.
Imma fil-fatt, I tista 'biss tagħmel li jmiss, li jmiss, li jmiss,
u jien ser tara linja waħda fi żmien, u jekk I really trid tara x'inhu għaddej
I tista tip lista u tara mazz sħiħ ta 'linji ġirien.
>> Hemm video li konna mitluba li inti watch għall-problema settijiet 3
fejn Nate tkopri wħud mill-intricacies ta 'GDB,
u din hija waħda minn dawk l-affarijiet, onestament, fejn xi persentaġġ mhux trivjali tal inti
qatt se touch GDB, u li se tkun ħaġa ħażina
għaliex litteralment inti ser jispiċċaw infiq aktar ħin aktar tard din is-semestru
tmur fl bugs allura inti jekk inti tpoġġi f'dak nofs siegħa / siegħa
din il-ġimgħa u t-tagħlim li jmiss biex tikseb komda mal GDB.
Printf kien ħabib tiegħek.
GDB għandu issa jkun ħabib tiegħek.
>> Kwalunkwe mistoqsijiet dwar GDB?
U hawn lista ta 'malajr ta' xi wħud mill-kmandi aktar qawwija u utli.
Yeah. >> Tista print string?
Tista 'tipprintja string? Assolutament.
Ma għandhom biss ikunu interi.
Jekk i varjabbli huwa string biss tip i print.
Hija ser nuruk dak li varjabbli sekwenza huwa.
[Inaudible-istudent]
Huwa se jagħtik l-indirizz u l-sekwenza nnifisha.
Hija ser nuruk tnejn.
U wieħed aħħar ħaġa, sempliċement minħabba li dawn huma tajba li tkun taf wisq.
Backtrace u l-qafas, let me adsa fis dan iż-żmien l-aħħar wieħed,
Programm eżatt l-istess ma 'GDB.
Let me imorru quddiem u tmexxi l-verżjoni testwali user interface,
break prinċipali.
Let me imorru quddiem u run mill-ġdid. Hawnhekk I am.
Issa let me go jmiss, li jmiss, li jmiss, li jmiss, li jmiss, pass, jidħol.
>> U issa jissoponi Jien issa fil tpartit deliberatament, imma jien simili "indanna, dak li kien il-valur ta 'x?"
I ma tistax tagħmel x aktar.
I ma tistax tagħmel y għaliex dawn mhux qed fl-iskop.
Huma qed mhux fil-kuntest, iżda l-ebda problema.
I tista tip backtrace.
Li turi lili kollha tal-funzjonijiet li jkunu eżegwiti sa dan il-punt fil-ħin.
Avviż li l-wieħed fuq il-qiegħ, prinċipali, linji up ma 'prinċipali
qegħdin fuq il-qiegħ tal-istampa tagħna hawn.
Il-fatt li swap hija ogħla huwa linji bi tpartit tkun il-fuq fil-memorja hawn,
u jekk I rridu nġibu lura għall prinċipali temporanjament nista 'ngħid "qafas".
X'inhu n-numru? Prinċipali huwa frame # 1.
Jien ser jimxi 'l quddiem u jgħidu "qafas 1."
>> Issa jien lura fl prinċipali, u I jistgħu jistampaw x, u I jistgħu jistampaw y,
imma ma nistax jistampaw b jew.
Imma nista 'jekk I say, "Okay, stenna minuta. Fejn kien il-iswap?"
Let me imorru quddiem u jgħidu "0 frame."
Issa jien lura fejn nixtieq li jkun, u bħala twarrib,
hemm jikkmanda oħra wkoll, bħall jekk int verament jkollna bored ittajpjar jmiss, li jmiss, li jmiss, li jmiss,
inti tista 'ġeneralment jgħidu affarijiet simili "10 li jmiss," u li se pass permezz-10 linji.
Tista 'wkoll tikteb "tkompli" meta inti verament tikseb mitmugħa bl titjib permezz tiegħu.
Kompli se jimxu program tiegħek mingħajr interruzzjoni sakemm hits ieħor breakpoint,
kemm jekk loop jew aktar 'l isfel fil-programm tiegħek.
>> F'dan il-każ aħna kompliet l-aħħar, u l-programm ħareġ normalment.
Dan huwa mod fancy, proċess inferjuri.
Just programm tiegħek ħareġ normalment.
Aktar dwar dan fil-video u debugging sessjonijiet li ġejjin.
Dan kien ħafna.
Ejja tieħu 5-minuta break tagħna hawn, u aħna ser terġa 'lura mal structs u fajls.
>> Jekk għandek dived fis pset din il-ġimgħa diġà
inti ser tkun taf li aħna nużaw fil-kodiċi ta 'distribuzzjoni,
s-sors kodiċi li nipprovdu lilek bħala punt tat-tluq, xi tekniki ġodda.
B'mod partikolari, aħna introdotti dan il-keyword ġdida msejħa Struct, għall-istruttura,
sabiex inkunu nistgħu joħolqu varjabbli apposta ta 'tipi.
Aħna wkoll introduċa l-kunċett ta 'input fajl fajl I / O, u l-produzzjoni,
u dan huwa sabiex inkunu nistgħu jiffrankaw l-istat
tal-bord ġirja tiegħek għal fajl fuq diska
sabiex il-fellows tagħlim u I jistgħu jifhmu
x'inhu għaddej ġewwa tal-programm tiegħek mingħajr ma jkollhom manwalment jilagħbu
għexieren ta 'logħob ta' ġirja.
Nistgħu nagħmlu dan aktar automatedly.
>> Din l-idea ta 'Struct jsolvi problema pjuttost konvinċenti.
Ejja ngħidu li aħna rridu li jimplimentaw xi programm
li b'xi żżomm kont ta 'informazzjoni dwar l-istudenti,
u l-istudenti jista 'jkollhom, per eżempju, ID, isem
u dar f'post bħal Harvard, għalhekk dawn huma 3 biċċiet ta 'informazzjoni
irridu li żżomm madwar, so let me imorru quddiem u tibda tikteb programm ftit hawn,
jinkludu stdio.h.
Let me do jinkludu cs50.h.
U mbagħad tibda l-funzjoni prinċipali tiegħi.
I mhux se jolqot bl-ebda argument linja tal-kmand,
u hawn nixtieq li jkollhom student, hekk jien ser ngħid
student ikollu l-isem, hekk jien se ngħid "isem sekwenza."
Imbagħad jien se ngħid student għandu wkoll ID, id hekk int,
u student ikollu dar, hekk jien ukoll se ngħid "house sekwenza."
Imbagħad I ser tordna dawn ftit aktar nadif bħal dan.
Okay, issa għandi 3 varjabbli li biex jirrappreżentaw student, hekk "student".
>> U issa nixtieq li timla dawn il-valuri, so let me jimxi 'l quddiem u ngħid xi ħaġa simili
"Id = 123."
Isem se tikseb David.
Ejja ngħidu dar hija se tikseb Mather,
u mbagħad jien se jagħmlu xi ħaġa simili arbitrarjament printf ("% s,
li huwa ID% d, jgħix fi s%.
U issa, dak li nixtieq li plagg fil hawn, waħda wara l-oħra?
Isem, id-dar; ritorn 0.
Okay, sakemm I invitat up x'imkien here
Naħseb għandna programm pjuttost tajba li taħżen wieħed student.
Naturalment, dan mhux kollha li interessanti. X'jiġri jekk jien tixtieq li jkollha 2 istudenti?
Li l-ebda big deal. I jistgħu jappoġġjaw 2 persuni.
Let me imorru quddiem u jenfasizzaw dan u jinżlu hawn,
u nista 'ngħid "id = 456" għal xi ħadd bħal Rob li jgħix fil Kirkland.
>> Okay, stenna, iżda I ma jistgħux jikkontestaw dawn l-istess ħaġa,
u jidher qisu jien ser ikollhom kopja dan,
so let me ngħid li dawn se jkunu varjabbli David,
u let me nikseb xi kopji ta 'dawn għall Rob.
Aħna ser sejħa dawn Rob iżda dan mhuwiex sejjer jaħdem issa
minħabba I-stenna, ejja bidla lili biex ID1, name1 u house1.
Rob se jkun 2, 2.
Stajt ltqajna biex tbiddel dan hawn, hawn, hawn, hawn, hawn, hawn.
Stenna, dak dwar Tommy? Ejja nagħmlu dan mill-ġdid.
Ovvjament jekk inti xorta taħseb li dan huwa mod tajjeb ta 'kif isir dan, mhuwiex,
hekk kopja / paste ħażina.
Iżda aħna solvuta din ġimgħa ilu.
>> Liema kienet soluzzjoni tagħna meta ridna li jkollhom każi multipli tat-tip tad-data istess?
[Studenti] Firxa.
Firxa, so let me jippruvaw biex tnaddaf dan up.
Let me jagħmlu xi spazju għall myself fil-quċċata, u let me minflok tagħmel dan hawn.
Aħna ser sejħa dawn in-nies, u minflok jien se ngħid "ids int,"
u jien ser tappoġġja 3 ta 'magħna għal issa.
Jien se ngħid "ismijiet spag," u jien ser tappoġġa 3 ta 'magħna,
u mbagħad jien se ngħid "djar spag," u jien ser tappoġġja 3 minna.
Issa fil hawn minflok David jkollna varjazzjonijiet lokali tiegħu stess
nistgħu jeħles dawk.
Dan iħoss tajba li aħna qed tindif dan up.
I jistgħu mbagħad ngħid David se tkun [0] u ismijiet [0]
u djar [0].
U allura Rob nistgħu istess mod jiffrankaw fuq dan.
Ejja tpoġġi din stabbiliti hawn, hekk hu għaddej biex arbitrarjament tkun ids [1].
Hu għaddej biex tkun l-ismijiet [1],
u mbagħad fl-aħħar, djar [1].
>> Still ftit tedious, u issa għandi din il-figura,
hekk ejja ngħidu "ismijiet [0], id [0], djar [0],
u ejja pluralize dan.
IDs, ids, ids.
U għal darb'oħra, jien tagħmel dan, sabiex għal darb'oħra, jien diġà jirrikorru għal kopja / paste mill-ġdid,
hekk odds huma hemm soluzzjoni oħra hawn.
I tista 'probabbilment tnaddaf dan up ulterjuri ma' linja jew xi ħaġa bħal dik,
hekk fil-qosor, huwa ftit aħjar iżda xorta jħoss simili
Jien jirrikorru kopja / paste, imma anki dan, I jsostnu,
mhuwiex verament fundamentalment is-soluzzjoni dritt minħabba
dak li jekk f'xi aħna tiddeċiedi inti taf liema?
Aħna verament kellha ħażna indirizzi email għall David u Rob
u kulħadd f'dan il-programm.
Għandna wkoll taħżen numri tat-telefon.
Għandna wkoll taħżen numri ta 'kuntatt ta' emerġenza.
Aħna kollha dawn il-biċċiet ta 'data li rridu li jaħżen,
hekk kif taħseb li tmur dwar kif isir dan?
>> You jiddikjaraw ieħor array fil-quċċata, u allura inti manwalment żid
l-indirizz email [0], indirizz elettroniku [1]
għall David u Rob u oħrajn.
Imma hemm verament biss suppożizzjoni sottostanti dan id-disinn
li jiena jużaw is-sistema unur li tkun taf li
[I] f'kull arrays diversi
biss hekk jiġri li jirreferu għall-istess persuna,
hekk [0] fil ids huwa numru 123,
u jien ser jassumi li l-ismijiet [0]
huwa l-isem l-istess persuna u djar [0]
huwa d-dar l-istess persuna u ibqa 'sejjer hekk għall kollha tal-matriċi varji li I joħolqu.
Iżda avviż li hemm l-ebda rabta fundamentali
fost dawk il-biċċiet 3 ta 'informazzjoni, id-isem u d-dar,
anke jekk l-entità aħna qed jippruvaw mudell f'dan il-programm ma jkunx matriċi.
Arrays huma biss b'dan il-mod programmatiku biex dan isir.
Dak li aħna verament irridu li mudell fil-programm tagħna huwa persuna
bħal David, persuna bħal Rob minn ġewwa illi
jew siġillar huwa isem u l-ID u dar.
>> Nistgħu b'xi mod tesprimi din l-idea ta 'inkapsulament
li bih persuna jkollha ID, isem u dar
u mhux jirrikorru għal verament dan Hack biha aħna biss
fiduċja li xi ħaġa kategorija
jirreferi għall-entità tal-bniedem istess f'kull wieħed minn dawn arrays differenti?
Nistgħu fil-fatt jagħmlu dan.
Let me go fuq ewlenija għal issa, u let me toħloq stess tad-data tiegħi tip
għall verament l-ewwel darba.
Aħna użati din it-teknika fl-ġirja,
iżda hawnhekk jien ser jimxi 'l quddiem u joħolqu tip ta' data,
u inti taf liema, jien ser sejħa hija student jew persuna,
u jien ser tuża typedef għal jiddefinixxu tip.
Jien se ngħid li dan huwa l-istruttura,
u allura din l-istruttura se tkun ta 'student tip, aħna ser ngħidu,
anki jekk huwa ftit datata issa għalija.
Aħna ser jgħidu "int id."
Aħna ser jgħidu "isem sekwenza."
Imbagħad aħna ser ngħidu "house string,"
hekk issa sa l-aħħar ta 'dawn il-linji ftit tal-kodiċi
I għadek mgħallma clang li jeżisti
tip ta 'data minbarra ints, minbarra kordi, minbarra jirdoppja, minbarra flowts.
>> Bħala ta 'dan il-mument fil-linja ħin 11, issa hemm tip ta' data ġdida msejħa l-istudenti,
u issa nista 'niddikjara varjabbli student kullimkien nixtieq,
so let me iscroll hawn biex in-nies.
Issa nista 'teħles minn dan, u I tista' tmur lura għal David hawn,
u għal David I jistgħu attwalment ngħid li David,
nistgħu litteralment isem il-varjabbli wara myself,
se tkun ta 'student tip.
Dan jista 'tfittex ftit stramb, imma dan mhux kollha li differenti
milli jiddikjaraw xi ħaġa bħala int jew string jew float.
Huwa biss hekk jiġri li għandu jissejjaħ student issa,
u jekk irrid biex xi ħaġa ġewwa ta 'din l-istruttura
I issa għandhom jużaw biċċa ġdida ta 'sintassi, imma hija pjuttost sempliċi,
david.id = 123, david.name = "David" fil-kapital D,
u david.house = "Mather,"
u issa nista 'teħles minn dan il-għalf hawn.
Avviż konna issa ġġeddu programm tagħna verament mod ferm aħjar
f'dak il-programm tagħna issa jirrifletti d-dinja reali.
>> Hemm kunċett tad-dinja reali ta 'persuna jew student.
Hawnhekk għandna issa verżjoni C ta 'persuna jew aktar speċifikament student.
Ġewwa ta 'dik il-persuna huma dawn il-karatteristiċi relevanti,
ID, l-isem u d-dar, u għalhekk Rob essenzjalment isir l-istess ħaġa stabbiliti hawn,
hekk istudenti Rob, u issa rob.id = 456,
rob.name = "Rob."
Il-fatt li l-varjabbli hija msejħa Rob huwa tip ta 'sens.
Nistgħu qalu li din x jew y jew z.
Aħna biss imsemmija hija Rob jkun semantikament konsistenti,
imma verament l-isem huwa ġewwa ta 'dak il-qasam innifsu,
hekk issa għandi dan.
Dan ukoll ma jħossu bħal l-aħjar disinn f'dak stajt iebes kodifikati David.
Stajt iebes kodifikati Rob.
U jien xorta jkollhom jirrikorru għal xi kopja u paste kull darba nixtieq varjabbli ġodda.
Barra minn hekk, I għandhom apparentement jagħti lil kull wieħed dawn il-varjabbli l-isem,
anki jekk I d ​​ħafna pjuttost jiddeskrivu dawn il-varjabbli
aktar studenti ġeneriku kif.
>> Issa nistgħu jingħaqdu l-ideat li kienu qegħdin jaħdmu tajjeb għalina
u minflok jgħidu, "Inti taf liema, jagħtu me istudenti imsejħa varjabbli,
u ejja li hija tkun ta 'daqs 3, "hekk issa I jistgħu jirfinaw din ulterjuri,
jeħles mill-David manwalment iddikjarat,
u nista 'ngħid xi ħaġa simili minflok istudenti [0] hawn.
I jistgħu mbagħad ngħid istudenti [0] hawn,
istudenti [0] hawn, u oħrajn, u I tista 'tmur madwar
u nadif li għall Rob.
I tista 'wkoll tmur dwar issa forsi żżid linja
u l-użu GetString u GetInt biex fil-fatt tikseb dawn il-valuri mill-utent.
I tista 'tmur dwar żżid kostanti għaliex dan huwa ġeneralment prattika ħażina
għall-kodiċi hard xi numru arbitrarju bħal 3 dritt hawn
u mbagħad biss ftakar li inti għandek tpoġġi mhux aktar minn 3 istudenti fiha.
Dan probabbilment ikun aħjar li tuża # tiddefinixxi fil-quċċata tal-fajl tiegħi
u l-fattur li minn, hekk fil-fatt, let me imorru quddiem u jiġġeneralizza din.
>> Let me jiftħu eżempju li l-fost lum
eżempji bil-quddiem, structs1.
Dan huwa programm aktar kompluta li juża # tiddefinixxi up here
u jgħid aħna qed tmur biex ikollhom 3 istudenti fil-kontumaċja.
Hawnhekk jien tiddikjara jiswew klassi ta 'studenti,
hekk klassi ta 'studenti, u issa jien jużaw ħolqa
biss biex jagħmlu l-kodiċi ftit aktar eleganti, timla l-klassi
b'input-utent, hekk jtenni mill i = 0 sa l-istudenti, li huwa 3.
U mbagħad I pront lill-utent f'dan il-verżjoni
x'hemm ID-istudent, u I ġġibu bil GetInt.
X'hemm isem l-istudent, u mbagħad I ġġibu bil GetString.
X'hemm dar l-istudent? I ġġibu bil GetString.
U mbagħad fil-qiegħ hawnhekk I biss iddeċieda li jibdel
kif jien istampar dawn jitwettqu u li attwalment jużaw linja,
u li jien istampar?
Skond il-kumment jien istampar xi ħadd fil Mather,
u li hu hekk Rob u Tommy u oħrajn-fatt tal Tommy fil Mather.
Tommy u David tkun stampata f'dan il-każ, imma kif qed taħdem din?
Aħna ma bbenefikawx din il-funzjoni qabel, iżda tieħu raden dwar dak li dan ma.
Tqabbel kordi.
>> Huwa ftit mhux ovvju kif jikkompara kordi għaliex jirriżulta
jekk dan jirritorna 0 li tfisser il-kordi huma ugwali.
Jekk dan jirritorna a -1 li jfisser wieħed jidħol alfabetikament qabel l-oħra,
u jekk dan jirritorna 1 li tfisser il-kelma oħra tkun ġejja alfabetikament
qabel l-ieħor, u inti tista 'tfittex online jew fil-paġna bniedem
li jaraw eżattament liema mod huwa li, iżda dan kollu issa qed tagħmel huwa huwa qal
jekk l-[i]. dar hija ugwali għal "Mather"
imbagħad imorru quddiem u jistampa hekk u hekk huwa fil Mather.
Iżda hawn xi ħaġa li aħna ma bbenefikawx qabel, u aħna ser terga 'lura għal dan.
I do not recall qatt li jiġri dan fi kwalunkwe ta 'programmi tiegħi.
Free jidher li qed jirreferi għall-memorja, ħelsien memorja,
imma dak memorja jien apparentement ħelsien f'dan loop fil-qiegħ ta 'dan il-programm?
Jidher qisu jien ħelsien isem ta 'persuna
u d-dar ta 'persuna, iżda għaliex huwa li?
>> Jirriżulta kollha dawn il-ġimgħat li inti kont qed tuża GetString
konna tip ta 'qegħdin jintroduċu bug fis-kull wieħed mill-programmi tiegħek.
GetString mill-memorja jalloka disinn sabiex ikun jista 'ritorn lejn inti string,
bħal David, jew Rob, u inti tista 'mbagħad tagħmel xi trid
ma 'dak string fil-programm tiegħek għax konna riżervati l-memorja għalik.
Il-problema hija dan kollu ħin kull darba li inti sejħa GetString
aħna, l-awturi ta GetString, ġew tistaqsi s-sistema operattiva
biex tagħtina ftit ta 'RAM għal dan sekwenza.
Agħtina daqsxejn ta 'RAM għal dan sekwenza li jmiss.
Agħtina RAM ftit aktar għal din is-sekwenza li jmiss.
Dak li inti, il-programmer, qatt ma kienu jagħmlu
qed tagħti lilna li back-memorja,
hekk għal dawn il-ġimgħat diversi kollha tal-programmi li inti stajt bil-miktub
kellhom dak li sejjaħ qabża memorja fejn iżommu jużaw
memorja aktar u aktar kull darba li inti sejħa GetString, u li l-multa.
We deliberatament jagħmlu dan fl-ewwel ġimgħat għaliex mhuwiex dak interessanti
li jkollhom għalfejn tinkwieta dwar fejn il-sekwenza ikun ġej minn.
Kulma trid hija l-kelma Rob li jiġu lura meta l-utent tipi huwa pulzieri
>> Iżda miexja 'l quddiem issa għandna biex jibda jkollna aktar sofistikati dwar dan.
Kull darba li aħna jallokaw memorja aħna aħjar eventwalment jagħtih lura.
Mod ieħor fl-dinja reali fuq Mac tiegħek jew PC inti jista 'jkollhom xi kultant esperjenza
Sintomi fejn il-kompjuter tiegħek huwa tħin biex jieqaf eventwalment
jew l-ballun stupid bajja għażil huwa biss jokkupa l-infurmatika
attenzjoni sħiħa u inti ma tistax tagħmel affarijiet.
Dan jista 'jiġi spjegat minn kull numru ta' bugs, imma fost dawk bugs possibbli
huma affarijiet msejħa tnixxijiet memorja fejn xi ħadd li kiteb li l-biċċa ta 'softwer
inti qed tuża ma ftakar biex memorja ħielsa
li hu jew hi talbet lill-sistema operattiva għal,
ma jużawx GetString, għaliex li l-ħaġa CS50, iżda bl-użu funzjonijiet simili
li titlob lill-sistema operattiva għall-memorja.
Jekk inti jew li screw up u qatt fil-fatt ritorn li l-memorja
sintomu ta 'li jista' jkun li programm inaqqas u jrażżan u tnaqqas ir-ritmu
sakemm inti tiftakar li sejħa ħielsa.
>> Aħna ser terga 'lura għal meta u għaliex inti kieku ssejjaħ ħielsa,
imma ejja imorru quddiem biss għal miżura tajba u tipprova taħdem dan il-programm partikolari.
Dan kien jissejjaħ structs1, jidħol.
Let me imorru quddiem u run structs1, 123, David Mather,
456, Rob Kirkland, 789,
Tommy Mather, u naraw David fil Mather, tal Tommy fil Mather.
Dan huwa biss verifika sanità ftit li l-programm qed taħdem.
Issa, sfortunatament, dan il-programm huwa xi ftit frustranti f'dik
I ma dak kollu li jaħdmu, I ittajpjat fil 9 kordi differenti, hit jidħol,
kien qal li kien fil Mather, għadhom ovvjament kont naf li kien Mather diġà minħabba I ittajpjat.
Ikun inqas sbieħ jekk dan il-programm huwa aktar simili database
u huwa attwalment jiftakar dak I ittajpjat fil-
so I qatt jerġa 'jkollhom kontribut dawn ir-reġistri istudent.
Forsi huwa bħal sistema registrarial.
>> Nistgħu nagħmlu dan bl-użu din it-teknika magħrufa bħala input fajl fajl I / O, u l-produzzjoni,
mod ħafna ġeneriku ta 'tgħid kwalunkwe ħin li inti tixtieq li jaqra fajls jew ikteb fajls
inti tista 'tagħmel dan ma' sett ta 'funzjonijiet.
Let me imorru quddiem u tiftaħ din structs2.c eżempju,
li huwa kważi identiku, imma ejja ara dak li issa ma.
Fil-quċċata tal-fajl Niddikjara klassi ta 'studenti.
I imbagħad timla l-klassi b'input l-utent,
hekk dawk il-linji ta 'kodiċi huma eżattament bħal qabel.
Imbagħad jekk I iscroll stabbiliti hawn I jistampaw kull min huwa fil Mather arbitrarjament bħal qabel,
iżda din hija karatteristika ġdida interessanti.
Dawn il-linji ta 'kodiċi huma ġodda, u dawn jintroduċu xi ħaġa hawn,
FAJL, l-għotjien, u li għandha * fil hawnhekk ukoll.
Let me jimxu dan hawn fuq, a * aktar minn hawnhekk ukoll.
>> Din il-funzjoni ma rajniex qabel, fopen,
iżda dan ifisser fajl miftuħ, so ejja skim permezz ta 'dawn,
u din hija xi ħaġa aħna ser terga 'lura fl psets futuri,
iżda din il-linja hawnhekk essenzjalment jiftaħ fajl imsejjaħ database,
u dan b'mod speċifiku tiftħu b'tali mod li tista 'tagħmel dak li dan?
[Inaudible-istudent]
Dritt, hekk "w" ifisser biss huwa javżak-sistema operattiva
tiftaħ dan il-fajl b'tali mod li nista 'tikteb lilha.
Ma rridx biex taqraha. Ma rridx li biss ħarsa lejn dan.
Irrid li jibdlu u żid Jittieħed potenzjalment miegħu,
u l-fajl se jiġu msejħa database.
Dan jista 'jissejjaħ xejn.
Dan jista 'jkun database.txt. Dan jista 'jkun. Db.
Dan jista 'jkun kelma bħal foo, iżda I għażlet arbitrarjament li l-isem tad-database fajl.
Dan huwa kontroll sanità ftit li aħna ser terga 'lura għal f'dettall kbir matul iż-żmien,
jekk fp, għal pointer fajl, ma NULL ugwali li tfisser kollox huwa tajjeb.
>> Long storja qasira, funzjonijiet simili fopen kultant jonqsu.
Forsi l-fajl ma teżistix. Forsi int minn spazju diska.
Forsi inti ma għandekx permess biex dak folder,
hekk jekk fopen jirritorna xi ħaġa null ħażina ġara.
Bil-maqlub, jekk fopen ma ritorn null kollox huwa tajjeb
u I tista 'tibda bil-miktub lill dan il-fajl.
Hawn trick ġdid.
Din hija linja għal li l-iterazzjoni fuq kull wieħed mill-istudenti tiegħi,
u dan jistenna hekk simili għal dak li aħna ghamilt qabel,
iżda din il-funzjoni huwa kuġin ta printf sejjaħ fprintf għall-fajl printf,
u avviż huwa differenti biss 2 modi.
Wieħed, li jibda bil f minflok p,
iżda mbagħad ewwel argument tagħha hija apparentement liema?
[Studenti] File. >> Huwa fajl.
Din ħaġa imsejħa FP, li aħna ser eventwalment tease apparti dak pointer fajl huwa,
iżda għal issa fp sempliċement tirrappreżenta l-fajl li jien miftuħa,
hekk fprintf hawn huwa qal tipprintja ID dan l-utent għall-fajl, li ma l-iskrin.
Stampa isem l-utent għall-fajl, li ma l-iskrin,
l-dar għall-fajl, li ma l-iskrin, u mbagħad stabbiliti hawn, ovvjament,
jagħlaq il-fajl, u mbagħad stabbiliti hawn b'xejn l-memorja.
>> L-unika differenza bejn din il-verżjoni 2 u verżjoni 1
hija l-introduzzjoni ta 'fopen u dan FAJL ma *
u dan il-kunċett ta 'fprintf, so ejja ara dak ir-riżultat aħħari huwa.
Let me go fis tieqa terminal tiegħi.
Let me run structs2, jidħol.
Id-Dehra kollox huwa tajjeb. Ejja terġa 'ssir structs2.
123, David Mather, 456, Rob Kirkland,
789, Tommy Mather, jidħol.
Qisu ruħu l-istess, imma jekk jien issa do ls
Avviż dak fajl huwa hawnhekk fost l-kodiċi tiegħi, id-database,
hekk ejja miftuħa li, gedit ta 'database, u ħarsa lejn dak.
Mhuwiex l-sexiest ta 'formats tal-fajls.
Huwa verament huwa biċċa waħda ta 'linja data għal kull ringiela għal kull linja,
imma dawk fostkom li jużaw fajls Excel jew CSV, comma separati valuri,
I jista 'ċertament użaw fprintf biex minflok forsi jagħmlu xi ħaġa bħal din
hekk li I jistgħu attwalment joħolqu l-ekwivalenti ta 'fajl Excel
billi tissepara l-affarijiet ma virgoli, mhux biss linji ġodda.
>> F'dan il-każ jekk kelli minflok tintuża virgoli minflok linji ġodda
I jistgħu litteralment tiftaħ dan il-fajl database fl-Excel jekk I minflok għamilha teżamina bħal dan.
Fil-qosor, issa li għandna l-poter li tikteb fajls
aħna issa tista 'tibda data persistenti, iż-żamma madwar fuq diska
sabiex inkunu nistgħu nżommu l-informazzjoni madwar darb'oħra u għal darb'oħra.
Avviż ftit affarijiet oħra li huma issa ftit aktar familjari.
Fil-quċċata ta 'dan il-fajl C għandna typedef
għaliex ridna li jinħoloq tip ta 'data li jirrappreżenta kelma,
għalhekk dan it-tip huwa msejjaħ kelma, u ġewwa ta 'din l-istruttura
huwa ftit fancier issa.
Għaliex hija kelma magħmula minn apparentement firxa?
X'inhu kelma biss intuwittivament?
>> Huwa ta 'firxa ta' karattri.
Huwa sekwenza ta 'karattri lura lura lura.
ITTRI kollha caps jiġri li jkun we arbitrarjament ngħidu l-ikbar tul
ta 'xi kelma fid-dizzjunarju li aħna qed jużaw għall-ġirja.
Għaliex għandi 1?
Il null karattru.
Recall meta għamilna l-eżempju Bananagrams għandna bżonn valur speċjali
fl-aħħar tal-kelma sabiex iżżomm kont
ta 'fejn il-kliem fil-fatt spiċċat, u bħala l-ispeċifikazzjoni sett problema jgħid
hawn aħna qed jassoċjaw mal-kelma mogħtija valur Boolean,
bandiera, biex ngħidu hekk, vera jew falza.
Sibtha din il-kelma diġà, għaliex aħna realizzata
aħna verament jeħtieġu mod ta 'ftakar mhux biss dak kelma hija fil ġirja
iżda jekk jew le inti, il-bniedem, sabuha
b'tali mod li jekk inti ssib il-kelma "il-" inti tista 'mhux biss tip-, jidħlu, fil, jidħlu, il-jidħol
u jiksbu 3 punti, 3 punti, 3 punti, 3 punti.
Aħna rridu li tkun tista 'blacklist din il-kelma billi tistabbilixxi bool
li minnu jekk inti stajt diġà sabet li, u għalhekk huwa għalhekk li għandna
inkapsulati li f'din l-istruttura.
>> Issa, stabbiliti hawn fil ġirja hemm dan Struct oħra msejħa dizzjunarju.
Assenti hawnhekk hija l-kelma typedef għaliex f'dan il-każ
aħna meħtieġa biex jirrappreżentaw l-idea ta 'dizzjunarju,
u dizzjunarju fih mazz sħiħ ta 'kliem,
kif implikat minn din array, u kemm ta 'dawk il-kliem huma hemmhekk?
Ukoll, tkun xi tkun dan id-daqs varjabbli imsejħa jgħid.
Iżda aħna biss bżonn waħda dizzjunarju.
Aħna ma bżonn ta 'tip ta' data msejħa dizzjunarju.
Aħna biss bżonn waħda minnhom, u għalhekk jirriżulta fi C
li jekk inti ma jgħidux typedef, inti biss jgħidu Struct, allura ġewwa l-ċineg kaboċċi
inti tpoġġi varjabbli tiegħek, allura inti tpoġġi l-isem.
Dan huwa ddikjarat 1 dizzjunarju varjabbli imsejjaħ
li tidher bħal dan.
B'kuntrast, dawn il-linji qed joħolqu struttura tad-data li jistgħu jerġgħu jintużaw imsejjaħ kelma
inti tista 'toħloq kopji multipli ta', bħad ħloqna
kopji multipli ta 'studenti.
>> Xi jfisser dan finalment inessu li jagħmlu?
Let me go lura fil, ejja ngħidu, eżempju sempliċi minn żminijiet aktar sempliċi,
u let me jiftħu, ejja ngħidu, compare1.c.
Il-problema hawnhekk fil-idejn huwa li attwalment qoxra lura
is-saff ta 'spag u tibda tieħu off dawn ir-roti ta' taħriġ
għaliex jirriżulta li string dan il-ħin
huwa kif aħna imwiegħed fil-ġimgħa 1 verament ftit laqam,
sinonimu mill-bibljoteka CS50 għal xi ħaġa li jistenna ftit aktar cryptic,
* char, u Rajna dan il stilla qabel.
Aħna raw dan fil-kuntest ta 'fajls.
>> Ejja issa tara għaliex aħna kont qed jistaħbew dan id-dettall għal xi żmien issa.
Hawnhekk huwa fajl imsejjaħ compare1.c,
u apparentement jitlob lill-utent għal 2 kordi, su t,
u mbagħad tipprova tqabbel dawk kordi għall-ugwaljanza fil-linja 26,
u jekk dawn qed ugwali jgħid, "Inti ttajpjati l-istess ħaġa,"
u jekk dawn mhux qed ugwali jgħid, "Inti ittajpjat affarijiet differenti."
Let me imorru quddiem u jitmexxa dan il-programm.
Let me go fis direttorju sors tiegħi, tagħmel compare1. Hija miġbura okay.
Let me run compare1.
I ser zoom, jidħol.
Ngħid xi ħaġa. HELLO.
I ser ngħid xi ħaġa mill-ġdid. HELLO.
I definitely ma tip affarijiet differenti.
>> Let me tipprova dan mill-ġdid. BYE BYE.
Żgur li le differenti, hekk x'inhu għaddej hawn?
Ukoll, dak li hu verament jiġu pparagunati fil-linja 26?
[Inaudible-istudent]
Iva, hekk jirriżulta li string, data tat-tip, huwa tip ta 'gidba abjad.
A sensiela hija * char, imma dak huwa * char?
A * char, kif jgħidu, hija pointer,
u werrej huwa effettivament l-indirizz,
post somma fil-memorja, u jekk jiġri li għandek ittajpjat fil-kelma bħall HELLO,
jitlob lura mingħandhom il diskussjonijiet tal-passat ta 'spag
dan huwa bħall-kelma HELLO.
Ftakar li kelma bħal HELLO jistax jiġi rappreżentat
bħala firxa ta 'karattri bħal dan
u mbagħad ma 'karattru speċjali fit-tmiem imsejjaħ il-karattru null,
bħala l-ifisser, \.
X'inhu attwalment string?
Avviż li dan huwa biċċiet multipli ta 'memorja,
u fil-fatt, l-aħħar ta 'dan huwa magħruf biss ladarba inti tfittex permezz-sekwenza sħiħa
tfittex għall-karattru null speċjali.
Imma jekk dan huwa blokki ta 'memorja mill-memorja tal-kompjuter tiegħi,
ejja arbitrarju ngħid li dan string biss ltqajna xxurtjati,
u li ltqajna mqiegħda fil-bidu nett ta 'RAM kompjuter tiegħi.
Dan huwa byte 0, 1, 2, 3, 4, 5, 6 ...
>> Meta ngħid xi ħaġa simili GetString u nagħmel string s = GetString
dak li verament ikunu ritornati?
Għal dawn il-ġimgħat aħħar diversi, dak li verament qed maħżuna s
mhux din is-sekwenza per se, imma f'dan il-każ dak li qed jinħażen huwa
n-numru 0 għaliex dak GetString attwalment ma
huwa ma fiżikament ritorn string.
Dan lanqas ma verament jagħmel sens kunċettwali.
Dak li dan ritorn huwa numru.
Dak in-numru huwa l-indirizz ta 'HELLO fil-memorja,
u spag i mbagħad, jekk irridu qoxra lura dan is-saff, spag ma verament jeżistu.
Huwa biss simplifikazzjoni fil-librerija CS50.
>> Dan verament hija xi ħaġa imsejħa * char.
Char jagħmel sens għaliex x'hemm ftit kliem, bħal HELLO?
Ukoll, huwa sensiela ta 'Chars, serje ta' karattri.
* Char tfisser l-indirizz ta 'karattru,
hekk dak ma jfisser li jirritornaw string?
A sbieħ, mod sempliċi ta 'ritorn string
huwa pjuttost milli jippruvaw biex insemmu kif I-ritorn għal 5 jew 6 bytes differenti
let me lura fl-indirizz li byte?
L-ewwel waħda.
Fi kliem ieħor, let me jagħtuk l-indirizz ta 'karattru fil-memorja.
Dak hu * char tirrappreżenta, l-indirizz ta 'wieħed karattru wieħed fil-memorja.
Sejħa li s varjabbli.
Aħżen fil-i li jindirizzaw b'mod partikolari, li jiena arbitrarju qal huwa 0,
biss li żżomm affarijiet sempliċi, iżda fir-realtà huwa ġeneralment ta 'numru akbar.
>> Stenna minuta.
Jekk int biss tagħti me l-indirizz ta 'l-ewwel karattru, kif inkun naf x'inhi l-indirizz huwa
tal-karattru tieni, it-tielet, ir-raba 'u l-ħames?
[Inaudible-istudent]
Inti biss taf fejn it-tmiem tas-sekwenza huwa permezz ta 'dan trick handy,
hekk meta tuża xi ħaġa simili printf, liema printf litteralment tieħu bħala argument tagħha,
ifakkar li nużaw placeholder din% s, u allura inti jgħaddu
il-varjabbli li l-ħażna string.
Dak li int verament tgħaddi huwa l-indirizz ta 'l-ewwel karattru ta' dak sekwenza.
Printf mbagħad juża għal loop jew loop waqt malli jirċievi dik l-indirizz,
per eżempju, 0, so let me tagħmel dan issa,
printf ("% s \ n", i);
Meta I call printf ("% s \ n", i); dak li jien verament jipprovdu printf ma
huwa l-indirizz ta 'l-ewwel karattru fl-i, li f'dan il-każ arbitrarja huwa H.
>> Kif ma printf jafu eżattament dak li juri fuq l-iskrin?
Il-persuna li implimentat printf implimentata loop waqt jew għall loop
li tgħid ma dan il-karattru daqs il-karattru null speċjali?
Jekk le, jistampaw. Kif dwar dan wieħed?
Jekk le jistampaw, jistampaw, jistampaw, jistampaw.
Oh, dan huwa wieħed speċjali. Waqqaf istampar u r-ritorn għall-utent.
U li litteralment dak kollu li kien jiġri taħt il-barnuża,
u li l-lott sabiex jiddiġerixxu fl-ewwel jum ta 'klassi,
iżda għal issa huwa verament il-blokk bini ta 'kollox fehim
li kien għaddej fuq ġewwa ta 'memorja tal-kompjuter tagħna,
u eventwalment aħna ser tease dan apparti bi ftit għajnuna
minn wieħed mill-ħbieb tagħna fil Stanford.
>> Professur Nick Parlante fil Stanford għamel din is-sekwenza vidjo isbaħ
minn kull xorta ta 'lingwi differenti li ddaħħlu
dan Binky ftit karattru Claymation.
Il-vuċi int ser tisma fi ftit Sneak preview ftit 2
huwa dak ta 'professur Stanford, u int jkollna
biss 5 jew 6 sekondi ta 'dan id-dritt issa,
iżda dan huwa n-nota li aħna ser tikkonkludi llum
u jibdew nhar l-Erbgħa.
I jagħtuk Pjaċir Pointer mal Binky, il-preview.
[♪ ♪ Music] [Professur Parlante] Ħej, Binky.
Wake up. Wasal iż-żmien għall-gost pointer.
[Binky] X'hemm li? Tgħallem dwar pointers?
Oh, goody!
>> Aħna se tara int nhar l-Erbgħa.
[CS50.TV]