[Powered by Google Translate] [Artikel 3] [Minder Gerieflik]
>> [Nate Hardison] [Harvard Universiteit]
>> [Hierdie is CS50.] [CS50.TV]
>> Alle reg, laat ons begin.
Welkom by Week 4 van CS50.
As julle 'n webblaaier oopmaak en oop pset 3,
Scramble met CS50, gaan ons begin gaan
deur middel van die afdeling van die vrae was daar.
Net soos verlede week, sal ons werk in CS50 Ruimtes,
as jy sal ook trek dat sowel,
en as jy gaan voort en besoek hierdie skakel wat ek het hier aan die bokant.
Dit is tyd om te begin.
Ons het ons min hi program hier. Niks mal.
Een van die eerste dinge wat ek wil doen met julle ouens vandag is om te gaan oor 'n paar oplossings
Problem Set 1, soort van voorbeeld oplossings,
net sodat jy kan kry 'n gevoel vir watter soorte van die kode personeel skryf,
watter soort van kode ander studente skryf,
en jy het 'n blik op dit, want ek weet dit is weird
wanneer jy 'n oplossing vir 'n probleem stel en kommentaar te kry
op jou eie weergawe, maar soms is dit nuttig om te sien hoe ander mense dit gedoen het,
veral diegene wat lekker soek.
Vir die grootste deel, ek was werklik beïndruk met die oplossings wat julle geproduseer.
Ek het nog nie begin soek na jou Problem Set 2s, maar as hulle iets soos die eerste,
dit beteken niks, maar goeie dinge.
>> As jy kyk na my wysigings, laat ons begin al die pad af op Revision 1,
en ons gaan 'n vinnige blik op 'n Mario-oplossing te neem.
As jy trek dit op, hierdie programme wat ons gaan aanbied korrek is.
Daar was nie korrektheid probleme met hierdie probleme nie, maar eerder
ons wil 'n bietjie om te praat oor die verskillende ontwerp kwessies
wat hier gebruik word.
Een van die dinge wat was interessant oor die oplossing
is dat dit gebruik word om hierdie nuwe konstruk genoem pond definieer,
ook soms na verwys as 'n hash definieer.
Laat my zoom in op dit hier.
A # definieer, stel jou in staat om name te gee aan hierdie getalle in jou program.
In hierdie geval, die maksimum hoogte van 'n piramide in Mario
23 en eerder as om 23 in my kode-
ons sou verwys na as hard kodering 23 -
plaas dit gee die naam MAX_HEIGHT dat die getal,
so dat hier in my do-while lus
jy kan eintlik verwys na MAX_HEIGHT
in plaas daarvan om die getal 23.
[Studente] Wat is die voordeel van om dit te doen?
Dit is 'n groot vraag.
Een daarvan is leesbaarheid.
'N voordeel van die gebruik van hierdie # define leesbaarheid.
Toe ek hierdie kode is om te lees, kan ek sien wat gaan aan.
>> Ek kan sien in hierdie toestand hier dat ons die toets
vir die hoogte <0, wat ons kan ook gedefinieer
tot 'n minimum hoogte of 'n min hoogte te wees.
Die ander voordeel is dat ek kan lees dan die res van die lyn te sien
dat ons ook nagaan om seker te maak dat die hoogte is nie groter as die maksimum hoogte,
want ons gaan om voort te gaan, terwyl die hoogte is groter as die maksimum hoogte.
Die ander voordeel is as ek 'n bietjie uit te zoem hier-
as ek hierdie program en ek hardloop dit, sê, met 23 right now,
dit sal druk uit al 23 rye net soos wat.
Maar sê ek wou die maksimum hoogte te verander,
en nou wil ek die maksimum hoogte van die piramides te beperk
te wees net sê-man, dit was funky.
# Include # define MAX_HEIGHT,
en laat ons sê ons wil te stel dit gelyk aan 10.
Nou op hierdie punt, al wat ek moes doen, was dit verander in hierdie plek.
Ek kan die kode hercompileren, en as ek nou probeer en tik in 12,
dit sal my weer gevra.
In hierdie geval, het ons slegs met behulp van MAX_HEIGHT keer.
Dit is nie dat die groot van 'n probleem om in te gaan
en verander dit in die while lus as wat jy nodig het.
Maar in programme waar jy verwysing na die dieselfde magic number
oor en oor weer, dit definieer # meganisme is regtig handig
omdat jy verander dit net een keer op die top van die lêer dit is gewoonlik waar jy hulle sit-
en die verandering Percolaten deur die res van die lêer.
>> Ander dinge wat ek wou in hierdie opdrag om daarop te let dat ek gedink het baie mooi gelyk,
een was die benaming van die veranderlikes.
Wat jy hier sien dat ons integer veranderlikes genoem ry en sogenaamde hoogte het.
Ruimtes, hashes, dit help om die kode 'n bietjie meer leesbare,
maak dit 'n bietjie meer verstaanbaar wat eintlik aan die gang.
Dit is in teenstelling met die gebruik van, sê, ewekansige letters
of net codes geheel en al.
'N laaste ding wat ek sal uitwys, is dat vir loops,
dikwels hierdie Iterator veranderlikes, hierdie tellers wat jy gebruik in jou loops,
dit is standaard-en konvensionele hulle om te begin met óf i en dan j en dan k
en gaan van daar af as jy meer veranderlikes,
en dit is net 'n konvensie.
Daar is baie van die konvensies.
Dit hang af van die programmeringstaal wat jy gebruik.
Maar in C, ons gewoonlik begin met i.
Dit maak nie sin om te gebruik, sê, A of B
afhangende van die situasie.
Dit is dit vir hierdie een.
As jy nou trek Hersiening 2, sal jy sien 'n ander Mario,
en hierdie een is soortgelyk aan die ander een wat ons nou net gesien het,
maar dit is nie iets soort van cool.
As ons kyk na hierdie artikel hier binne-in die binneste lus
hulle is met behulp van 'n paar mal soek sintaksis hier reg in hierdie lyn.
Dit staan ​​bekend as 'n drieledige operateur.
Dit is 'n as anders stelling saamgevat in een lyn.
Die toestand is hierdie deel in hakies.
Dit is ekwivalent om te sê as j <hoogte - i - 1.
En dan wat die inhoud van daardie as blok sou wees, is die ruimte
en dan die inhoud van wat die anders sou wees hierdie.
Dit is in wese die toeken van 'n ruimte aan die veranderlike.
Dit is om 'n ruimte in die inhoud van die blok veranderlike,
indien hierdie voorwaarde voldoen word, en indien die voorwaarde nie nagekom word nie,
dan kry die blok veranderlike #.
En dan, natuurlik, in plaas van die opbou van 'n hele string
en druk alles aan die einde hierdie oplossing druk dit uit een karakter op 'n tyd.
Pretty cool.
>> Nog 'n paar dinge om na te kyk. Ons sal skuif op te gulsig.
Nou as ons kyk na gulsig, hierdie eerste oplossing
gebruik hierdie # omskryf nogal 'n bietjie.
Ons het een konstante gedefinieer vir elk van die verskillende getalle in hierdie program.
Ons het een sent per dollar, een vir kwarte, dimes, vernikkelt en pennies,
en nou as ons scroll down en lees die kode,
ons kan 'n standaard do-while lus druk alles sien nie.
Soort van die kern van die probleem is die besef dat
wat jy nodig het om die float te sit dat jy lees van die gebruiker om 'n heelgetal
akkuraat te doen die wiskunde, en dit is omdat
met 'n swaai punt getalle, soos ons oor gepraat het in die lesing kortliks,
dit is nie moontlik om akkuraat te verteenwoordig elke enkele waarde op die getallelyn
want daar is oneindig baie waardes tussen 3 en, sê, 3,1 selfs.
Jy kan 3,01 en 3,001 en 3,0001, en jy kan hou.
Dit blyk uit wanneer jy met geld werk, het jy dikwels wil om dit te omskep
in heelgetal-formaat sodat jy nie die pennies en dat soort dinge verloor.
Om dit te doen en afronding was die sleutel.
Hierdie oplossing het 'n heeltemal eenvoudig, groot algoritme gebruik,
wat die aantal sent oorblywende decremented, eers deur kwartale,
dan deur dimes, dan deur vernikkelt, dan deur pennies,
en toe te voeg tot die aantal munte elke keer.
>> Nog 'n oplossing wat ons sal sien, as ek zoom uit en gaan na Hersiening 4,
het 'n baie soortgelyke begin, maar in plaas daarvan gebruik div en mod
reg oor hier die aantal sent te bereken.
Dit, die aantal kwartale is gelyk aan die aantal sent gedeel deur 25,
en die rede waarom dit werk is omdat ons doen integer afdeling,
so dit is wegdoen enige restant.
[Studente] Het ons die soektog om kommentaar te lewer?
Dit hang af.
[Studente] Jy is kommentaar te lewer meer as kode hier.
Ja, en so is daar 'n klomp van die verskillende filosofieë oor hierdie.
My persoonlike filosofie is dat jou kode is regtig die waarheid,
soos jou kode is wat is eintlik die uitvoering op die rekenaar,
en so moet jou kode as leesbare as moontlik nie soveel kommentaar noodsaak.
Dit gesê, as jy doen dinge wat soort van moeilike wiskundig
of algoritmies, is dit goed om kommentaar te lewer sodat jy kan
voeg 'n ekstra dimensie, 'n ekstra laag aan wie die lees van jou kode.
In hierdie oplossings, hulle dikwels swaarder net omdat kommentaar
ons wil in staat wees om hulle te versprei en mense af te haal
en lees dit redelik maklik.
Maar beslis, sou ek saamstem dat dit is swaar.
[Studente] Maar wanneer jy twyfel, gaan swaarder?
Wanneer jy twyfel, gaan swaarder.
Sommige mense sal sê soms terugkeer 0 of iets soos dit.
Ek dink dit is 'n belaglike kommentaar.
Duidelik dat wat gebeur.
Ek hoef nie Engels nie om my te vertel dat.
Soms sal mense dinge soos skryf "kthxbai!"
Dit is soort van oulik, maar ook nie-
wat nie die verskil tussen kommentaar punte of nie.
Daardie soort van kommentaar is net ha, ha.
Cool.
>> Op hierdie punt, laat ons begin werk op die probleem Stel 3 afdeling van vrae.
As julle trek om dit weer,
soos met verlede week, is ons nie gaan die broek om te kyk in hierdie afdeling.
Ons sal jou laat julle ouens doen dit op jou eie tyd en praat oor die vrae.
Maar nou in hierdie artikel gaan ons 'n bietjie meer tyd te spandeer
praat oor minder van die kodering basiese
soos ons gedoen het verlede week, en in plaas daarvan, ons gaan om meer te fokus op
'n bietjie meer van die teorie, so praat oor binêre soek en dan sorteer.
Van diegene van julle wat is die volgende saam met die lesing,
Kan iemand gee vir my 'n herhaling van wat die verskil is
tussen binêre soek en lineêre soek?
What's going on? Seker nie.
Lineêre soek soektogte deur middel van elke element in die gesorteerde lys
een vir een deur een deur een vir een,
en binêre soek in 2 groepe verdeel die lys,
tjeks indien die sleutels waarde wat jy op soek is na groter as of minder is as die middelpunt waarde
wat jy nou net gevind het, en as dit is minder as dit gaan met die laer lys
en dan verdeel dit weer, doen dieselfde funksie
al die pad af totdat dit bevind dat die middelpunt gelyk wees aan die waarde self.
Reg.
>> Waarom gee ons nie?
Waarom praat ons nie oor binêre soek teenoor lineêre soek?
Ja.
Program is 'n baie vinniger, so as jy dubbel die grootte van die probleem
dit neem nog 'n stap eerder as twee keer soveel.
Presies.
Dit is 'n goeie antwoord.
Linêere soek baie kontrole een element op 'n slag,
en soos ons gesien het op die eerste dag van die lesing
toe Dawid het deur sy telefoon boek voorbeeld
en geruk uit een bladsy van die telefoon boek op 'n slag
en het aangehou om dit te doen oor en oor en oor weer,
dit gaan vir hom 'n baie lang tyd om iemand te vind in die telefoon boek te neem,
tensy, natuurlik, is hy op soek na iemand aan die begin van die alfabet.
Met 'n binêre soek, kan jy 'n baie vinniger gaan,
en dit is nie net twee keer so vinnig of 3 keer so vinnig of 4 keer so vinnig.
Maar die probleem kry kleiner en kleiner en kleiner word baie vinniger.
Om dit te illustreer, sal ons begin praat oor wat gaan aan
wanneer ons skryf binêre soek.
Die probleem aan die hand is dat as ek het 'n skikking van getalle,
sê, 1, 2, 3, 5, 7, 23, 45, 78, 12.323,
en dan 9 nadat dit met 'n ton van 0e,
ons wil in staat wees om regtig vinnig om uit te vind wat is in
hierdie skikking van getalle.
Ek weet dit lyk 'n bietjie dom en 'n bietjie slinks,
want nou is dit.
Ons het 'n skikking wat nie baie elemente in dit,
En as Ek vra een van julle om uit te vind of
23 is in die skikking, kan jy doen dit redelik vinnig
net skrams op hierdie en vertel my ja of nee.
Die analoog om te oorweeg dink as dit, sê,
'n Excel spreadsheet met 10.000 rye, 20.000 rye.
Van die kursus, kan jy die opdrag F of die beheer F doen en kyk iets.
Jy kan ook gebruik maak van die filters en die soektog dinge,
maar as jy het om te kyk deur die lêer lyn deur die lyn deur die lyn,
dit sal neem om jou 'n lang tyd om dit te vind.
Dit is soort van soos in die telefoon boek voorbeeld ook, waar
niemand kyk deur middel van 'n telefoon boek een bladsy op 'n tyd.
Tipies, maak hulle dit na die middel,
of in die geval van 'n baie van die telefoon boeke en woordeboeke waar
jy eintlik het dit op die eerste letter ingesleutel,
jy flip dat die eerste letter en oop en begin gaan deur daar.
>> Herinner my weer van jou naam. >> Sam.
Sam.
Soos Sam gesê het, is dat die lineêre soekproses regtig stadig gaan wees,
en in plaas daarvan met binêre soek, die manier waarop dit werk, is dat
elke keer wat ons gaan deur 'n herhaling van ons soek algoritme,
ons gaan die lys in die helfte te verdeel, in wese,
in twee kleiner lyste.
En dan op die volgende iterasie van die lus, sal ons verdeel dit weer
in ander kleiner lyste.
Soos jy kan sien, hou die probleem kleiner en kleiner
omdat ons wegdoen helfte van die lys elke keer.
Hoe werk dit weggooi werk?
Net soos 'n herinnering, wat ons gaan doen as ons 'n rekenaar
en ons was, sê, op soek na die getal 5 in hierdie lys
is dat ons 'n aantal in die middel te kies.
In die middel van hierdie lys, want daar is 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 getalle,
ons wil die getal kies óf by die 4de posisie of op die 5de posisie,
en ons wil noem dat die middel van ons lys.
Pick getal in die middel.
Dan, net soos Sam gesê het, sal ons toets om te sien as dat die getal is gelyk
na die aantal wat ons wil te kry of ons presiese aantal.
As dit gelyk is, dan het ons dit gevind het. Ons wen.
As dit nie gelyk is, dan is daar 'n paar van die gevalle.
Die twee gevalle is die getal groter wees as die getal wat ons is op soek na,
of dit is minder as.
As dit is groter, ons skuif na regs.
En as dit is minder, beweeg ons aan die linkerkant.
En dan moet ons herhaal die hele proses weer
op die regter helfte of die linker helfte van die lys.
>> Die eerste probleem in vandag se artikel is om uit te vind
hoe kan ons eintlik begin om dit uit te druk in C-kode.
Ons het die pseudokode hier.
Wat sal ons begin doen, is ek sal trek 'n splinternuwe ruimte,
behalwe hierdie hersiening, sodat ons hierdie aantekeninge vir later,
ons sal dit alles verwyder, en dan kopieer en plak van die probleem stel
hierdie inligting in ons ruimtes, en hopelik dit nie breek nie.
Perfect.
As julle almal dit doen, kopieer en plak die kode in jou nuwe ruimte,
in 'n leë een.
Kom ons probeer Daniel. As jy hierdie program te stel en uit te voer, werk dit?
No. >> Wat sê dit?
Dit sê die beheer bereik die einde van 'n nie-nietig funksie.
Ja, so laat ek probeer om dit te draai.
Het julle gesien dit voor? Weet jy wat dit beteken?
Goed, kom ons dissekteer dit 'n bietjie.
Dit sê by file.c on line 9, kolom 1 het ons het 'n fout, net soos jy het gesê,
en dit sê dat dit die gevolg is van die fout waarskuwing en die terugkeer tipe waarskuwing.
Dit lyk soos iets wat aan die gang is met die terugkeer tipe, wat sin maak.
Ons het 'n nie-nietig funksie het, wat beteken dat ons 'n funksie het
dat dit nie terugkeer nie nietig.
'N leemte funksie is een wat soos volg lyk:
nietig cat (), en dit is nietig omdat die opbrengs tipe is nietig,
wat beteken dat as ons iets in hier
soos terugkeer 1, wil ons 'n vertaler fout vir hierdie.
Maar ons het 'n nie-nietig funksie.
Ons nie-nietig funksie in hierdie geval is ons soek funksie
want dit het 'n opbrengs tipe Bool.
Wanneer dit sê dat die beheer bereik die einde van 'n nie-nietig funksie,
dit is omdat soek, is nie 'n terugkeer verklaring.
Dit is nie iets van die tipe Bool terug.
>> Ons kan dit regmaak, en wat doen julle dink
soek moet terugkeer by verstek?
Wat moet die standaard waarde van soek wees?
Want dit is wat ons kan aan die einde.
Charlotte, het jy enige?
Waar of vals >> Waar of vals?
Watter een?
Vals is. Ek weet nie.
Vals? Kom ons probeer dit.
Waarom sou jy sê terugkeer vals? Dit is groot intuïsie.
[Charlotte] Ek weet nie.
Ons gaan om terug te keer vals in hierdie geval, want dit sal ons standaard
indien vir een of ander rede die lys is leeg, of die naald
dat ons op soek is na, bestaan ​​nie.
Dan heel aan die einde, as ons nie waar vroeër terug in hierdie funksie,
ons altyd weet dat hierdie funksie sal sê: Nee, dit is nie in die skikking.
Dit is nie in die hooiberg.
Nou as ons stel en uit te voer dit-laat my red sodat ons kan trek dit.
Nou as ons stel en uit te voer van ons program, dit bou.
Ons kry ons klein prompt.
As ek getref 4-uh-oh.
Dit het nie druk uit enigiets. Dit lyk alles geëindig okay.
Ons het hierdie te vul.
Ons het gepraat oor die algoritme in pseudokode 'n bietjie gelede.
Laat my sien nie, behalwe dit,
en ek sal dat die algoritme terug te trek weer.
Laat ons hierdie man getref. Nope.
Daar is dit.
Hoe doen ons dit?
Wat sou 'n goeie strategie vir die begin van hierdie kode?
Jy het 'n aantal in die middel te kies.
Hoe kies ons 'n getal in die middel van 'n skikking?
Enige voorstelle?
[Studente] strlen gedeel deur 2.
Strlen gedeel deur 2. Dit is 'n groot een.
Strlen werk met spesiale soorte van skikkings.
Watter soort van skikkings?
String skikkings, karakter skikkings.
Dit is dieselfde soort van die konsep wat ons wil om aansoek te doen,
maar ons kan nie gebruik strlen omdat ons nie 'n verskeidenheid van karakters.
Ons het 'n verskeidenheid van ints.
Maar wat beteken strlen kry vir ons?
Weet jy wat dit vir ons kry?
[Studente] strlen kry ons die lengte.
Presies, dit raak ons ​​die lengte.
Strlen kry die lengte van die skikking vir ons.
>> Hoe kry ons dit in ons binêre soek program?
Hoe sou jy die lengte van 'n skikking?
[Studente] strlen?
Jy kan die lengte van 'n behoorlik geformateer C string array met strlen.
Die probleem is egter dat ons nie 'n string array.
As ons terugkyk op hierdie kode, ons het hierdie integer skikking.
Hoe weet ons hoe lank dit is?
[Studente] Is daar 'n ekwivalente een eindpunt, soos int l of iets?
Dit blyk daar is eintlik nie, en so op 'n manier, is dit
een van daardie dinge wat net goed om te weet oor C,
dat daar is geen manier om die lengte van 'n skikking te kry
as alles wat Ek julle gee, is die skikking.
Die rede waarom dit werk met snare, die rede strlen werke,
is, want as 'n string behoorlik geformateer,
dit sal daardie spesiale \ 0 karakter aan die einde.
>> Jy kan ook dink as jy 'n onbehoorlik geformateerde string
en daar is geen \ 0 karakter daar, dan is die hele ding nie werk nie.
[Studente] Kan jy die \ 0?
Ons kon in hierdie geval.
Ons kan voeg 'n soort van \ 0
of 'n soort van dui karakter en dan gebruik.
Maar dit is nie heeltemal gaan om te werk
omdat die \ 0 is vir 'n char tipe,
en hier is ons het ints.
Die ander ding is as ons 'n spesiale waarde te gebruik
soos -1 die einde van 'n skikking te merk
dan kan ons nooit berg 'n -1 in ons integer skikkings.
Ons wil vas.
Dit blyk dat die enigste manier om die lengte te kry
van 'n skikking in C is om werklik te onthou
as jy sit dit op en dan beweeg dit rond met die skikking
sodat wanneer ek het 'n funksie wat gaan werk om te doen
op 'n verskeidenheid van heelgetalle of dryf of verdubbel of wat het jy,
Ek moet ook die funksie gee die skikking se lengte,
en dit is presies wat ons hier gedoen het in die "search" funksie.
As jy kyk, wat ons gedoen het toe ons hier in ons verskeidenheid,
ons ook in die lengte, grootte.
Dit gebeur net dat ons hierdie veranderlike hier genoem het,
hierdie parameter of argument.
Dit staan ​​bekend as 'n funksie se argument lys of parameter lys,
en dit word ook genoem argumente of parameters.
Mense gebruik verskillende terme op verskillende tye.
Ek soms omruil hulle myself.
Dit gebeur net so dat hierdie veranderlike hier gelyknamige
aan hierdie # define hier.
Maar hulle is nie dieselfde ding nie.
Die kapitalisasiereserwe nie saak nie.
>> As jy kyk na wat hier gebeur, ons verklaar
ons int skikking, wat het ons geroep getalle.
Ons het dit ons grootte, wat ooreenstem met ons # define aan die bokant.
Dit gaan wees 8.
En dan wanneer ons dan noem ons soek funksie hieronder neer,
ons in die getal wat ons wil om te soek na wat ons het gevra,
gekry van die gebruiker.
Ons in die skikking, hierdie getalle,
en dan het ons ook om te slaag in die grootte van die skikking,
en dan kry die waarde van grootte 8 gestoor
geslaag het of aan hierdie heelgetal veranderlike genoem grootte.
Ons het die grootte van die skikking.
Nou as ons gaan terug na wat ons praat oor vroeër,
Ek dink Missy het die punt wat ons nodig het om te doen, is om die lengte van die skikking
en deel dit deur 2, en dit sal gee ons die middelpunt.
Kom ons kyk.
Kan ek iemand skryf dit en stoor dit in die ruimte?
Hoe gaan dit Leila?
Kan ek hê dat julle skryf hierdie in?
Skryf die eerste reël waar jy die lengte van die skikking en kry die middelpunt
en bêre dit in 'n nuwe veranderlike.
Ek gee jou 'n paar sekondes. Is jy gereed?
[Student onhoorbaar]
Sure, kan ek jy het die middelpunt bereken
van die hooiberg verskeidenheid binne-in die "search" funksie
deur gebruik te maak van die lengte van die hooiberg verskeidenheid, wat is die grootte veranderlike?
Niks moeilike hier.
[Leila] Net grootte / 2 en net-
En stoor dit, en klik op die knoppie Stoor hier aan die bokant,
en ons sal trek dit.
Perfect.
Daar gaan ons. Awesome.
>> Soos dit is, sal dit stel?
[Leila] Nee, dit moet hoër wees.
[Nate] Ja, so wat moet ons doen?
[Leila] Soos int middelpunt of iets.
Awesome. Ja, laat ons dit doen, int middelpunt = grootte.
Sal dit stel?
Laat hierdie kommentaar te verwyder en kry dit uit die weg geruim.
Wat sal nie stel oor hierdie?
Ons is nie om iets te doen met heelgetal,
sodat ons nodig het om dit of iets soos dit te druk.
Ja, presies.
Ons kry 'n ongebruikte veranderlike.
Wat anders is nie van plan om te werk oor hierdie?
Ek dink jy het iets gesê, Sam. Kommapunte.
Ja, ek mis daardie kommapunte.
Dit gaan om 'n konstante ding deur die loop van die kwartaal.
Die laaste ding wat ek sal doen, is ek sal 'n wit spasie aan weerskante
van hierdie operateur hier, want dit is tipies hoe ons dit doen
volgens ons stylgids.
Ons het die middelpunt van ons verskeidenheid.
Nou as ons dink terug aan ons algoritme,
wat was die tweede stap wat ons gehad het om te doen wanneer ons die middelpunt?
[Studente] As dit is groter [onhoorbaar].
Ja, so ons het 'n soort van vergelyking te doen, en wat ons 'n vergelyking hier?
Jy het gesê as dit is groter as. Wat is dit in daardie sin verwys na?
Die getal wat kom, as dit is groter as die middelpunt, en gaan dan tot die skikking?
Presies, sodat die getal wat opkom wanneer ons-
Die naald, so ons is in vergelyking met die naald,
en wat ons 'n vergelyking teen die naald?
Omdat die naald is wat ons soek.
Ons vergelyk dit te kry om die middelpunt.
>> Maar maak dit sin om te kyk om te sien
indien die naald = middelpunt?
Maak dit sin?
Het enige iemand nie saamstem nie?
Kom ons gee dit 'n probeer, as (naald == middelpunt).
[Studente] jy printf het dit gevind.
[Nate] printf ("Ons het gevind dat dit \ n");
Anders bepaal-Achievement gaan om te begin doen iets anders hier.
Ek gaan om te begin om draadjies rondom if-stellings om al die tyd
net omdat ons meer dinge, dan
ons kry nie die samestellers.
Ja, Sam. Jy het 'n punt.
Die probleem is dat die middelpunt verteenwoordig 'n posisie in die skikking,
maar jy kan dit die waarde in daardie posisie van die skikking te stel.
Dit is 'n groot punt.
Het almal hoor wat Sam gesê?
Hy het gesê dat die middelpunt as
net 'n posisie in die skikking, maar dit is nie die werklike element in die skikking.
As jy dink oor die kode soos dit geskryf is nou,
as ons kyk na hierdie array hier onder, wat 8 elemente in dit,
Wat is die waarde van die middelpunt gaan wees in hierdie funksie?
[Studente] 4.
[Nate] 4.
As ons kyk vir die nommer 4 -
en ons kan net gebruik hierdie kode en 'n bietjie hartseer gesig hier
want ons het nie vind dit as ons loop hierdie kode
soos nou, dit oplaai, gebou, let me down scroll,
en as ons kyk vir die getal 4,
ons het dit gevind, maar ons het nie om dit te printf ja.
Een rede is dat ons nie terug ware,
maar ons het regtig die getal 4?
En Sam is geen gesê.
Wat het ons vind?
Ons het regtig die middelpunt, wat as ons kyk na die skikking hier onder gevind,
dit gaan om die element te wees indeks 4 dat ons is op soek na,
wat 23.
>> Hoe kry ons eintlik daardie element by die middelpunt
en nie net die middelpunt self?
[Studente] Ons wil gaan char of iets?
Wat sou dit doen, net uit nuuskierigheid?
Kan jy 'n bietjie meer uit te brei?
Jy het om die posisie te omskep in die getal,
sodat jy het om te maak 'n verband-ek dink dit is char, maar dit kan nie wees nie.
Ja, dis 'n goeie punt.
Het ons is besig met 'n baie van hierdie omskakeling posisies in karakters, hierdie karakters,
in die eerste twee probleem stelle.
Dit blyk dat hier, dit is amper soortgelyk aan
toegang tot die met karakter binne 'n string, as dit sin maak.
Hier wil ons die middelpunt element om toegang te verkry tot.
Hoe doen ons dit?
Kevin, het jy enige voorstelle hoe ons kan doen?
Jy hooiberg kan doen, oop bracket, middel, gesluit bracket.
Kan jy skryf wat vir ons?
Stoor dit in hier, en ons sal daardie up trek.
Ons is op soek na hierdie lyn 9,
en ons besef dat ons nie wil hê om die naald te vergelyk met die middelpunt,
maar in plaas daarvan, ons wil hê dat die naald te vergelyk
aan die element by posisie middelpunt binne ons hooiberg verskeidenheid.
Cool.
Daar gaan ons.
Ja, dit lyk redelik goed, indien (naald == hooiberg [middelpunt]).
Ons het dit gevind.
Nou as ons hardloop die kode-we'll back-up 'n bietjie-
dit stel, dit loop, en as ons nou kyk vir 4,
ons het dit nie vind nie, omdat ons nou eintlik die getal 23 kry.
Ons kry die waarde van 23, en dit is wat ons in vergelyking met ons naald.
Maar dit is goed. Dit is 'n stap in die regte rigting.
>> Dit is wat ons probeer om te doen.
Ons is nie probeer om die naald te vergelyk posisies in die skikking
maar eerder teen die werklike elemente in die skikking.
As ons terug kyk nou weer by die volgende stap in ons algoritme,
wat is die volgende stap?
Leila reeds genoem dit kortliks.
[Studente] Toets om te sien of dit is groter as of minder is as en dan besluit watter rigting om te beweeg.
[Nate] Ja, so hoe sou ons dit doen?
Kan jy in sommige I'll behalwe hierdie hersiening,
en dan as jy in 'n paar lyne wat sal dit doen.
Ja, Charlotte >> Ek het 'n vraag.
Dit behoort nie wees middelpunt - 1 want die eerste ding is
dit is 0 geïndekseer, so as ons 4, dis nie eintlik die karakter wat ons is op soek na?
Ja, en die ander probleem met wat-
dit is 'n groot vangs, want wat gaan gebeur moontlik
as ons beweeg en ons ooit nie aanvanklik te pas?
Ek dink wat ons kan doen is probeer om toegang te verkry tot
die element by die 8ste posisie van die skikking,
wat in hierdie geval nie bestaan ​​nie.
Ons sal wil hê om 'n soort van rekeningkunde te doen vir die feit
dat ons het 'n paar zero kruip.
[Charlotte] Jammer, ek bedoel middelpunt - 1 in die vierkantige hakies.
Ons kan dit doen.
Ons sal terugkom na hierdie kwessie in net 'n bietjie.
Sodra ons begin om te kry om die werklike herhaling,
dit is wanneer ons sal regtig sien dit kom in die spel.
Vir die oomblik, kan ons dit doen nie, maar jy is heeltemal reg.
Dat die nul-indeksering sal 'n effek hê wat ons nodig het om rekenskap te gee.
Kom ons kyk.
>> Hoe is die meer as en minder as?
[Studente] Ek kry hoe die meer as en minder as 'n deel te doen.
Ek was net nie seker wat om te druk as jy vind dat dit minder as die hooiberg middelpunt of groter as.
Hier kan ek red wat I've-
[Nate] Ja, as jy red wat jy het, en ons sal trek dit.
Daar gaan ons.
[Studente] En Ek het vraagtekens vir wat ek het nie geweet nie.
[Nate] Dit lyk great.
Hier het ons het vraagtekens, want ons weet nog steeds nie
wat gaan ons nog baie doen.
Wat sou ons wil te doen Oeps, ons het 'n paar draadjies al die funky op ons.
Ons sal regstel draadjies.
Daar gaan ons.
En wat het ons wil om dit te doen, volgens ons algoritme,
as ons nie die naald?
Sê in die geval dat die naald is minder as wat ons is op soek na. Kevin.
Net kyk na die linker helfte.
Reg, so ons sal sit 'n kommentaar hier wat sê "kyk na linker helfte."
En as die naald is groter as die hooiberg by die middelpunt, wat ons wil hê om dit te doen?
[Studente] Dan moet jy kyk op die regter helfte.
Kyk na die regter helfte, "kyk na regter helfte."
Nie sleg nie.
Okay, so op hierdie punt, is dinge lyk redelik goed.
Die probleem met die kode soos dit geskryf is?
[Studente] Jy hoef nie eindpunte vir die helftes.
Reg is, hoef ons nie eindpunte vir die helftes.
Ons is ook net gaan om te gaan deur middel van hierdie een keer.
Ons is net gaan om te kyk op 'n middelpunt.
Óf die element is daar, of dit is nie.
Om dit te voltooi, sal ons nodig het om 'n soort van herhaling te doen.
Ons moet aanhou herhaal totdat vind ons dat
óf die element is daar, want ons het vernou en uiteindelik het dit gevind,
of dit nie daar nie, want ons het deur al die dinge gekyk
in die toepaslike helftes van die skikking en gevind dat daar niks is daar.
>> Wanneer ons het hierdie herhaling gaan, wat ons gaan gebruik?
[Studente] 'n lus.
'N soort van loop. Ja.
[Studente] Kan ons doen 'n do-while lus en dit doen en dan, terwyl
die naald nie gelyke ek nie seker waar ek gaan met dit.
Maar soort van soos dit doen, solank dit nie gelyk is aan die waarde wat die toevoer van die gebruiker.
Ja, so laat ons sien, hoe kan dit self skryf?
Jy het gesê laat ons gebruik om 'n do-while lus.
Waar kom die begin doen?
[Studente] Net na die grootte / 2.
[Nate] Okay, en wat gaan ons doen?
Ons sal vul in die rukkie later.
Wat gaan ons doen?
[Studente] Het ons nie wil al die dinge te doen wat ons in die if gedeelte?
[Nate] Doen al hierdie dinge, groot.
Kopieer en plak.
Ag, man.
Kom ons kyk of dit werk, as ons kan blad dit oor.
Mooi.
Okay, en red ons, sodat julle dit.
Alles reg, en ons gaan om dit te doen, terwyl
Wat was die tyd toestand was jy na?
[Studente] Terwyl die naald nie gelyk is, so soos die uitroepteken.
Maar ek is nie seker presies wat dit nog is.
[Nate] Ja, dit is een manier om dit te doen.
Sam, het jy 'n comment?
[Sam] Ek onthou toe ek kyk na die video's,
Ek het 'n kiekie van een van die soos toe ons het die pseudokode vir dit,
was daar 'n verhouding tussen maks en min.
Ek dink dit was iets soos as Max is steeds minder as min.
Het dit.
[Sam] Of wil indien max is nie minder nie as min of iets soos dit,
want dit sou beteken dat jy alles het gesoek.
>> Ja, so wat maak dit klink soos maks en min verwys na?
[Sam] waardes wat heelgetalle wat gaan verander
relatief tot waar ons die middelpunt.
Presies.
[Sam] Op daardie punt, dit gaan [onhoorbaar] Bereken die maksimum en min.
Middelpunt is hierdie maks en min idee.
Beteken dit sin maak aan mense?
As ons begin kyk na hoe ons gaan hierdie iterasie te doen,
jy is heeltemal reg dat ons wil 'n soort van do-while lus te gebruik.
Maar ek dink as ons onthou wat daar op die plek van die skikking
en wat eintlik gebeur-ek-gaan om te skryf oor hier-
met die eerste iterasie van binêre soek, het ons
Ek gaan B en E te gebruik om die begin aan te dui.
En dan die einde van ons verskeidenheid.
Ons weet dat die begin af, is op 4 reg hier,
en ons weet dat die einde is op 108.
Sê ons is op soek vir die nommer 15.
Die eerste keer dat ons dit doen, soos ons vroeër gesien het,
die middelpunt óf gaan wees 16 of 23
afhangende van hoe bereken ons dinge uit.
Sedert eweredig te verdeel in die middel sou gee ons hierdie spasie
tussen 16 en 23 is, kan ons nie eweredig verdeel dit
of verdeel dit en kry op 'n ware middelpunt.
Ons sal kyk na 16.
Ons sal besef "Hey, 16> 15 wat ons soek."
Dan kyk na die linker helfte van die skikking
wat sal ons doen, is wegdoen
hierdie hele boonste gedeelte
en gesê: "Goed, nou is ons eindpunt gaan om hier te wees."
Die volgende iterasie van ons loop, ons is nou op soek na hierdie skikking,
effektief weggegooi hierdie gedeelte, want nou
as ons die neem van die middelpunt na die verskil tussen die begin en die einde,
vind ons ons middelpunt te wees 8,
wat ons kan toets 8 om te sien waar dit is in verhouding tot die getal wat ons soek,
15, vind dat 15 groter is,
so ons het om te skuif na die regte gedeelte van die lys,
wat ons weet, want ons is mense, en ons kan dit sien.
Ons weet dat die regter deel gaan wees waar ons dit vind,
maar die rekenaar het nie geweet dat, so wat sal ons doen, is ons werklik
het hierdie optrek, en nou is die begin en die einde
is die dieselfde plek, sodat die middelpunt word die enigste getal in die lys op daardie punt,
wat is 15, en ons het dit gevind.
Beteken dit n bietjie lig werp op waar hierdie hele maks en min notasie gaan,
die dop van die eindpunte van die skikking in orde om uit te vind
hoe dinge te beperk?
>> Wat sou gebeur as dit was nie nou gelyk aan 15?
Wat as ons is op soek na 15 en, in plaas hierdie getal was ook 16?
Ons wil sê, "O, dit is groter.
Ons wil om terug te gaan na links. "
En ons wil ons e beweeg na regs,
op watter punt ons het 'n eindpunt wat sou wees botsende.
Dit sou nie in staat wees om te soek vir meer elemente
want nou het ons ons eindpunt en ons begin punt,
ons max en ons min, is nou omgekeer.
Ons soek deur die hele skikking. Ons kan niks vind nie.
Dit is die punt waar ons graag wil hê om te sê, "Goed, ons gaan hierdie algoritme om te stop.
Ons het nie gevind nie enigiets. Ons weet dit is nie hier nie. "
Hoe gaan dit?
[Studente] Hoe presies het die rekenaar skakel die einde?
Hoe die ou end beland voor die begin?
Die einde eindig voor die begin
as gevolg van die wiskunde wat ons gaan elke keer as ons dit doen, te doen.
Die manier waarop ons ruil is as jy kyk na die heel eerste keer doen ons dit omruil
waar ons die begin by 4 en die einde
al die pad af op 108 en ons middelpunt, sê, op 16 -
Ek gaan om dit terug te stel na 15 as ons is op soek vir die 15,
ons het geweet dat dit wat ons gedoen het toe ons kyk na die 16 en het gesien dat dit groter
en wou die hele regter deel van die lys te verwyder,
het ons gesien wat ons wou doen, is hierdie e beweeg hier.
Doeltreffend, het die e verskuif na een voor die middelpunt.
Net so, wanneer het ons hierdie iterasie van die algoritme
en die middelpunt was op 8,
het ons gevind dat 8 <15 so, ons wou die b te beweeg
een verby die middelpunt.
Nou, die begin en die einde is albei saam op hierdie 15.
>> As ons wil gebeur om te kyk vir 'n ander waarde, nie 15
of as hierdie 15 plaas 'n 16,
ons sou gevind het dat die e ons wil een te beweeg voor die aangesig van die middelpunt.
Nou is die e daar sou wees omgekeer minder as die b.
Laat ons wandel deur hoe ons eintlik beland kodering hierdie algoritme.
Ons weet dat ons wil hierdie middelpunt berekening te hê.
Ons weet ook dat ons wil hê dat die begin en die einde van die skikking op te spoor
van ons huidige skikking sodat ons kan uitvind
waar hierdie linker helfte van die lys is en waar die regter helfte van die lys is.
Ons doen dit met een begin en eindig,
of ons kan noem hulle min en max.
Ek sal gebruik om hierdie tyd begin en eindig.
Wanneer ons begin, as ons terug kyk op ons voorbeeld hier,
ons begin was aan die begin van die skikking, so natuurlik.
Wat indeks was dit? Wat moet ons begin word?
Daniel.
[Daniel] Hooi [0].
[Nate] Ja, so kan ons stel dit gelyk aan hooiberg [0].
Die probleem is, is dat dit gee ons nie die posisie van die eerste element.
Dit gee ons die indeks van die eerste element of die werklike waarde op daardie eerste posisie.
[Studente] Dit sal skakel na 0,20?
[Nate] Wat sal dit doen-goed, sal dit nie doen nie enige omsettingsensiem.
Wat sal dit doen, is dit 'n 4 stoor in begin,
en dan sal dit moeilik wees om vergelykings te maak teen begin
omdat begin sal hou die waarde van 4,
wat is die begin van ons verskeidenheid,
maar ons wil die indekse in die skikking op te spoor
in teenstelling met die waardes.
Ons sal eintlik gebruik om 'n 0, soos dat.
Vir die einde van die skikking Charlotte het dit 'n bietjie vroeër.
Dit is waar ons sal in ag neem die nul kruip.
>> Charlotte, wat is die einde van die skikking?
Wat is die indeks van die einde?
[Charlotte] Grootte - 1.
Ja, en watter grootte moet ons gebruik?
Moet ons gebruik kapitaal grootte of klein grootte?
Capital grootte.
In hierdie geval, kan ons gebruik om kapitaal grootte.
As ons wou hierdie funksie te wees draagbare
en gebruik hierdie funksie in ander programme,
ons kan eintlik gebruik kleinletters grootte.
Dit is goed ook.
Maar Charlotte is heeltemal reg dat ons wil grootte te hê - 1.
Op hierdie punt-
[Studente] Hoe is dit dat jy kan gebruik hoofletters grootte?
Hoe is dit dat ons kan gebruik hoofletters grootte?
Dit blyk dat hierdie # definieer is regtig,
onder die kap, 'n teks soos vind en te vervang, as dit sin maak.
Wanneer jy jou kode stel, die preprocessing fase
van die vertaler gaan deur middel van die lêer,
en dit lyk vir oral dat jou kapitaal grootte geskryf het,
en dit vervang dat die teks letterlik met 'n 8, net soos wat.
In daardie sin, dit is baie verskillend van 'n veranderlike.
Dit neem nie 'n ruimte in die geheue.
Dit is 'n eenvoudige teks vervang truuk.
In hierdie geval gaan ons om te gebruik.
Van hier is ons wil 'n soort van herhaling te doen,
en ons is op die regte pad met ons do-while lus.
Ons wil om iets te doen totdat 'n toestand nie meer hou nie,
en soos ons vroeër gesien het, het ons gesien dat daardie toestand
was inderdaad dat ons nie wil hê dat die einde
minder wees as die begin.
>> Dit is ons stop toestand.
As dit gebeur, ons wil om te stop en te verklaar soos, "Hey, het ons nie gevind nie enigiets."
Om dit uit te druk, wil ons 'n soort van die lus te gebruik.
In hierdie geval, sou dit 'n do-while lus, 'n lus, 'n while lus?
Ons het 'n do-while lus hier.
Het jy ouens soos dié benadering?
Dink jy moet ons 'n ander benadering probeer?
Kevin, enige gedagtes?
Ons kon 'n while lus het, want ons weet maksimum
sal groter wees as die min aan die begin anyways.
Ja, so daar is geen inisialisering wat moet gebeur.
Diegene do-while loops is groot wanneer jy iets te inisialiseer
voor te toets, terwyl hier
weet ons dat ons nie gaan hou weer initialiseren beide begin en eindig
elke ronde van die lus.
Ons weet dat ons wil hê om hulle te inisialiseer, dan gaan ons toestand.
In hierdie geval is, sal ek werklik gaan met 'n eenvoudige while lus.
Dit blyk dat die do-while loops is redelik selde gebruik.
'N baie plekke nie eens leer terwyl loops.
Hulle is goed vir die hantering van die toevoer van die gebruiker, so het ons gesien hoe 'n baie van hulle tot dusver.
Maar die normale en terwyl loops is 'n baie meer algemeen.
Dit blyk dat hierdie toestand as 'n skriftelike
sal nie regtig doen ons baie goed, en hoekom is dit?
Ek is jammer, ek weet nie jou naam.
Ek is Jerry. >> Jammer?
Dit is B-O-R-U-I.
O, okay.
Ek kan nie sien dat jy op my lys.
Ag, dit is omdat-oh, dit maak sin.
Het jy 'n idee van waarom hierdie while lus dalk nie werk soos bedoel,
soos dit geskryf is met die toestand?
[Jerry] Jy bedoel soos jy wil al die dinge wat, nadat dit in die-
Ja, so dit is een.
Ons kan hê om al hierdie dinge te sit in die while lus, wat is heeltemal waar.
Die ander ding wat 'n bietjie meer problematies is, is dat hierdie toestand nie werk nie.
[Studente] Julle het dit nodig om te draai.
Reg, sodat hierdie voorwaarde sal nooit waar wees aanvanklik die manier waarop ons daaroor gepraat.
Ons wil om iets te doen tot einde <begin,
maar ons wil te doen van iets, terwyl
begin ≤ einde.
>> Daar is dat die omkering van die logika daar.
Ek is skuldig om daardie foute al die tyd.
[Studente] Hoekom het dit te wees minder as of gelyk aan?
Want onthou jy die geval dat ons het om te
waar was daar net een element, en ons was,
en ons is op soek na net die 15 in ons verskeidenheid?
En ons begin en ons einde was dieselfde element.
Ons wil hê om seker te maak dat ons daardie geval hanteer.
As ons 'n reguit minder as,
ons sal slegs in staat wees om af te kry na 'n 2-element array.
Sodra ons het af tot die laaste element, indien dit was ons element, ons nooit sal vind dit.
Nou hier, kan ons presies doen soos jy sê.
Ons kan begin plop dinge reg in die middel van ons while lus.
Ons kan plons in ons middelpunt.
Ons kan al hierdie if-stellings,
trek hulle uit van hierdie do-while lus,
plop hulle in
skoon te maak dinge 'n bietjie,
en Ek sal voort te gaan en behalwe hierdie hersiening.
En op hierdie punt, is ons om redelik naby.
Sam.
Ek dink jy moet ook int middelpunt = grootte - 1/2.
Het dit, grootte - 1/2.
Is daar enigiets anders wat ons nodig het om oor daardie lyn te verander?
Dit was 'n goeie vangs.
>> Wat beteken grootte doen? Is ons steeds veranderende grootte?
Om die lyn te hou soos hierdie, ons het die grootte te verander.
Ons het die grootte verander elke keer as ons gaan om die lus.
Maar onthou wanneer ons gaan deur ons voorbeeld net 'n bietjie vroeër,
en ons het die begin op 4
en die einde al die pad oor by 108?
Hoe het ons die middelpunt bereken?
Is ons met behulp van die grootte?
Of ons gebruik begin en eindig plaas?
Dit is die verskil tussen die einde en die begin.
Presies, en presies hoe moet ek skryf dat, Charlotte?
Net die einde begin.
Jy sal nie nodig om die te doen - 1
omdat die 1 is ingesluit in die einde en die begin reeds.
[Nate] Groot, jy is heeltemal reg.
Ons hoef nie te doen - 1 omdat dit - 1 is ingesluit
en is verantwoordelik vir wanneer ons die einde veranderlike inisialiseer.
>> Is daar enigiets anders wat ek moet sintakties te doen het hierdie lyn sin maak?
[Studente] Plus begin >> Plus. Begin?
[Studente] Aan die einde.
Want dit is net die helfte van die lengte bereken.
Jy moet die begin toe te voeg.
[Nate] Wat sou dit bereken vir ons?
As ons dink oor die einde op hierdie heel eerste iterasie van die lus,
einde gaan wees in posisie indeks 7.
Begin is in posisie 0.
Onthou, ons is op soek vir óf
posisie 3 of posisie 4.
As ons kyk na hierdie wiskunde, maak dit net 'n bietjie meer tasbare,
sit 'n paar nommers hier, het ons 7, 0,
so 7 - 0, en dan / 2
is 3 in heelgetal-afdeling, dit is.
Dan het ons nodig en voeg dan weer ons begin?
Ons doen dit nie in hierdie geval.
Op die eerste iterasie, sal dit goed wees, want begin is 0.
Maar as ons vordering, doen ons regtig almal net nodig
einde begin / 2.
Daar is 'n ander trick hier, en dit is naamlik een van voorrang.
[Studente] Moet ons hakies?
[Nate] Presies, en dit is, want as ons nie hierdie hakies sit,
dan is hierdie lyn in plaas daarvan sal geïnterpreteer word
(einde) (begin / 2), wat ons beslis nie wil.
Kyk uit vir diegene wat voorrang reëls.
[Studente] Waarom is dit nie die einde + begin?
Hoekom is dit nie die einde + begin?
[Studente] Waarom is dit nie?
Waarom sou dit wees +?
Ek dink jy is reg.
[Studente] Want dit is die gemiddelde?
[Nate] End + begin, jy is heeltemal reg.
Wow, Ek is dit heeltemal goofed. Jy is reg.
As ons besig was om die minus, sou ons wil te voeg die rug begin.
In hierdie geval, jy is baie goed dat ons wil die gemiddelde van die twee te neem,
sodat ons wil hê dat hulle by te voeg, eerder as om hulle af te trek.
[Studente] Dit sal ook werk as jy het einde begin / 2 + begin.
Dit sou as ons dit doen - ek glo so.
>> Byvoorbeeld, as ons kyk na begin,
en ons het dit verskuif hier
aan die 15.
Nou begin is by posisie 2.
Einde is by posisie 7.
As ons hulle aftrek, kry ons 5.
Verdeel 2 kry ons 2.
En dan voeg ons 2 terug in,
en wat kry ons na die 4de posisie,
wat is reg hier, wat is die middelpunt.
[Studente] Moet ons sorg te neem van wikkel?
In watter opsig het ons nodig om te sorg vir wikkel?
As die som of die verskil tussen
afhangende van hoe ons dit doen is nie 'n ewe getal.
Toe het die rekenaar verward raak of wanneer dit is 2,5;
beweeg jy aan die linker-of die reg om te bepaal wat is die middelpunt?
Het dit.
Dit blyk dat met 'n heeltallige afdeling,
ons nie ooit kry hierdie floating point.
Ons het nooit die desimaal.
Dit is heeltemal weggegooi.
As jy 'n rekenaar deel twee int veranderlikes,
en 'n mens is 7, en die ander is 2,
jy sal nie 3,5 as 'n resultaat.
Dit sal kry 3.
Die res sal weggegooi word, en dit is dus effektief afronding
nie 'n ronde, maar eerder 'n vloer, as jy ouens is vertroud met dié in wiskunde,
waar jy heeltemal wegdoen met die desimale,
en so het jy in wese truncating dit af tot die naaste
hele posisie, tot die naaste heelgetal.
[Studente] Maar dan is dit problematies, want as jy het 'n verskeidenheid van 7 elemente
dan is dit neem outomaties die 3de element van die middelpunt plaas van die 4de.
Hoe hanteer mens dit?
Dit is problematies, want as ons het 'n verskeidenheid van 7,
sou dit kies die 3de in plaas van die 4de.
Kan jy verduidelik 'n bietjie meer?
[Studente] Want as jy het 7 elemente dan die 4de element
sou die middelpunt wees, reg?
Onthou om jou kommentaar oor die nul is geïndekseer, though.
[Studente] Ja, so in posisie 3. Dit sou die middelpunt wees.
Ja.
O, okay. Ek sien wat jy bedoel.
Dit is nogal vreemd, as ons gewoond raak aan hierdie hele idee van
om ontslae te raak van desimale.
Dit is 'n groot punt.
Kom ons klaar dit op.
Ons het bereken ons middelpunt.
>> Ons toets om te sien of ons naald is gelyk aan die middelste waarde.
Ons druk dat ons het dit gevind, maar regtig, wat wil ons om te doen in hierdie situasie?
Ons het gevind dat dit, so ons wil die oproeper te laat weet dat ons het dit gevind.
Ons het 'n funksie wat is 'n boolean getikte funksie.
Die manier waarop ons sein na die oproeper van ons funksie dat ons is gereed om te gaan
is ons sê, "Hey, dit is waar."
Hoe sou ons dit doen, Kevin?
Jy knik jou kop. >> [Kevin] Voeg terugkeer waar.
[Nate] Presies, terugkeer waar.
Nou, al is dit nie gelyk is, hoe sou ons kyk na die linker helfte?
Enige idees?
Stella, enige idees?
Jy moet 'n nuwe posisie vir die einde te stel.
Ja.
Sodat ons 'n posisie van die middelpunt te doen - die einde.
Groot.
Ons moet 'n nuwe posisie te stel vir die einde
om te kyk na die linker helfte.
Dit was wat ons oor gepraat het voor waar
Ek hou terug te gaan na hierdie voorbeeld.
Ek het die hier begin, en dan het ek die einde al die pad hier.
>> Weereens, as ons is op soek na 15, en ons middelpunt is op 16,
en ons besef, "Oeps, 16 is groter.
Ons wil om te skuif na die linker helfte. "
Ons sal dan die einde aan die 15 beweeg,
en ons doen dit deur een weg van die middelpunt
en die oprigting van as ons nuwe einde.
Net so, as ons wil om te kyk op die regter helfte, hoe sou ons dit doen?
Het jy 'n idee?
[Studente] Jy moet net begin + 1 middelpunt.
[Nate] Groot.
En nou, in die geval dat ons nie vind nie iets doen,
beteken dat sorg gedra vir ons?
Daniel, wat sorg vir ons?
[Daniel] Nr.
[Nate] As ons dit deur die hele skikking en ons vind niks doen nie,
waar sou dit geneem word versorging van, of moet ons sorg vir dit?
[Daniel] Die terwyl toestand.
[Nate] Ja, die tyd toestand, presies.
Dit gaan deur die hele skikking sal sorg as ons nie alles te vind is.
Hierdie while lus sal eindig.
Ons sal nooit teëgekom het nie hierdie toestand,
en ons kan terugkeer vals.
Ons kan ook verlaat as hier soos hierdie
want as hierdie stelling is waar,
en ons funksie sal terugkeer,
en so sal ons in wese Staak om hierdie funksie op hierdie punt
wanneer ons terugkeer waar.
Maar wat gebeur met hierdie struktuur hier?
Sal dit heeltemal werk nie, of is daar 'n logiese fout daar?
>> Daar is 'n logiese fout in daar, met die manier waarop dit opgestel.
Wat kan dit wees?
[Studente] Hoekom het jy nodig om die - en + 1s?
Dit stel ons array tot ons nuwe linkerhelfte en regter helfte.
[Studente] Maar waarom jy kan nie dit doen sonder die 1s en + 1s?
[Nate] Ons kon dit gelyk is aan die middelpunt?
Wat kan problematies wees oor wat?
[Studente] Ek dink dit is ondoeltreffend omdat jy die kontrole van 'n waarde wat reeds nagegaan.
[Nate] Presies, so Sam is heeltemal reg.
As jy aan die einde en die begin gelyk aan die middelpunt
in plaas van 1 en + 1 nadenkend,
op 'n sekere punt in die toekoms sal ons uiteindelik weer die beheer van die middelpunt.
[Studente] Ek het begin die pset, en dan het ek iets soos dit
waar ek het vergeet om die + 1, en dit vasgeval in 'n oneindige lus.
Reg, want op 'n sekere punt wat jy nooit gaan om te begin en eindig
om werklik te oorvleuel.
Cool.
Daar is 'n meer logiese fout, en dit is dat dit beslis moet
'n else if.
Hoekom sou dit wees?
>> Die rede hiervoor is as dit nie anders as het jy dit sien, Kevin?
[Kevin] Ja, want jy is besig om die eindpunt.
[Nate] Presies.
Ons is besig om die eindpunt,
en as dit is geskryf soos hierdie sal ons spasies tussen-
sal dit check hierdie geval.
Hierdie geval, indien dit slaag, sal staak uit van die funksie.
Dan sal dit check hierdie volgende geval,
en as dit slaag, sal dit pas die eindpunt,
en dan sal dit voortgaan en check hierdie geval.
Maar op hierdie punt, het ons nie wil om voort te gaan kontroleer.
Gelukkig het ons nie weer die middelpunt,
en ons weet dat hierdie geval nie daarin sal slaag.
Maar ons wil beslis die anders voor te stel indien daar
selfs al is dit krag-in hierdie geval
want ons is nie die middelpunt aanpassing, sou dit 'n verskil maak?
Nee, want hierdie gevalle is almal eksklusiewe.
Weereens, my slegte.
Ons nie, dink ek, moet hierdie anders as.
Ons kan gee dit 'n probeer en voer dit uit en kyk wat gebeur.
Gebou, 'n fout het voorgekom.
Is dit waarskynlik omdat ek het hierdie b en e's hier.
Moet ek nie meer aan die bokant van daardie up?
Dit lyk nie soos dit.
Ons uitzoomen, bou,
daar dit gaan, so nou as ons soek vir 15,
ja.
Laat my zoom.
15, ja. Ons kan dit weer hardloop.
Oplaai bron-kode, gebou, hardloop.
Ons kan soek vir iets soos 13,
en ons kry nie iets uit te druk, is dit nie vind wat vir ons.
Dit is groot, want dit is nie in ons lys.
>> Ons is nou uit van die tyd.
Wat gaan dit vir hierdie week.
Dankie vir die aansluit, en sien jou later.
>> [CS50.TV]