[Powered by Google Translate] [3 skirsnis] [mažiau patogūs]
>> [Nate Hardison] [Harvardo universiteto]
>> [Tai CS50.] [CS50.TV]
>> Viskas gerai, galime pradėti.
Sveiki atvykę į CS50 4 savaičių.
Jei jus vaikinai atverti interneto naršyklę ir atverti pset 3,
Grumtynės su CS50, mes ketiname pradėti vyksta
per ten klausimų skirsnyje.
Tiesiog kaip ir praeitą savaitę, mes dirbti CS50 erdvėse,
jei jūs taip pat traukti, kad iki, kaip gerai,
ir jei jūs einate į priekį ir aplankykite šią nuorodą, kad aš turiu čia viršuje.
Atėjo laikas pradėti.
Mes turime mūsų mažai hi programą čia. Nieko iš proto.
Vienas iš pirmųjų dalykų, aš noriu daryti su jumis, vaikinai, šiandien yra eiti per kelis sprendimus
problemą, 1, natūra, pavyzdžiui, sprendimų,
tik tokiu būdu jūs galite gauti už tai, ką rūšių kodinės matuoklės rašo jaustis,
ką rašote rūšių kodų kitais studentais,
ir turi atsižvelgti į jo išvaizdą, nes aš žinau, tai keista
kai jūs pateikiate išspręsti problemą, ir gauti komentarus
savo versiją, bet kartais tai naudinga pamatyti, kaip kiti žmonės tai padarė,
ypač tie, kurie yra gražus ieškote.
Nes didžioji dalis, buvau tikrai sužavėtas, kad jus vaikinai pagamintų sprendimų.
Aš dar pradėjo ieškoti savo problemą, 2s, bet jei jie nieko kaip ir pirmasis,
tai reiškia, kad nieko, bet gerų dalykų.
>> Jei pažvelgti į mano peržiūrų, pradėkime visą kelią žemyn redakcijos 1,
ir mes ketiname priimti greitai pažvelgti per Mario tirpalo.
Jei jūs traukite tai padaryti, šios programos, kad mes ketiname pateikti duomenys yra teisingi.
Nebuvo teisingumą klausimai su šių problemų, bet,
norime pakalbėti šiek tiek apie skirtingus projektavimo klausimais
buvo naudojami čia.
Vienas iš dalykų, kad buvo įdomu, apie sprendimą
yra tai, kad šią naują konstruktą, vadinamą svaras apibrėžti,
kartais taip pat vadinamas maišos apibrėžti.
Leiskite man priartinti jį čia.
# Define leidžia jums suteikti vardus šių savo programos numerius.
Tokiu atveju, didžiausią aukštį piramidės Mario
buvo 23 ir užuot mano kodas 23
mes norėtų atkreipti dėmesį, kad 23 kodavimo kietajame -
vietoj tai suteikia pavadinimas MAX_HEIGHT į šį numerį,
taip, kad žemyn čia mano do-while cikle
jūs iš tikrųjų galite kreiptis į MAX_HEIGHT
Vietoj to, kad skaičių 23.
[Studentų] Ką daryti, kad privalumas?
Tai puikus klausimas.
Vienas iš jų yra skaitomumas.
Privalumas naudojant šią programinę įrangą, # define aiškumą.
Kai aš skaitau šį kodą, matau, kas vyksta.
>> Aš galiu pamatyti, ši sąlyga, kad čia mes išbandome
aukščio yra <0, kurioje galėtume taip pat įvardija
minimalus aukštis arba min aukštis.
Kitas privalumas yra tai, kad aš galiu tada skaityti tos linijos poilsio
, kad mes taip pat tikrinami, siekiant įsitikinti, kad aukštis yra ne didesnis nei maksimalus aukštis,
nes mes ketiname toliau, o aukštis yra didesnis nei maksimalus aukštis.
Kitas privalumas yra tai, jei aš nutolinti šiek tiek
, jei aš paleisti šią programą, ir aš jį, tarkim, su 23 dabar,
jis bus atspausdinti visus tik 23 eilutes, pavyzdžiui, kad.
Bet pasakyti, kad aš norėjau pakeisti maksimalų aukštį,
ir dabar noriu apriboti maksimalią piramidės aukštis
būti tik pasakyti, kad žmogus, kad buvo madingas.
# Include # define MAX_HEIGHT,
ir tegul sako, kad mes norėjome nustatyti lygi 10.
Dabar šiuo metu, viskas, ką aš turėjau padaryti, buvo jį pakeisti tai vienoje vietoje.
Galiu perkompiliuoti kodą, ir dabar, jei aš pabandyti ir įrašykite 12,
jis bus greitai man vėl.
Šiuo atveju, mes tik naudojant MAX_HEIGHT vieną kartą.
Tai nereiškia, kad didelis vargo eiti
ir pakeiskite jį while cikle, jei jums reikia.
Tačiau programose, kur jūs nuorodas į tą patį magišką skaičių
vėl ir vėl, tai # define mechanizmas yra tikrai patogu
nes jums tiesiog pakeisti jį vieną kartą failo tai paprastai, kur jūs juos viršuje
ir pakeisti sunkiasi per likusią rinkmenos dalį.
>> Kitų dalykų, aš norėjau atkreipti dėmesį į šią užduotį, kad aš maniau, atrodė tikrai gražus,
kintamųjų pavadinimų.
Jūs čia matote, kad mes turime sveikasis skaičius kintamųjų, vadinamas eilutė ir vadinamas aukštis.
Erdves, maišos, ji padeda kodas šiek tiek lengviau skaityti,
daro tai šiek tiek labiau suprantama, kas iš tikrųjų vyksta.
Tai priešingai nei naudojant, tarkim, atsitiktines raides
arba tiesiog visiškai nesuprantama.
Paskutinis dalykas, aš atkreipti dėmesį yra tai, kad už kilpos,
Dažnai šie Iterator kintamieji, šie skaitikliai, kad jums naudoti savo kilpas,
ji standartas ir tradicinių pradėti juos arba i ir j, ir tada k
ir vyksta iš ten, jei jums reikia daugiau kintamųjų,
ir tai tik konvencija.
Yra daug konvencijos.
Tai priklauso nuo programavimo kalba, jūs naudojate.
Tačiau C, mes paprastai prasideda su i.
Tai nereiškia, kad prasminga naudoti, tarkim, a arba b
priklausomai nuo situacijos.
Štai ir viskas už šį vieną.
Jei dabar atsigriebti peržiūrima 2, matysite kitą Mario,
ir tai vienas yra panašus į kitą, kad mes tiesiog matė,
tačiau ji kažką tipo kietas.
Jei pažvelgsime į šiame skyriuje čia vidinis viduje už linijos,
jie naudoja nors crazy ieškote čia sintaksė šioje eilutėje.
Tai vadinama trijų komponentų operatorius.
Tai yra jei else, sutrauktos į vieną eilutę.
Sąlyga yra ši skliausteliuose.
Tai tolygu pasakymui, jei j <aukščio - i - 1.
Ir kas tada kad jų turinys, jei blokas bus erdvė
ir tada kas kita būtų turinys #.
Tai iš esmės priskirdami erdvę, į šį kintamąjį rodiklį.
Tai pradėti erdvę bendrosios kintamojo turinį,
jei ši sąlyga yra įvykdyta, ir jeigu ši sąlyga netenkinama,
blokas kintamasis gauna #.
Ir tada, žinoma, o ne kurti visą eilutę
ir spausdinti viską tame gale, šis sprendimas spausdina jį vieną simbolį vienu metu.
Gana kietas.
>> Dar pora dalykų pažvelgti. Mes pereiti godus.
Dabar, jei mes žiūrime į godus, tai pirmasis sprendimas
naudoja šias # apibrėžia gana šiek tiek.
Mes turime viena konstanta apibrėžta kiekviena skirtingais numeriais šioje programoje.
Mes turime vieną dolerio centų už, vienas ketvirčius, dimes, Nickels ir centus,
ir dabar, jei mes slinkite žemyn ir skaityti kodą,
matome standartinę do-while cikle spausdinimo viską.
Šios problemos esmė rūšies supranta, kad
jums reikia konvertuoti į plūdę, kad jums skaityti iš vartotojo iki sveikojo skaičiaus
tiksliai padaryti matematiką, ir tai yra todėl, kad
su slankaus kablelio skaičiais, kaip mes kalbėjome apie tai paskaitą trumpai
neįmanoma tiksliai atspindėti kiekvieną skaičių linijoje vertę
, nes yra be galo daug reikšmių tarp 3 ir, tarkim, 3,1 net.
Jūs galite turėti 3,01 ir 3,001 ir 3,0001, ir jūs galite nesustoti.
Pasirodo, kai dirbate su pinigais, dažnai norite konvertuoti
į sveikojo skaičiaus formatą, kad jūs ne prarasti centus ir kad daiktų rūšis.
Daryti, kad ir apvalinimo buvo raktas.
Šis tirpalas naudojamas visiškai paprastas, puikus algoritmą,
kuris decremented likusių centų skaičių, pirmiausia ketvirčius,
dimes, Nickels, tada centus,
ir pridedant prie monetų kiekvieną kartą.
>> Kitas sprendimas, kad mes pamatyti, kaip aš nutolinti ir pereiti prie peržiūrima 4,
pradžia buvo labai panaši, bet vietoj to naudojo div ir mod
, dešinę pusę užmetus ant čia apskaičiuoti centų.
Tai ketvirčius skaičius yra lygus centų skaičius, padalintas iš 25,
ir priežastis, tai veikia, nes mes darome, sveikasis skaičius pasidalijimas,
todėl reikia išpilti lauk bet kokia likusi.
[Studentų] Ar mes turime pakomentavęs paiešką?
Tai tikrai priklauso.
[Studentų] Jūs komentuodamas daugiau nei kodą čia.
Aha, ir todėl yra krūva skirtingų filosofijų apie tai.
Mano asmeninė filosofija yra tai, kad jūsų kodas yra tikrai tiesa,
kaip jūsų kodas yra, kas iš tikrųjų vykdyti kompiuteryje,
ir, kad jūsų kodas turi būti skaitomi kaip įmanoma, nereikėjo tiek daug komentarų.
Tai sakė, kai darai dalykus, kurie yra natūra sudėtinga matematiškai
arba algoritmiškai, tai gera komentarą, kad būtų galima
pridėti papildomą dimensiją, papildomą sluoksnį, kas skaito savo kodą.
Šių sprendimų, dažnai jie komentavo griežčiau, vien dėl to, kad
mes norime, kad būtų galima juos platinti ir, kad žmonės juos pasiimti
ir skaityti juos gana lengvai.
Bet tikrai, aš sutinku, kad tai yra sunkus.
[Studentų] Bet kai kyla abejonių, eikite sunkesnis?
Kai kyla abejonių, eikite sunkesnis.
Kai kurie žmonės kartais sako return 0 arba kažką panašaus, kad.
Manau, kad tai juokinga komentaras.
Aiškiai nurodyta, kad tai, kas vyksta.
Man nereikia anglų man pasakyti, kad.
Kartais žmonės rašyti stuff like "kthxbai!"
Kad koks mielas, bet taip pat ne
kad ne, todėl skirtumą tarp komentavimo taškų ar ne.
Šie rūšių komentarai tik ha, ha.
Cool.
>> Šiuo metu, pradėkime dirbti problemą, 3 skyrių klausimų.
Jei jus vaikinai traukti tai padaryti dar kartą,
kaip su praėjusia savaite, mes neketiname žiūrėti šortai šiame skyriuje.
Mes pranešime jums, vaikinai, padaryti, kad savo laiku, ir kalbėti apie klausimus.
Bet dabar šiame skyriuje mes ketinate praleisti šiek tiek daugiau laiko
kalbėti apie mažiau kodavimo pagrindai
kaip mes praeitą savaitę, ir vietoj to, mes ketiname daugiau dėmesio skirti
šiek tiek daugiau teorijos, todėl kalbame apie dvejetainis paieškos ir tada rūšiavimas.
Nuo Tiems iš jūsų, kurie buvo kartu su paskaitos,
gali kas nors duoti man, kas skirtumas yra Priminti
tarp dvejetainis paieškos ir tiesinė paieška?
Kas vyksta? Tikrai.
Tiesinių paieškos ieško per kiekvieną išrūšiuotų sąrašo elementas
vienas vienas vieną po vieną,
dvejetainis paieškos padalija sąrašą į 2 grupes,
patikrinimai Jei raktus vertės, kad jūs ieškote, yra didesnis arba mažesnis nei viduryje vertė
, kad jūs tiesiog rasti, ir, jei tai yra mažiau nei, jis eina su mažesniu sąrašą
ir tada suskirsto, kad vėl, ar tą pačią funkciją
visą kelią žemyn, kol jis suranda viduryje yra lygus pačios vertės.
Į dešinę.
>> Kodėl mums rūpi?
Kodėl mes kalbame apie dvejetainis paieškos palyginti su linijiniu paieškos?
Taip.
Dvejetainis yra daug greičiau, todėl, jei jums dvigubai problemos mastą
tai trunka dar vieną žingsnį, o ne du kartus daugiau.
Tiksliai.
Tai puikus atsakymas.
Linijinis paieška yra labai tikrinti vieną elementą vienu metu,
kaip matėme pačią pirmąją dieną paskaitos
, kai Dovydas nuėjo per savo telefonų knygos pavyzdys
ir kankina vieną puslapį, telefono knygos vienu metu
ir nuolat daro, kad ir vėl ir vėl,
ji ketina imtis jam tikrai ilgai rasti kas nors telefonų knygoje,
nebent, žinoma, jis ieško ką nors, pačioje pradžioje abėcėlės.
Dvejetainis paieškos, galite eiti daug greičiau,
ir tai ne tik du kartus taip greitai, arba 3 kartus taip greitai, arba 4 kartus greičiau.
Bet problema tampa mažesni ir mažesni ir mažesni daug greičiau.
Siekdama tai iliustruoti mes pradėsime kalbėti apie tai, kas vyksta
kai mes rašome Dvejetainė paieška.
Po ranka problema yra ta, kad jei aš turiu skaičių masyvo,
tarkim, 1, 2, 3, 5, 7, 23, 45, 78, 12.323,
ir tada 9 0S toną po jo,
mes norime, kad būtų galima tikrai greitai išsiaiškinti, kas yra
tai skaičių masyvas.
Aš žinau, tai atrodo šiek tiek kvailas ir šiek tiek nenatūralu,
nes dabar ji yra.
Mes turime labai daug elementų masyvą, kuris neturi,
ir jei aš prašau vieną iš jūsų išsiaiškinti, ar
23 yra masyve, galite tai padaryti gana greitai
tik skaitydamas tai ir man sako, "taip" arba "ne".
Analoginė apsvarstyti, yra, įsivaizduokite, jei tai būtų, tarkim,
10.000 eilučių, 20.000 eilučių Excel.
Žinoma, jūs galite padaryti, komandų F arba valdymo f ir atrodyti aukštyn.
Taip pat galite naudoti filtrus ir paieškos stuff
bet jeigu jums ieškoti per tą eilutę failo eilutė po eilutės,
tai užtruktų ilgai jį rasti.
Tai tipo, kaip telefonų knygos, pavyzdžiui, taip pat tais atvejais, kai
niekas atrodo per telefonų knygos viename puslapyje vienu metu.
Paprastai, jie atidaryti jį per vidurį,
arba telefonų knygų ir žodynų, kuriuose daug
jūs iš tikrųjų jį užpleištuotos pirmąją raidę,
pasukt į šį pirmąjį laišką, atidaryti ir pradėti vyksta per ten.
>> Priminti man savo vardą dar kartą. >> Sam.
Samas.
Kaip Sam sakė, kad linijinis paieškos procesas bus labai lėtas,
ir vietoj to, dvejetainis paieškos Kaip tai veikia, kad
kiekvieną kartą, kai mes pereiti per mūsų ieško algoritmo iteracija,
mes ketiname padalinti sąrašą per pusę, iš esmės,
į du mažesnius sąrašus.
Ir tada kitą iteracijos kilpos, mes padalinsime jį vėl
į kitų mažesnių sąrašus.
Kaip matote, problema nuolat vis mažiau ir mažesnių
nes mes nuolat Priegaudos išmetimas į jūrą pusę sąrašo kiekvieną kartą.
Kaip veikia ši priegaudos išmetimo į jūrą darbas?
Tik kaip priminimas, ką mes ketiname daryti, jei mes kompiuteris
ir mums buvo, tarkim, ieškant skaičiumi 5, šiame sąraše
yra tai, kad mes turėtume pasirinkti per vidurį.
Šio sąrašo viduryje, nes yra 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 numerių,
mes norime pasirinkti arba 4-ojoje padėtyje arba 5-oje padėtyje,
ir mes vadiname, kad mūsų sąraše viduryje.
Pasirinkti numerį viduryje.
Tada, kaip pasakė Sam, mes patikrinti, kad, jei šis skaičius yra lygus
į numerį, kad mes norime gauti ar mūsų norimą numerį.
, Jei tai lygūs, tada mes ją radau. Mes laimėti.
Jei ji nėra lygi, tada yra pora atvejų.
Du atvejai, skaičius turi būti didesnis nei skaičius, mes ieškome,
ar tai mažiau nei.
Jei tai didesnis, mes einame į dešinę.
Ir jei tai mažiau, mes einame į kairę.
Ir tada mes pakartoti visą procesą iš naujo
sąrašo arba dešinėje pusėje, arba kairę pusę.
>> Šiandienos skyriuje Pirmoji problema yra išsiaiškinti,
, kaip mes iš tikrųjų galėtų pradėti išreikšti tai C kodas.
Mes turime pseudocode čia.
Ką mes pradėti daryti aš atsigriebti visiškai naują erdvę,
išsaugoti šią peržiūrą, kad mes turime šias pastabas vėliau,
mes ištrinti visa tai, ir tada nukopijuokite ir įklijuokite problemą,
šią informaciją į mūsų erdves, ir, tikiuosi, tai nėra pertrauka.
Tobula.
Jei jus vaikinai tai padaryti, nukopijuokite ir įklijuokite šį kodą į savo naują erdvę,
į tuščią vienas.
Pabandykime Danielių. Jei sudaryti ir vykdyti šią programą, ji veikia?
Nr >> Koks jis sako?
Ji sako kontrolė pasiekia ne void funkcija pabaigą.
Taip, todėl leiskite man pabandyti paleisti jį.
Ar jums, vaikinai, matė tai anksčiau? Ar žinote, ką tai reiškia?
Gerai, tegul perpjauti šį šiek tiek.
Jis sako file.c on line 9, 1 stulpelis turime klaidą, kaip jūs sakėte,
ir ji sako, kad ji kyla iš klaidų perspėjimo ir grąžinimo tipą pateikiamas įspėjimas.
Atrodo, kad kažkas vyksta su grįžimo tipo, kuris turi prasmę.
Mes turime ne negaliojančiu funkciją, o tai reiškia, kad mes turime funkciją
negrąžina negaliojančiu.
Void funkcija yra vienas, kad atrodo taip:
void foo (), ir jis yra niekinis, nes grįžimo tipas yra niekinis,
tai reiškia, kad, jei mes turėjome kažką čia
kaip return 1, mes norime gauti už tai kompiliatorius klaida.
Tačiau, mes turime ne void funkcija.
Mūsų ne niekinė funkcija šiuo atveju yra mūsų paieškos funkcija
, nes jis turi grįžimo tipo Bool.
, Kai jis sako, kad kontrolė pasiekia ne void funkcija pabaigą,
tai reiškia, kad raktažodis neturi Grizimas.
Jis negrįžta nieko tipo Bool.
>> Mes galime nustatyti, kad ir ką jūs manote
turėtų grįžti paieška pagal nutylėjimą?
Koks turėtų būti pagal nutylėjimą paieškos gražinama reikšmė?
Todėl, kad tai, ką mes galime įdėti pabaigoje.
Charlotte, ar turite?
True arba false? >> TRUE arba FALSE.
Kuris iš jų?
Klaidinga. Nežinau.
Klaidingas? Pabandykime.
Kodėl norėtumėte pasakyti Return FALSE? Tai puiku intuicija.
[Charlotte] Nežinau.
Mes ketiname gražins false šiuo atveju, nes tai bus mūsų nutylėjimą
jei dėl kažkokių priežasčių sąrašas yra tuščias, arba adata
, kad jūs ieškote, neegzistuoja.
Tada pačioje pabaigoje, jei mes ne return true anksčiau šią funkciją,
visada žinome, kad ši funkcija bus pasakyti, Ne, tai nėra masyve.
Tai ne šieno kupetoje.
Dabar, jei mes sukompiliuoti ir paleisti tai leiskite man išsaugoti, kad mes galėtume ją ištraukite.
Dabar, jei mes sukompiliuoti ir paleisti mūsų programą, jis stato.
Mes gauti mūsų šiek tiek greitai.
Jei aš paspauskite 4-uh-oh.
Nespausdinami nieko. Atrodo, kad viskas baigėsi gerai.
Mes turime užpildyti šią in
Mes kalbėjome apie algoritmas pseudocode šiek tiek atgal.
Leiskite man pamatyti, išskyrus tai,
ir aš traukti, kad algoritmas atgal į viršų dar kartą.
Hito šį vaikiną. Nope.
Ji yra.
Kaip mes tai darome?
Kokia turėtų būti gera strategija pradeda išjungti šį kodą?
Jūs turite pasirinkti per vidurį.
Kaip mes pasirinkti numerį masyvo viduryje?
Kokių nors pasiūlymų?
[Studentų] strlen padalinti iš 2.
Strlen padalinti iš 2. Tai puikus.
Strlen darbai su specialių rūšių masyvų.
Kokių rūšių masyvų?
String matricos, simbolių masyvai.
Tai, kad tos pačios rūšies koncepcija, kad mes norime,
bet mes negalime naudoti strlen nes mes neturime simbolių masyvą.
Mes turime int masyvas.
Bet ką strlen gauti už mus?
Ar žinote, ką jis gauna už mus?
[Studentų] strlen gauna ilgį.
Tiksliai, ji pasireiškia mums ilgį.
Strlen gauna masyvo ilgį už mus.
>> Kaip mes gauname, kad į mūsų dvejetainis paieškos programa?
Kaip sužinoti masyvo ilgį?
[Studentų] strlen?
Tinkamai suformatuotas C styginių masyvo ilgį galite gauti su strlen.
Problema, nors, yra tai, kad mes neturime eilutę masyvo.
Jei šiuo kodu mes žiūrime atgal, mes turime šį sveikąjį skaičių masyvą.
Kaip mes žinome, kaip ilgai?
[Studentų] Ar yra lygiavertis pasekmės, kaip int l ar kažką?
Paaiškėjo, kad iš tikrųjų nėra, ir todėl tam tikra prasme, tai yra
vienas iš tų dalykų, kad tiesiog gera žinoti, apie C,
kad nėra jokio būdo sužinoti masyvo ilgį
jei visi, Aš duosiu jums yra masyvas.
Priežastis, ji dirba su stygos, strlen priežastis darbai,
nes jei eilutė būtų tinkamai suformatuotas,
ji turės, kad ypatingas \ 0 charakterį pačioje pabaigoje.
>> Jūs taip pat galite įsivaizduoti,, jei turite netinkamai suformatuotas eilutę
ir ten ne \ 0 charakteris, tada visa tai nėra dirbti.
[Studentų] Ar galite pridėti \ 0?
Mes galime šiuo atveju.
Mes gali pridėti kažkokią \ 0
arba kažkoks pažymintis pobūdžio, ir tada naudoti, kad.
Bet tai ne visai ketina dirbti
, nes \ 0 yra char tipo,
ir čia mes turime int.
Kitas dalykas yra, jei mes naudoti ypatingą vertę
kaip -1 pažymėti masyvo pabaigos
tada mes niekada negalėjo laikyti -1 mūsų sveikųjų skaičių masyvai.
Mes norime būti įstrigo.
Pasirodo, kad vienintelis būdas gauti ilgį
C masyvo yra faktiškai prisiminti
kai jūs jį, o po to perduoti jį aplink su masyvo
taip, kad, kai aš turėti funkciją, kuri ketina padaryti tam tikrą darbą,
masyvo sveikųjų skaičių ar plūdes arba padvigubėja ar tai, ką jūs,
Aš taip pat reikia suteikti funkciją, kad masyvo ilgį,
ir tai, ką mes padarėme čia, paieškos funkciją.
Jei jums atrodo, ką mes padarėme, kai mes pereiname mūsų masyvas čia,
mes taip pat perduoti ilgio, dydžio.
Jis tiesiog taip atsitinka, kad mes čia vadinamas šį kintamąjį,
šis parametras ar argumentas.
Tai vadinama funkcijos argumentas sąrašą arba parametrų sąrašas,
ir jie taip pat vadinami argumentai arba parametrus.
Žmonės naudoja skirtingus terminus skirtingu laiku.
Aš kartais sukeiskite juos sau.
Jis tiesiog taip atsitinka, kad šis kintamasis pavadintas panašiai
to # define čia.
Bet jie nėra tas pats dalykas.
Kapitalizacija tikrai svarbu.
>> Jei jums atrodo, kas vyksta čia, mes skelbiame
mūsų int masyvas, kuris mes vadinami numeriai.
Mes savo dydį, kuris atitinka mūsų # define viršuje.
Tai bus 8.
Ir tada, kai mes tada skambinkite į mūsų paieškos funkcija apačioje,
mes pereiname numerį mes norime ieškoti, mes raginami,
įgytas iš vartotojo.
Mes pereiname masyvą, šiuos numerius,
ir tada mes taip pat turi perduoti masyvo dydžio,
8 dydžio vertė pasireiškia saugomi
arba perduoti šį kintamąjį, vadinamas dydis.
Mes turime masyvo dydį.
Dabar, jei mes grįžti į tai, ką mes kalbame apie anksčiau,
Manau, kad Missy išvedė mintį, kad tai, ką reikia padaryti yra gauti iš masyvo ilgis
ir padalinsime jį į 2, ir kad duos mums viduryje.
Pažiūrėkime.
Galiu turėti ką nors rašyti ir išsaugokite jį į savo erdvę?
Kaip apie Leila?
Ar aš jums rašyti šią?
Rašyti pirmoje eilutėje, kur jūs imtis iš masyvo ilgį ir gauti viduryje
ir laikyti jį į naują kintamąjį.
Aš duosiu jums keletą sekundžių. Ar jūs pasiruošę?
[Studentų nesigirdi]
Žinoma, galėčiau Ar jūs apskaičiuoti viduryje
kaugė masyvo viduje paieškos funkcija
naudojant šieno kupetoje masyvo ilgį, kuris yra kintamas dydis?
Nieko sudėtinga čia.
[Leila] Tiesiog dydis / 2 ir "just-
Ir išsaugokite jį ir paspauskite mygtuką "Išsaugoti" čia viršuje,
ir mes ją ištraukite.
Tobula.
Čia mes eiti. Nuostabus.
>> Kaip yra, tai bus sudaryti?
[Leila] Ne, ji turi būti didesnė.
[Nate] Taip, taip, ką mes turime daryti?
[Leila] Kaip int Mediana ar kažką.
Nuostabus. Taip, galime tai padaryti, int viduryje = dydis.
Ar tai sudaryti?
Tegul ištrinti šį komentarą ir gauti jį iš kelio.
Kas nebus sudaryti apie tai?
Mes nieko nedaryti su sveikojo skaičiaus,
todėl mes turime jį išspausdinti ar kažkas panašaus.
Taip, tiksliai.
Mes susisieksime nenaudojamą kintamąjį.
Ką dar nesiruošia dirbti apie tai?
Manau, kad jūs kažką pasakė, Sam. Kabliataškiais.
Taip, aš trūksta šių kabliataškiais.
Jis bus pastovus dalykas visoje termino.
Paskutinis dalykas, aš padarysiu, aš įdėti tam tikrą tarpą iš abiejų pusių
šio operatoriaus čia, nes tai paprastai, kaip mes tai darome
pagal mūsų stiliaus vadove.
Mes turime mūsų masyvas įpusėjo.
Dabar, jei mes prisimename mūsų algoritmas,
tai, kas buvo antrasis žingsnis, kad mes turėjome daryti, kai mes turime viduryje?
[Studentų] Jei tai didesnis [nesigirdi].
Taip, kad mes turime padaryti kažkokią palyginimo, ir ką mes čia palyginti?
Jūs sakė, kad jei jis yra didesnis nei. Kas tai yra šiame sakinyje nuoroda į?
Skaičius, kuris ateina, jei tai didesnis nei vidurį, tada eiti į masyvą?
Tiksliai, todėl, kad ateina, kai mes-
Adata, todėl mes palyginti adatos,
ir ką mes, palyginti su adatos?
Nes adata yra tai, ko mes ieškome.
Mes lyginant jį patekti į vidurį.
>> Bet ar tai prasminga patikrinti,
jei adata = viduryje?
Ar tai prasminga?
Ar kas nors nesutinkate?
Leiskite give it a try, jei (adatos == viduryje).
[Studentų] Ar printf jūs ją radau.
[Nate] printf ("Mes radome \ n");
Kitaip-Aš ketina pradėti daryti kažką kita čia.
Aš ruošiuosi pradėti naudoti petnešos aplink, jei ataskaitų visą laiką
tik todėl, kad, jei mes pridėti daugiau daiktų, po to
mes negalime gauti kompiliatorius.
Taip, Sam. Jūs turite tašką.
Problema ta, kad viduryje atstovauja poziciją masyve,
, bet jūs galite gauti jį atstovauti toje masyvo pozicijos vertę.
Tai puikus klausimas.
Ar visi išgirsti, ką pasakė Sam?
Jis sakė, kad viduryje yra
atstovauja tik masyvo poziciją, tačiau tai nėra faktinis elementas masyve.
Jei manote, kad apie kodą, kaip parašyta dabar,
, jei pažvelgsime į šio masyvo žemyn čia, kuris turi 8 elementai
kas yra viduryje bus šią funkciją vertė?
[Studentų] 4.
[Nate] 4.
Jei mes ieškome skaičiumi 4 -
ir mes galime tiesiog paleisti šį kodą ir įdėti šiek tiek liūdna veido čia
nes mes neturėjome rasti tai, jei mes paleisti šį kodą
kaip yra dabar, įkelti jį, statybos, leiskite man slinkti žemyn,
ir jei mes ieškome skaičiumi 4,
mes nustatėme, bet mes ne gauti tai printf taip.
Viena iš priežasčių yra tai, kad mes ne return true,
bet ar mes tikrai rasti 4?
Ir Sam sakydamas "ne".
Ką mes rasti?
Mes tikrai rado viduryje, o jei mes žiūrime į masyvo žemyn čia,
tai bus 4 indeksuoti elementas, kad mes ieškome,
kuris yra 23.
>> Kaip mes faktiškai gauti per vidurį, kad elementas
ir ne tik viduryje?
[Studentų] Mes norėtume įvesti char arba kažkas?
Ką tai padaryti, tiesiog iš smalsumo?
Ar galite detaliau paaiškinti šiek tiek daugiau?
Jūs turite pakeisti padėtį į numerį,
todėl jūs turite padaryti tam tikrą ryšį, aš manau, kad char, bet ji gali būti.
Taip, tai gera vieta.
Mes jau daro daug šio konvertuojančio pozicijų į simbolių, šių simbolių,
pirmųjų dviejų probleminių rinkinių.
Pasirodo, kad čia, tai yra beveik panašios į
patekti i-osios eilutės požymį, jei tai turi prasmę.
Čia mes norime pasiekti viduryje elementas.
Kaip mes tai darome?
Kevin, jūs turite kokių nors pasiūlymų, kaip mes galime padaryti, kad?
Jūs galite padaryti, kaugė, skliaustai atidaromi, viduryje, uždarytas laikiklį.
Ar rašote, kad už mus?
Išsaugokite jį čia, ir mes traukti, kad iki.
Mes ieškome šioje eilutėje 9,
ir mes supranta, kad mes nenorime, palyginti adatą į vidurį,
bet vietoj to, mes norime palyginti adatą
padėtyje Mediana per mūsų kaugė masyvo elementas.
Cool.
Čia mes eiti.
Taip, kad atrodo gana gerai, jei (adatos == kaugė [viduryje]).
Mes radome jį.
Dabar, jei mes paleisti kodas-Mes šiek tiek atgal į viršų-
, ji veikia, ji rengia ir dabar, jei mes ieškome 4,
neradome, nes dabar mes iš tikrųjų gauti skaičių 23.
Mes vis vertė 23, o tai, ką mes, lyginant su mūsų adata.
Bet tai gerai. Tai yra žingsnis teisinga kryptimi.
>> Kad tai, ką mes bandome padaryti.
Mes nebandome palyginti adatą nuo masyvo pozicijų
bet atsižvelgiant į faktinių masyvo elementų.
Jei pažvelgsime atgal dabar sekantį žingsnį mūsų algoritmas,
kas yra kitas žingsnis?
Leila jau minėta trumpai.
[Studentų] Patikrinkite, pamatyti, jei jis didesnis arba mažesnis nei ir tada nuspręsti, kuriuo keliu judėti.
[Nate] Taip, taip, kaip tai darome, kad?
Jūs galite įdėti kai kuriose I'll išsaugoti šią peržiūrą,
ir tada, jei jūs įtraukėte į eilučių, kad bus padaryti, kad.
Taip, Charlotte. >> Turiu klausimą.
Neturėtų būti viduryje - 1, nes pirmas dalykas,
tai 0 indeksuoti, todėl, jei mes įdėti 4, kad iš tikrųjų tai ne personažas, mes ieškome?
Taip, ir su kita problema-
tai puikus laimikis, nes tai, kas ketina baigti vyksta galbūt
, jei mes nuolat juda, o mes neturime kada reguliuoti iš pradžių?
Manau, ką mes galime galų gale padaryti bando prisijungti prie
į 8-osios pozicijos masyvo elementas,
, kuris šiuo atveju neegzistuoja.
Mes už tai nori padaryti kažkokią apskaitos
kad mes turime šiek tiek nulio indeksavimo.
[Charlotte] Atsiprašau, aš reiškė įpusėjo - 1 laužtiniuose skliaustuose.
Mes galime tai padaryti.
Mes grįžti prie šio klausimo, tik šiek tiek.
Kai mes pradedame patekti į faktinį Looping,
tai, kai mes tikrai pamatyti ateiti į žaidimą.
Šiuo metu, mes galime tai padaryti, bet jūs visiškai teisus.
,, Kad nulio indeksavimo turės įtakos, kad mes turime sudaryti.
Pažiūrėkime.
>> Kaip yra didesnis nei ir mažiau nei-?
[Studentų] gaunu kaip padaryti didesnis nei ir mažiau nei dalis.
Aš tiesiog nebuvo tikras, ką spausdinti, jei jūs suprato, kad tai yra mažiau nei šieno kupetoje Mediana, arba didesnis nei.
Čia aš galiu išsaugoti tai, ką I've-
[Nate] Taip, jei jums išsaugoti tai, ką turite, ir mes pasistengsime ją ištraukite.
Čia mes eiti.
[Studentų] Ir aš įdėti klaustukų, ką aš nežinojau.
[Nate] Tai atrodo puikiai.
Čia mes turime klaustukų, nes mes vis dar nežinome,
tai, ką mes ketiname gana padaryti dar.
Ką mes norime, do-Oi, mes turime keletą petnešos visi mus funky.
Mes pakeisime šiuos petnešos.
Čia mes eiti.
Ir taip ką mes norime daryti, pagal algoritmą,
jei mes negalime rasti adatą?
Tuo atveju, pasakyti, kad adata yra mažesnė nei tai, ką mes ieškome. Kevin.
Tik pažvelgti į kairę pusę.
Teisus, todėl mes įdėti komentarą čia, kad sako: "pažvelgti į kairę pusę.
Adata ir, jei yra didesnis nei per vidurį šieno kupetoje, ką norime daryti?
[Studentų] Tada jums pažvelgti į dešinėje pusėje.
Pažvelgti į dešinėje pusėje, dešinėje pusėje. "
Ne per skurdus.
Gerai, kad šiuo metu, ko ieškote gana gera.
Kodą, kaip parašyta problema yra tai, ką?
[Studentų] Jūs neturite baigtys, už per pusę.
Teisus, mes neturime baigtys, už per pusę.
Mes taip pat tik ketina pereiti per vieną kartą.
Mes tik ketiname ieškoti vienu Mediana.
Arba elementas yra, ar taip nėra.
Siekiant užbaigti tai, mes jums reikia padaryti kažkokią pakartotos.
Mums reikia nuolat kartoti, kol mes, kad
arba elementas yra ten, nes mes susiaurinta ir pagaliau rado,
ar tai ne ten, nes mes pažvelgė per visų dalykų
atitinkamų masyvo pusės ir nustatė, kad ten nieko nėra.
>> Kiekvieną kartą, kai mes turime tai kartojimas vyksta, ką mes ketiname naudoti?
[Studentų] kilpa.
Kai kilpa rūšiuoti. Taip.
[Studentų] Ar mes darome do-while cikle ir turi tai padaryti, kad ir tada, o
nėra lygi-Aš nežinote, kur einu su adata.
Bet natūra, kaip padaryti, kad tol, kol ji nėra lygi, kad naudotojo įvesties vertė.
Taip, todėl pažiūrėkime, kaip tai galėtų rašyti save?
Jūs pasakėte, galime naudoti do-while cikle.
Kur gi daryti pradėti?
[Student] Iškart po / 2 dydžio.
[Nate] Gerai, o ką mes ketiname daryti?
Mes užpildyti, o vėliau.
Ką mes ketiname daryti?
[Studentų] Ar mes norime padaryti, visų dalykų, mes turime jei dalis?
[Nate] Ar visa tai stuff, nuostabu.
Kopijuoti ir įklijuoti.
Oh, vyras.
Leiskite pamatyti, jei tai veikia, jei mes galime skirtukas tai per.
Gražus.
Gerai, ir mes išgelbėti, todėl jūs vaikinai turite.
Viskas bus gerai, ir mes ketiname tai padaryti, o
tai, kas buvo, o būklė, jums buvo po?
[Studentų] Nors adata nėra lygi, todėl kaip wykrzyknikiem.
Tačiau aš nesu įsitikinęs, ką dar.
[Nate] Taip, tai yra vienas iš būdų tai padaryti.
Sam, turite pastabų?
[Sam] aš prisiminiau, kai aš pažvelgė į vaizdo įrašus,
Aš paėmė vieno-kaip ekrano, kai mes padarėme pseudocode už tai,
ten buvo kai santykiai tarp max ir min.
Manau, tai buvo kažkas panašaus, jei max yra vis mažiau ir mažiau nei min.
Gavo jį.
[Sam] Arba, pavyzdžiui, jei max yra ne mažiau nei min ar kažką panašaus, kad,
nes tai reikštų, kad jūs ieškojote viską.
>> Taip, taip, tai ką jis skamba kaip max ir min rėmėsi?
[Sam] Vertybės, kad sveikieji skaičiai, kurie ketina keisti
, palyginti su kai mes viduryje.
Tiksliai.
[Sam] Tuo metu jis ketina [nesigirdi] apskaičiuoti max ir min.
Midpoint tai max ir min idėja.
Ar tai prasminga, kad žmonės?
Jeigu mes buvo pradėti žiūri, kaip mes ketiname tai padaryti iteracijos,
jūs visiškai teisus, kad mes norime naudoti kažkokią do-while cikle.
Bet aš manau, jei mes prisimename, kas vyksta šio masyvo vietoje
ir tai, kas iš tikrųjų vyksta-Aš einu rašyti čia
labai pirmajam iteracijos procesui dvejetainis paieškos, mes turime
Aš ketinate naudoti B ir E žymi pradžią.
Ir tada mūsų masyvas pabaiga.
Mes žinome, kad pradžia yra 4 dešinę čia,
ir mes žinome, kad galas yra bent 108.
Pasakykite, mes ieškome už skaičių 15.
Pirmas kartas, mes tai darome, kaip matėme anksčiau,
viduryje arba bus 16 arba 23
priklausomai nuo to, kaip mes galime apskaičiuoti daiktus iš.
Kadangi tolygiai padalinant viduryje suteiktų mums šią erdvę
nuo 16 iki 23, mes negali tolygiai padalinti jį
arba padalinti ir gauti tikrą Mediana.
Mes pažvelgti į 16.
Mes suprasti: "Ei, 16> 15, kad mes ieškome."
Tada pažvelgti į kairę pusę masyvo
ką mes galų gale padaryti šalinti "
tai visa viršutinė dalis
ir sako: "Gerai, dabar mūsų vertinamoji baigtis bus čia".
Kito pakartojimo mūsų kilpa, mes dabar ieškote šio masyvo,
efektyviai išpylus šią dalį, nes dabar
jei mes viduryje būti skirtumas tarp pradžios ir pabaigos,
mes rasti mūsų viduryje, gali būti 8,
kuriuos tada galima išbandyti 8 pamatyti, kur jis yra, palyginti su skaičiumi, mes ieškome,
15, kad 15 yra didesnis,
todėl mes turime pereiti prie dešiniajame sąraše,
kuriuos mes žinome, nes mes, žmonės, ir mes galime matyti.
Mes žinome, kad teisė dalis bus ten, kur mes galime ją rasti,
bet kompiuteris nežino, kad tai, ką mes padarysime mes iš tikrųjų
tai eiti, o dabar pradžia ir pabaiga
yra toje pačioje vietoje,, todėl viduryje tampa tik numeris sąraše tuo momentu,
kuris yra 15, ir mes ją radau.
Ar tai mesti šiek tiek šviesos, kur vyksta visa ši max ir min notacijos,
masyvo parametrus sekti, siekiant išsiaiškinti,
kaip mažinti dalykų žemyn?
>> , Kas nutiktų, jeigu tai nėra lygi 15?
Ką daryti, jei mes ieškojome 15 ir, vietoj to, šis skaičius taip pat buvo 16?
Mes norime pasakyti: "O, tai didesnis.
Mes norime grįžti į kairę ".
Ir mes perkelti mūsų e į dešinę,
tuo momentu turime vertinamoji baigtis, kad būtų prieštaringi.
Jis negalėtų ieškoti bet daugiau elementų
nes dabar mes turime vertinamoji baigtis ir mūsų pradžios taškas,
mūsų max ir mūsų min, dabar yra apversta.
Mes paiešką per visą masyvą. Mes negalime rasti nieko.
Tai taškas, kuriame mes norime noriu pasakyti: "Gerai, mes ketiname nutraukti šį algoritmą.
Mums nepavyko rasti nieko. Mes žinome, tai ne čia. "
Kaip tai vyksta?
[Studentų] Kaip tiksliai veikia kompiuteris pereiti prie pabaigos?
Kaip pabaigoje, prieš prasidedant?
Pabaigoje baigiasi prieš prasidedant
dėl matematikos, kad mes ketiname daryti kiekvieną kartą, kai mes tai darome.
Mes apsikeitimo būdas yra, jei peržvelgsite pirmą kartą, mes tai darome apsikeitimo sandorius,
kur mes turime už 4 pradžią ir pabaigą
žemyn 108 būdas ir mūsų viduryje, tarkim, 16 -
Aš einu iš naujo nustatyti šį atgal į 15-jei mes ieškome už 15,
mes žinojome, kad tai, ką mes padarėme, kai mes patikrinome 16 ir pamačiau, kad jis buvo didesnis
ir norėjo išmesti visą dešiniajame sąraše,
pamatėme, kad tai, ką mes norėjome padaryti čia perkelti šį el.
Efektyviai, e gavo perkelta iki vidurį.
Be to, kai mes padarėme šį algoritmo iteracijos
viduryje buvo 8,
mes nustatėme, kad 8 <15, todėl norėjome perkelti B
vienas pro vidurį.
Dabar, pradžia ir pabaiga yra abu kartu šiuo 15.
>> Jei būtume vyksta ieškoti kokios nors kitos vertės, o ne 15,
arba, jei tai 15, o ne 16,
būtume nustatė, kad e norime perkelti vieną prieš vidurį.
Dabar bus ten e apversta mažiau nei b.
Leiskite eiti per tai, kaip mes iš tikrųjų baigti kodavimo šį algoritmą.
Mes žinome, kad mes norime, kad šis Midpoint skaičiavimą.
Taip pat žinome, kad mes norime sekti masyvo pradžią ir pabaigą
mūsų dabartinės masyvas, todėl mes galime išsiaiškinti,
tai kairėje pusėje sąraše yra ir kur sąrašo dešinėje pusėje.
Mes tai padarysime su arba prasideda ir baigiasi,
arba mes galime paskambinti min ir max.
Aš naudoti pradėti ir baigti šį kartą.
Kai mes pradedame, jei mes žiūrime atgal mūsų pavyzdyje čia,
mūsų pradžia buvo iš masyvo į pačią pradžią, kaip natūralus.
, Ką indeksas? Ką reikėtų mūsų pradėti?
Danielius.
[Daniel] šieno kupetoje [0].
[Nate] Taip, kad mes galime nustatyti, kad jis lygus šieno kupetoje [0].
Problema, nors, yra tai, kad suteikia mums ne pirmojo elemento poziciją.
Tai suteikia mums pirmojo elemento arba faktinės vertės indeksą tuo pirmąją poziciją.
[Studentų] Tai bus konvertuoti į 0,20?
[Nate] Kas tai padarys-gerai, ji negali padaryti bet Konvertavimas.
Ką ji darys, jie bus saugomi 4, pradėti,
ir tada ji bus sunku, kad būtų galima palyginti prieš pradėti
nes begin surengs 4 vertę,
kuris yra mūsų masyvas pradžia,
tačiau mes norime sekti masyvo indeksai
, palyginti su vertėmis.
Mes iš tikrųjų naudoti "0", kaip kad.
Už-Charlotte masyvo pabaigos, iki šiek tiek anksčiau.
Tai kur mes atsižvelgti į nulinį indeksavimo.
>> Charlotte, kas masyvo pabaigos?
Kas yra pabaigos indeksas?
[Charlotte] Dydis - 1.
Aha, ir kurių dydis turėtume naudoti?
Mes turėtume naudoti kapitalo dydžio arba mažosiomis dydį?
Kapitalo dydis.
Šiuo atveju, mes galime naudoti kapitalo dydžio.
Jei norime, ši funkcija turi būti nešiojamas
ir naudoti šią funkciją kitose programose,
mes iš tikrųjų galite naudoti mažąją dydį.
Tai gerai.
Bet Charlotte yra visiškai teisinga, kad mes norime, kad dydis - 1.
Šiuo metu-
[Studentų] Kaip tai yra, kad jūs galite naudoti didžiąją dydį?
Kaip tai, kad mes galime naudoti didžiąsias dydį?
Pasirodo, kad tai # apibrėžia tikrai,
po gaubtu, tekstą, kaip rasti ir pakeisti, jei tai turi prasmę.
Kai renka savo kodą, pirminio apdorojimo etapas
kompiliatorių eina per failą,
ir atrodo visur, kad rašėte kapitalo dydžio,
ir pakeičia šį tekstą pažodžiui su 8, kaip kad.
Ta prasme, tai labai skiriasi nuo kintamojo.
Tai nereiškia, imtis bet kokios vietos atmintyje.
Tai paprastas tekstas, pakeiskite triukas.
Šiuo atveju, mes ketiname naudoti dydžio.
Iš čia mes norime padaryti kažkokią pakartotos,
ir mes teisingame kelyje su do-while cikle.
Mes norime daryti kažką, kol sąlyga neturi nebėra,
kaip matėme anksčiau, mes matome, kad ši sąlyga
iš tikrųjų buvo, kad mes nenorime pabaigą
būti mažesnis nei pradėti.
>> Tai yra mūsų sustojimo sąlyga.
Jei taip atsitinka, mes norime sustoti ir paskelbti, pavyzdžiui, "Ei, mes nebuvo rasta nieko".
Išreikšti tai, mes norime naudoti kažkokią kilpoje.
Šiuo atveju, tai do-while cikle, už linijos, o linijos?
Mes turime do-while cikle čia.
Ar jūs vaikinai, kaip šį požiūrį?
Ar manote, kad turėtume pabandyti kitokį požiūrį?
Kevin, kokių nors minčių?
Galėtume turėti while cikle, nes mes žinome, ne daugiau
būtų didesnis nei pradžios anyways min.
Taip, kad nėra iniciacijos, kad turi įvykti.
Šie do-o kilpos puikus, kai jūs turite kažką inicijuoti
prieš testując, nors čia
mes žinome, kad esate nesiruošia išlaikyti reinitializing tiek prasideda ir baigiasi
kiekvienas iš kilpos apvalios.
Mes žinome, kad mes norime inicijuoti juos, tada patikrinkite mūsų būklę.
Šiuo atveju, aš iš tikrųjų eiti su paprasta while cikle.
It turns out, kad do-o kilpos naudojamos gana retai.
Vietų, daug nereikia net mokyti nereikia, o kilpos.
Jie gerai tvarkyti vartotojo įvestį, todėl mes matėme daug jų iki šiol.
Bet normalus, o kilpos daug daugiau bendro.
Pasirodo, kad ši sąlyga, kaip parašyta
nebus tikrai mums daug gero, ir kodėl taip yra?
Aš atsiprašau, aš nežinau savo vardą.
Aš esu Džeris. >> Atsiprašome?
Tai B-O-R-U-Aš.
O, gerai.
Aš nematau, mano sąraše.
O, tai nes-oh, kad prasminga.
Ar turite idėją, kodėl tai while cikle gali neveikti taip, kaip buvo numatyta,
kaip parašyta su sąlyga?
[Džeris] Tu turi omeny, kaip jūs norite visus medžiagos po to, kai į?
Taip, taip, kad vienas.
Mes gali turėti įdėti visą šią medžiagą į while cikle, kuris yra visiškai teisinga.
Kitas dalykas, kad yra šiek tiek daugiau problemų, nors, yra tai, kad ši sąlyga neveikia.
[Studentų] Jums reikia apversti jį.
Teisus, todėl ši sąlyga nebus kada nors bus tiesa, iš pradžių mes kalbėjome apie tai.
Mes norime daryti kažką, kol prasideda end <
bet mes norime padaryti ką nors
pradėti ≤ pabaigą.
>> Yra, kad logika, atstatymas.
Esu kaltas, kad šias klaidas visą laiką.
[Studentų] Kodėl ji turi būti mažesnė kaip arba lygi?
Nes Do You Remember bylą, kad mes turime
ten, kur buvo tik vienas iš elementų, ir mes, buvo nustatytas,
ir mes ieškojome ne tik 15 mūsų masyvas?
Ir mūsų pradžia ir mūsų pabaiga buvo tas pats elementas.
Mes norime įsitikinti, kad mes tvarkome, kad bylą.
Jei mes tai tiesiai mažiau nei
mes tik galės kibti į 2-elementų masyvas.
Kai mes turime Tas paskutinis elementas, jei tai buvo mūsų elementas, mes niekada suprato, kad tai yra.
Dabar čia, mes galime padaryti tiksliai taip, kaip jums buvo pasakyti.
Mes galime pradėti plopping stuff tiesiai į mūsų while cikle viduryje.
Mes galime pūkštelėti į mūsų Mediana.
Mes galime imtis visų šių if,
juos ištraukti šio do-while cikle,
pūkštelėti juos,
valyti viską šiek tiek,
ir aš eiti į priekį ir išsaugoti šią peržiūrą.
Ir šiuo metu, mes vis gana arti.
Samas.
Manau, kad jūs taip pat turi turėti LC Midpoint = Dydis - 1/2.
Gavo tai, dydis - 1/2.
Ar dar ką nors, mes turime pakeisti apie tos linijos?
Tai buvo geras laimikis.
>> Ką dydis daryti? Mes nuolat kinta dydį?
Siekiant išlaikyti šią eilutę, mes turime keisti dydį.
Mes turime pakeisti dydį kiekvieną kartą, mes einame aplink už linijos.
Bet atsimenu, kai mes išgyvena mūsų pavyzdyje, tik šiek tiek anksčiau,
ir mes turėjome pradžią 4
ir pabaiga per ne 108?
Kaip mes apskaičiuoti viduryje?
Mes buvome dydį?
Ar mes buvome naudojant prasideda ir baigiasi, o ne?
Tai skirtumas tarp Pabaiga ir pradžia.
Tiksliai, ir kaip tiksliai man reikia rašyti, kad, Charlotte?
Tiesiog baigti pradėti.
Jums nereikia daryti - 1
nes - 1 buvo galų gale ir pradėti jau.
[Nate] Puiku, jūs visiškai į dešinę.
Mes neturime padaryti, nes tai - 1 - 1 buvo įtrauktas
ir sudarė, kai mes inicijuoti pabaigos kintamąjį.
>> Ar dar ką nors, man reikia padaryti, sintaksės, kad ši eilutė prasmės?
[Studentų] Plius pradėti. >> Plius pradėti?
[Studentų] pabaigoje.
, Nes jis skaičiuojamos tik pusę ilgio.
Jums reikia pridėti pradžioje.
[Nate] Ką tai apskaičiuoti už mus?
Jei mes galvojame apie pabaigos šiame pirmajame iteracijos kilpos,
pabaiga bus padėtyje indekso 7.
Pradėti yra "0" padėtį.
Nepamirškite, kad mes ieškome arba
padėtis 3 arba 4 pozicija.
Jei pažvelgsime į šio matematikos, tik, kad ji šiek tiek labiau apčiuopiamas,
įdėti kelis telefonų numerius čia, turime 7, 0,
taip 7 - 0, ir tada / 2
sveikasis skaičius padalijimo 3 yra tai, kad yra.
Tada mums reikia, tada pridėkite mūsų pradėti?
Mes ne šiuo atveju.
Labai pirmajam iteracijos procesui, tai bus gerai, nes pradėti yra 0.
Bet kaip mes pažangą, mes tikrai visi, tiesiog reikia
pabaiga - pradėti / 2.
Yra vienas kitas triukas čia, ir kad yra būtent vienas iš pirmumo.
[Studentų] Ar mums reikia skliaustus?
[Nate] Būtent, ir tai todėl, kad, jei mes neturime šiuos skliaustus,
tada ši eilutė bus būti aiškinama
(pabaiga) - (pradėti / 2), kurį mes tikrai nenoriu.
Watch out for šių pirmumo taisyklės.
[Studentų] Kodėl ne baigti + pradėti?
Kodėl nėra tai baigti + pradėti?
[Studentų] Kodėl tai yra ne tai, kad?
Kodėl tai būtų +?
Aš manau, kad tu teisus.
[Studentų] Nes tai vidurkis?
[Nate] Galinė + prasideda, jūs visiškai teisus.
Oho, aš visiškai goofed. Tu teisus.
Jei mes darome minuso ženklą, mes norime pridėti prasidėti atgal.
Šiuo atveju, jūs esate labai teisus, kad mes norime imtis dviejų vidutinių,
todėl mes norime pridėti, o ne atimti.
[Studentų] Jis taip pat dirbti, jei tu galą - pradėti / 2 + pradėti.
Tai jei mes darome Manau, taip.
>> Pavyzdžiui, jei mes ieškojome ne pradėti,
ir mes persikėlė čia
15 d.
Dabar pradėti 2 padėtyje.
Pabaiga yra 7 padėtyje.
Jei mes atimti juos, mes gauname 5.
Padalinti, kad iš 2, gausime: 2.
Ir tada pridedame 2 atgal,
ir, kad jis pasireiškia mums į 4 padėtį,
, kuris yra čia, kuris yra viduryje.
[Studentų] Ar mums reikia rūpintis vyniojimo?
Kokia prasme mums reikia rūpintis įpakavimo?
Jei suma arba skirtumas tarp
priklausomai nuo to, kaip mes tai darome ne lyginis skaičius.
Tada kompiuteris sutrinki ar kai jis 2,5;
jums judėti į kairę arba į dešinę nuspręsti, kuris yra viduryje?
Gavo jį.
Pasirodo, kad sveikasis skaičius padalijimo,
mes neturime kada nors gauti šias slankiojo kablelio skaičius.
Mes niekada dešimtųjų.
Tai visiškai išmesti.
Jei turite kompiuteris padalinti du int kintamieji,
ir vienas yra 7, o kita yra 2,
jūs negausite 3,5, kaip rezultatas.
Jis gaus 3.
Likusi dalis bus išmesti, todėl efektyviai apvalinimo
ne apvalus, o grindų, jei jus vaikinai yra susipažinę su matematika,
kur jūs visiškai išmesti dešimtainį kablelį,
ir taip jūs iš esmės trumpinimo jį žemyn iki artimiausio
visa pozicija, iki artimiausio sveikojo skaičiaus.
[Studentų] Bet tada tai problematiška, nes jei turite 7 elementų masyvas
tada automatiškai užima 3-ią elementą iš, o ne 4-oji Mediana.
Kaip mes susidoroti su tuo?
Tai problemiška, nes, jei mes turėjome iš 7 masyvo,
jis būtų pasiimti vietoj 4-oji 3.
Gal galėtumėte paaiškinti šiek tiek daugiau?
[Studentų] Nes jeigu tu turi 7 elementus, po to 4-ąjį elementą
būtų viduryje, tiesa?
Įsiminti komentarą apie būti nulis indeksuoti, nors.
[Studentų] Taip, kad 3 pozicijoje. , Kad būtų viduryje.
Taip.
O, gerai. Suprantu, ką turi galvoje.
Tai tipo keista, kaip mes priprasti prie visos šios sąvokos
atsikratyti po kablelio.
Tai puikus klausimas.
Leiskite baigti tai padaryti.
Mes apskaičiavome, mūsų įpusėjo.
>> Bandome, nes norime pamatyti, jei mūsų adata yra lygi vidutinės reikšmės.
Mes spausdinti, kad mes nustatėme, bet iš tikrųjų, ką mes norime daryti šioje situacijoje?
Mes pastebėjome, kad mes norime, skambinantysis žino, kad mes nustatėme, kad.
Mes turime funkciją, kuri Būlio įvedėte funkcija.
Tai, kaip mes signalizuoja, kad mūsų funkcija skambinančiojo, kad mes pasiruošę eiti
mes sakome: "Ei, tai yra tiesa."
Kaip mes tai padarysime, Kevin?
Jūs linksinčią galvą. >> [Kevin] Pridėti grąža tiesa.
[Nate] Būtent, return true.
Dabar, jei jis nėra lygus, kaip mes pažvelgti į kairę pusę?
Any ideas?
Stella, kokių nors idėjų?
Jums reikia nustatyti naują pabaigos poziciją.
Taip.
Taigi, mes turime padaryti, viduriniojo taško padėtį - The End.
Didysis.
Mums reikia nustatyti naują poziciją, galų gale
pažvelgti į kairę pusę.
Tai, ką mes kalbėjome apie tai prieš kur
Aš nuolat grįžta į šiame pavyzdyje.
Aš pradėti čia, ir tada aš galų gale, visi per čia.
>> Vėlgi, jei mes ieškome 15, ir mūsų Mediana yra 16,
ir mes suprantame, kad "Oi, 16 yra didesnis.
Mes norime judėti į kairę pusę. "
Mes tuomet perkelti pabaigoje į 15,
ir tai mes darome, imdamasi vienos atokiau nuo vidurį
ir nustatyti, kad mūsų naują pabaigoje.
Be to, jei norime pažvelgti į dešinėje pusėje, kaip mes darome tai?
Ar turite idėją?
[Studentų] Jūs tiesiog nustatyti pradėti Midpoint + 1.
[Nate] Didysis.
Ir dabar tuo atveju, kad mes negali rasti nieko,
kad gauti pasirūpinta už mus?
Daniel, kad gauti pasirūpinta už mus?
[Daniel] L.
[Nate] Jei mes jį per visą masyvą ir mes negalime rasti nieko,
kur būtų pasirūpinta, ar mes turėtume rūpintis ji?
[Daniel] o sąlyga.
[Nate] Taip, o būklė, tiksliai.
Ji rūpinsis išgyvena visą masyvą, jei mes negalime rasti nieko.
Tai, o kilpa baigsis.
Mes niekada susidūrė su šią sąlygą,
ir mes galime grįžti klaidinga.
Mes taip pat galime palikti tai, jei čia kaip tai
nes jei tuo atveju, jei teiginys yra teisingas,
ir mūsų funkcija sugrįš,
ir todėl mes iš esmės nutraukti tai šiuo metu funkcija
kai mes grįžti tiesa.
Bet kas atsitinka, šios struktūros čia?
Ar šis darbas visiškai, ar yra tam tikra loginė klaida ten?
>> Yra tam tikra loginė klaida ten, su tuo, kaip jis įsteigtas.
Ką jis galėtų būti?
[Studentų] Kodėl jums reikia - ir + 1s?
, Kuris nustato mūsų masyvas iki mūsų naują kairėje pusėje ir Dešinė pusė.
[Studentų] Bet kodėl negalėjo jums tai padaryti be - 1s ir + 1s?
[Nate] Mes galime nustatyti, kad jis lygus vidurį?
Kas gali būti problematiška?
[Studentų] Manau, kad tai neefektyvus, nes jūs patikrinti vertę, kuri jau buvo patikrinta.
[Nate] Būtent, todėl Sam yra visiškai teisus.
Jei nustatysite pabaigos ir pradėti lygus vidurį
vietoj - 1 iki + 1 refleksyviai,
tam tikru momentu ateityje mes galų gale vėl patikrinti viduryje.
[Studentų] aš pradėjau pset, ir tada aš kažką panašaus, kad
Aš pamiršau + 1, ir ji įstrigo begalinis ciklas.
Teisūs, nes tam tikru momentu jūs niekada gauti prasideda ir baigiasi
iš tikrųjų iš dalies sutampa.
Cool.
Yra dar vienas loginis trūkumas, ir tai yra tai, kad tikrai turėtų būti
else if.
Kodėl gali būti?
>> Taip yra todėl, jei tai ne dar, jei jūs jį pamatyti, Kevin?
[Kevin] Taip, nes jūs pakeičiant pabaigos tašką.
[Nate] Būtent.
Mes keičiamės vertinamoji baigtis,
ir, jei jis parašytas kaip šis-Mes tarpų tarp-
ji bus patikrinti šį atvejį.
Šiuo atveju, jei tai pavyks, bus nutraukti funkcijos.
Tada jis bus patikrinti šį kitą bylą,
ir jei tai pavyksta, jis bus pritaikyti vertinamoji baigtis,
ir tada jis bus toliau ir patikrinti šį atvejį.
Tačiau šiuo metu, mes ne norime, kad ji toliau tikrinsime.
Laimei, mes ne iš naujo viduryje čia,
ir mes žinome, kad šiuo atveju nepadės.
Bet mes tikrai norite įdėti else, jei ten
nors, kad galėtų šiuo atveju
nes mes ne koreguojant viduryje, norėčiau, kad ką nors pakeisti?
Ne, nes visi šie atvejai yra nesuderinami.
Vėl, mano blogas.
Mes neturime, manau, reikia šio else if.
Mes galime suteikti jai pabandyti ir paleisti jį ir pamatyti, kas atsitiks.
Statyba, įvyko klaida.
Tai tikriausiai todėl, kad aš ant jų b ir e čia.
Turiu bet tų up viršuje?
Ji ne atrodo kaip jis.
Mes nutolinti, statyti,
ten jis eina, todėl dabar, jei mes ieškome 15
Taip.
Leiskite man padidinti.
15, taip. Mes galime paleisti jį dar kartą.
Įkelti kodą, statybos, veikia.
Mes galime ieškoti kažką panašaus į 13,
ir mes neturime nieko spausdinti, todėl ji negali rasti už mus.
Tai puiku, nes tai nėra mūsų sąraše.
>> Dabar mes esame pavėluotai.
Kad ketina šią savaitę.
Ačiū prisijungti, see you later.
>> [CS50.TV]