[Powered by Google Translate] Kafla Vandamál Set 2: Hacker Edition
Rob Bowden, Harvard University
Þetta er CS50. CS50.TV
Svo, ég er Rob. Ég er háttsettur í Kirkland. Þetta er þriðja árið mitt TFing CS50.
Það er í fyrsta sinn sem við erum að breyta frá hefðbundinni fyrirlestur-stíl kafla,
þar sem við konar bara endurskoðun hvað gerðist í fyrirlestri og svo þið spyrja spurninga,
nú til að vera miklu meira vandamál-undirstaða, þar sem við notum Spaces, og -
Oh, svo er hugmyndin að fara til að tengjast Ég sendi þér og þá munt þú vera í rúm.
Hefur einhver hafa a laptop? Allt í lagi.
Þannig að við erum að fara að vera með þetta, og við ætlum að vera að gera vandamál lifa í kafla
og ræða þær og vangaveltur út hvað er rangt
og ég gæti draga upp sumir af kóðanum þínum, og ég gæti rætt hugmyndir þínar.
Svo hefur einhver átti erfitt?
Þú getur spjallað við hlið, ég veit ekki hvort við munum hafa ástæðu fyrir því.
Nú, eins og áður supersection, ef þú varst í þeim flokki, þú veist hvað það er um.
Á öllum P setur það á eftir að vera þessa hluta.
Svo P-setja 2, forskriftir, held ég að þú sást það á P-setja 1 nú þegar.
En við getum litið á P-setja 2 fyrir það sem við erum að fara að vera að fara yfir í dag.
Og þú munt sjá kafla af spurningum.
Svo þetta verður í öllum P-sett, það verður að vera hluti af spurningum.
Svo langt að við höfum sagt, "Hugleiddu þetta tækifæri til að æfa."
Þú munt ekki vera beðin um að senda þetta forrit.
Hugmyndin er að þetta eiga að konar hjálpa þér að byrja með vandamál setja.
Ég giska á Hacker útgáfa er a einhver fjöldi af þeim átti bara að vera ný, áhugaverð atriði sem þarf að læra.
Þeir mega ekki vera beint við um vandamál setja.
Og núna erum við ekki að þurfa að senda þær, en í orði,
fyrir síðari setur vandamál, kannski þú sendir þá, og svona þú getur annað hvort að koma til kafla
eða horfa á kafla til að fá svör, eða þú getur bara að fá þá á eigin spýtur
Ef þér finnst ekki eins og að njóta nærveru mína.
Svo - ég held að þetta sé sá fyrsti.
Oh. Einnig, samkvæmt þessum hluta af spurningunum sem við einnig að spyrja þig spurninga um stuttbuxur.
Þannig að ég giska, í orði, þú ert ímyndaður til að horfa á þetta áður en kemur að hluta,
en það er allt í lagi ef þú gerir það ekki, við munum fara yfir þær engu að síður.
Þannig að við getum byrjað með þetta: "Hvernig á meðan lykkja frábrugðin DO-while lykkju?
Hvenær er seinni sérstaklega vel? "
Svo einhver hafa allir -?
[Námsmaður] The do-while lykkju er alltaf framkvæmdur að minnsta kosti einu sinni.
Já. Svo er það munurinn. A meðan lykkja - Ég skal gera það bara hér - meðan lykkja, höfum við ástand
hérna, en DO-á meðan, þú ert ekki með sjúkdóm þar til við fá niður hér.
Og svo, þegar forritinu er framkvæmd, og það gerist í while lykkju,
tékka það strax ef þetta ástand er satt.
Ef það skilyrði er ekki satt, það verður bara að sleppa yfir lykkjunnar alveg.
Do-while lykkju, eins og the program er framkvæmd, verður það að "gera."
Ekkert gerist á þessum tímapunkti, bara halda áfram framkvæmd.
Síðan þegar það hits the "stund" ef skilyrðið er satt, verður það lykkju til baka og gera það aftur
og aftur og aftur þar til ástand er ekki satt og þá bara fellur í gegnum.
Svo munurinn sé, að þetta getur sleppt rétt frá byrjun.
Þetta keyrir endilega einu sinni og þá má framkvæma oftar ef ástand er enn satt.
Svo á meðan lykkja mun aðeins gera það einu sinni, eða - á meðan lykkja - getum við ekki þurft að gera það á öllum,
því um leið og við fáum við það, ef ástand er rangt, við munum bara sleppa rétt yfir það.
Í do-while lykkju, munum við framkvæma það einu sinni, endilega.
Síðan, þegar við komum að ástand, athuga við hvort það er satt eða ósatt.
Ef það er satt, við munum gera það aftur, en ef það er rangt, við verðum bara að halda áfram að fara.
Svo þegar er seinni sérstaklega vel?
Svo get ég sagt að í heild á 4 ár, 3 ár, hvað,
sem ég hef verið að forritun, ég hef notað þetta, eins og undir 10 tímum.
Og sennilega 5 af þeim eru í CS50 þegar við erum að kynna gera-stund lykkjur.
Svo þegar þú notaðir að gera-en lykkjur?
Hvenær er - já?
[Nemandi] Þegar þú ert að reyna að fá notandi inntak, eða eitthvað sem þú vilt að athuga -
Já. Svo gera-en lykkjur, notandi inntak er ein stór.
Þess vegna á fyrstu tveimur vandamál setur, þegar þú vilt að spyrja notanda, eins og,
"Gefa mér band," þú getur ekki haldið áfram fyrr en þú færð að streng.
Og svo þú, endilega, þú þarft að biðja um streng minnsta kosti einu sinni.
En ef þeir svara eitthvað slæmt, þá þarftu að lykkja til baka og spyrja aftur.
En annað en notandi inntak, það er mjög sjaldgæft að ég fundur mál
þar sem ég vil að lykkja "að minnsta kosti einu sinni" en hugsanlega meira.
Spurningar eða -? Hefur einhver notað DO-á meðan lykkja annars staðar?
Allt í lagi. Svo næsta einn er: "Hvað er óskilgreinda auðkenni
yfirleitt til kynna ef outputted með clang? "
Svo hvers konar kóða gæti ég skrifað til að fá 'undeclared auðkenni?
[Nemandi] Að x = 2?
Þannig að við getum bara reyna það hér, x = 2.
Við munum keyra þetta - ó, ég vissi ekki að smella á hann. Svo hér við fá - allt í lagi.
"Notkun undeclared x Identifier."
Svo að undeclared heiti, breytu.
Það verður oft að hringja í breytu með auðkenni.
Þannig að það gæti ekki vita að það er í raun breyta, það veit ekki hvað það er.
Svo er það kennimerki.
Svo hvers vegna er það óskilgreinda? Já.
Svo til að vera skýr á hugtakanotkun, yfirlýsingar um breytu
er þegar þú segir "int x," eða "String y", hvað sem er.
Frumstilling á breytu eða framsal breytu,
er þegar þú segir "x = 2."
Þannig getum við gert þetta í aðskildum skrefum, int x, x = 2, og þar - við getum haft fullt af efni hér -
en þangað til þessi lína gerist, er x enn forsniðinn en það hefur verið lýst.
Og svo að við getum augljóslega gert það í 1 línu, og nú erum við að lýsa og Frumstilli.
Spurningar?
Og að lokum, "Hvers vegna er Caesar Dulmál ekki mjög öruggt?"
Svo fyrst, Er einhver sem vill segja hvað Caesar Dulmál er?
[Nemandi] Caesar Dulmál bara að þú kortinu, skipta þér hvert bréf,
ákveðinn fjöldi bréfa fara yfir og fara aftur yfir, og það er ekki mjög örugg því
það er aðeins 26 valkostirnir og þú verður bara að reyna hver 1 af þeim fyrr en þú færð það.
Oh. Svo ætti ég að endurtaka?
The Caesar Dulmál, it's - ég meina, þú verður að takast á við það á þeim vandamálum sem þú -
eða ég held staðlaða útgáfu af vandamál setja sem er ekki á spjallþráð útgáfu.
Svo á stöðluðu útgáfu á því vandamáli sett, fá þér skilaboð eins og, "Hello, world"
og þú ert líka tala eins og 6, og þú tekur þessi skilaboð, og hvert eðli,
þú snúa það með 6 stöðum í stafrófinu.
Svo 'h' í Hello yrði h-i-j-k-L-m-n.
Svo fyrsti stafurinn væri n. Við gerum það sama með e.
Ef við höfum, eins og, z eða eitthvað, þá erum við sett aftur í kring til 'a.'
En hver persóna fær hjóluðum niðri 6 stafir síðar í stafrófinu, og það er ekki mjög öruggt
þar eru aðeins 26 möguleikar á hve marga vegu þú gætir sett staf.
Svo þú getur bara reynt öll 26 af þeim og, væntanlega, að nógu lengi skilaboðum
Aðeins 1 af þessum hugsanlegum 26 hluti er að fara að vera læsileg,
og læsileg einn er að fara að vera upprunalega skeytið.
Svo það er ekki mjög góð leið til að dulkóða eitthvað.
Óskylt þeim stuttbuxur, "Hvað er fall?"
Svo er það fall? Já.
[Nemandi] Það er eins og sérstakt stykki af kóða sem þú getur hringt í til að fara í gegnum og þá fá aftur gildi hvað sem er.
Já. Svo ég ætla að svara því með líka svara næsta - eða endurtaka við líka bara að svara næsta einn.
Þú getur notað aðgerðir í stað þess að bara að afrita og líma kóðann aftur og aftur.
Bara taka þessi númer, setja það inn í a fuction, og þá getur þú bara að hringja í aðgerð
hvar sem þú hefur verið að afrita og líma.
Svo aðgerðir eru gagnlegar.
Svo nú að við gerum raunverulegt vandamál.
Sú fyrsta. Svo hugmyndin um fyrsta er framhjá þér það band, og án tillits til -
eða er það að segja alla lágstöfum? Það þýðir ekki að segja alla lágstöfum.
Svo skilaboðin getur verið hvað sem er, og - ó nei. Það er.
"Fyrir einfaldleiki, getur þú gert ráð fyrir að notandinn mun aðeins inntak lágstafir og bil."
Þannig að við framhjá honum skilaboð með aðeins lágstöfum og þá varamaður
milli há-og lágstafir - við breytt band til að vera höfuðborg og lágstöfum, til skiptis.
Svo áður en við gefa þér annað að jafnvel kafa inn í vandamál,
hvað er það fyrsta sem við þurfum að gera?
Oh, hvað gerði ég smelli bara á? Ó, smellti ég bara á tölvupósti hér.
Svo það fyrsta sem við þurfum að gera - ég er að leita á röngum einn?
Er þetta hluti af þessu?
Nei, eru þeir enn í það, þó.
Jæja, enn hér.
Nú getum við ekki gert ráð fyrir -? Já. Hér getum við ekki gert ráð fyrir að það er aðeins lágstöfum og rými.
Svo nú þurfum við að takast á við þá staðreynd að bréf geta verið hvað sem við viljum þá til að vera.
Og svo það fyrsta sem við viljum gera er bara að fá skilaboðin.
Við þurfum bara að fá band, band S = GetString, allt í lagi.
Nú þetta vandamál, there ert a par af leiðir til að gera það.
En við erum að fara til að vilja nota Bita rekstraraðila hér.
Eru fólk sem annað hvort voru ekki á supersection,
eða eitthvað, ekki og vita ekki hvað Bita rekstraraðila eru?
Eða hvernig þeir tengjast ASCII á einhvern hátt?
[Nemandi] Ég var ekki á supersection, en ég veit hvað Bita rekstraraðila eru.
Allt í lagi. Svo ég þarf ekki að fara yfir grunnatriði þeirra, en ég mun útskýra
hvað við erum að fara að vilja til að nota hér.
Svo 'A': Binary framsetning Capital, númerið er 65.
Ég ætla bara að fara að horfa á - 41 er að fara að vera 01000001.
Svo það ætti að vera 65 í aukastaf, svo er þetta tvöfaldur framsetning höfuðborginni eðli A.
Nú er tvöfaldur framsetning eðli lágstafir 'a'
er að fara til vera the sami hlutur, næstum. Er það - 6, já. Þetta er rétt.
Svo tvöfaldur Capital, tvöfaldur lágstöfum 'a.'
Svo eftir því að munurinn á milli A og 'a' er þetta einn hluti.
Og þetta gerist á að vera 32 bita, sem hluti tákna fjölda 32.
Og það er vit í því A er 65, 'a' er 97.
Munurinn á milli þeirra er 32.
Svo nú vitum við að við getum breytt úr A í A með því að taka
og Bita ORing það með - það lítur út eins og a 1.
Þetta er Bita OR, með 00100000, og sem mun gefa okkur 'a.'
Og við getum fengið úr 'A' A eftir Bita ANDing
með 11, 0 í þeim stað, 11111.
Svo mun þá gefa okkur nákvæmlega það sem a 'var, en hætta út þetta einstaka hluti,
þannig að við verðum 01000001, ég veit ekki hvort ég taldi rétt.
En þessi tækni Bita ORing að fá frá höfuðborginni í lágstafi
og Bita ANDing að fá frá lágstafir að fjármagni er ekki eingöngu til A.
Öll bréf, K vs K, Z vs z,
þeir eru allir bara að fara að vera mismunandi eftir þessum eina bita.
Og svo þú getur notað það til að breyta úr öllum lágstafir bréf til hvaða höfuðborg bréf og öfugt.
Allt í lagi. Svo auðveld leið til að fá úr þessu - svo í stað þess að þurfa að
skrifa út hvað 1011111 er - auðveld leið til að tákna þetta númer, og þetta er ekki einn
sem ég fór yfir í supersection en tilde (~) er annar Bita rekstraraðila.
Hvað ~ er það lítur á hluti framsetning.
Við skulum taka allir tala.
Þetta er bara tvöfaldur fjöldi, og hvað ~ er er það selbiti bara öllum bita.
Þannig að þetta var 1, nú 0, þetta er 0, nú 1, 010100.
Svo það er allt ~ er. Svo 32 er að fara að tala - að losna við það -
svo 32 er að fara að vera númer 00100000, og svo ~ af þessu er að fara að vera
þetta númer hérna sem ég ANDed 'a' með.
Er allir sjá að? Þetta er nokkuð algengt, eins og þegar þú vilt að reikna út
fyrir síðari hluti sem við gætum verið að sjá, þegar við viljum sjá hvort -
eða við viljum allt, hvert einasta bita setja nema 1
þú hættir að gera ~ á hluti sem við viljum ekki sett.
Þannig að við viljum ekki 32 bita setja, þannig að við gerum ~ af 32.
Allt í lagi. Svo getum við notað alla þá hér.
Allt í lagi, svo það er allt í lagi ef þú ert ekki gert, munum við smám saman ganga yfir saman,
eða ganga á þessu, þannig að - í gegnum þetta. Ganga í gegnum þetta.
Þannig að við höfum band okkar, og við viljum að lykkja yfir hvern staf í þeim streng og gera eitthvað við það.
Svo hvernig gera við lykkja yfir strenginn? Hvað eigum við að nota?
Ég ætla ekki að gera það hér. Já.
Þannig að ég hef Iterator minn, og hann sagði það, en hvernig veit ég hversu margir stafir eru í streng?
Strlen (s), þá i + +.
Svo er það sem ég hef gert hér er ekki besta leiðin til að gera hlutina.
Hefur einhver vita hvers vegna?
Þar sem þú ert að haka við tungumál band hvert einasta skipti.
Þannig að við erum að fara til að vilja færa strlen, ég gæti sagt upp hér, int lengd = strlen (s)
og þá ekki ég <lengd, og ef þú hefur ekki séð það áður,
Ég gæti líka gert int i = 0, lengd = strlen (s).
Og svo er þetta nokkuð betra, því nú hef ég takmarkað svigrúm
af mismunandi lengd bara þetta 'fyrir' lykkju, í stað þess að lýsa það áður
og að það er alltaf, og ef þú ekki skilið hvers vegna það er slæmt,
eða hvers vegna upphaflega var slæmt, it's - byrja á for lykkju.
Ég skoðaði ástand. Er i <lengd s?
Svo lengd s, við skulum vinna með "halló" allan tímann.
Svo lengd s, h-e-L-L-o. Lengd er 5.
Svo i = 0, lengd er 5, þannig að ég er ekki <5, þannig að lykkja heldur áfram.
Svo við förum aftur. Við athuga ástand. Er i <lengd heilsa?
Svo skulum athuga lengd Hello. H-E-L-L-o. Það er 5, ég er ekki <5, þannig að við höldum áfram aftur.
Þannig að við erum að reikna, við erum að telja halló, fyrir hverja endurtekning á lykkju,
jafnvel talið að það er aldrei að fara að breytast, það er alltaf að fara að vera 5.
Svo við minnumst bara 5 upp að framan, og nú er allt betra.
Svo iterating yfir allt band.
Hvað viljum við gera fyrir hvern staf í strengnum?
[Námsmaður séð óskiljanlegur]
Já. Svo, ef eðli er ekki Stafrófsröð, þá viljum við bara að sleppa yfir það.
Vegna þess að við umönnun aðeins um stafrófsröð stafi, við getum ekki að eignfæra númer.
Og hvernig getum við gert þetta? Svo ástandi okkar, þannig að ef við viljum eitthvað - athuga hvort það er stafrófsröð.
Svo hvernig gera athuga við þetta?
[Nemandi] Þú getur bara notað aðgerðina er alfa.
Er það með í annað hvort af þessu, eða eru eins, char.h eða eitthvað?
Við skulum ekki nota er alfa virka, og nota skýr - svo við höfum s [i],
sem er áttunda eðli s, muna að strengur er fylki af stöfum,
svo áttundi stafurinn í s.
Nú, ef það er höfuðborg bréf, vitum við að það þarf að vera á ákveðnu bili.
Og hvað er það svið?
Já. Svo ef s [i] er ≥ 65, og s [i] er ≤ 90, hvað ætti ég að gera í staðinn?
Já. Svo þú ættir að alveg aldrei að vita ASCII gildi neitt ever.
Aldrei hugsa um tölurnar 65, 90, 97 og 102, eða hvað sem það er.
Þú þarft ekki að - 112 - þú þarft ekki að vita þá á öllum. Það er rangt líka.
Aðeins má nota einn-enskar gæsalappir, einn Fastar vitna. Svo er 'A' og minna en 90 'Z. "
Og þetta er verulega betri - ég myndi ekki vita af the toppur af minn höfuð sem Z er 90.
Ég veit burt the toppur af minn höfuð að "Z" er höfuðborg Z.
Svo eins lengi og þetta er á bilinu Capital í höfuðborg Z, eða við getum stöðva fyrir lágstöfum,
Eða ef það er á bilinu ≥ 'a' og ≤ z.
Svo það er ástand okkar.
The stíl fyrir hvar á að setja þetta mismunandi.
Ég geri það svona.
Nú, hvað við viljum gera?
Við vitum að þetta bréf er karakter, sem bókstaf.
Þannig að við þurfum að skipta á milli hvort þetta ætti nú að vera höfuðborg bréf eða lágstafir bréf.
Hvernig halda við utan um hver við viljum það til að vera?
[Námsmaður raddir, óskiljanlegur]
Svo já, en láta mig stöðva.
Module 0-2 var sagt, var tillaga hent út, og ég er sammála með það.
Nema fyrirvara að eins - er þetta málið? Já.
Það er annan hvern einn, en við getum ekki mát 2 I, eða i unga fólkið 2, þar sem
eftir því að E er höfuðborg og 'a' er lágstöfum? En það er pláss aðskilja þau?
Svo þeir eru að fara að vera sú sama unga fólkið 2, en þeir eru mismunandi tilvikum.
[Námsmaður spurning, óskiljanlegur]
Já. Þannig að við erum bara að fara að halda að telja.
Við gætum líka gert það hér ef við vildum, sem gæti fengið smá ómeðfærilegur
í fyrir yfirlýsingum lykkja, ég set það upp hér.
Svo int telja = byrjar á 0.
Og nú ætla ég að telja hversu margir stafrófsröð stafir sem við höfum haft.
Þannig að við erum óhjákvæmilega að fara að telja + + þar sem við fundum annan bókstaf.
En, svo nú þú ert að segja ef telja unga fólkið 2.
Svo hvað ef telja unga fólkið 2? Oh. Ég geri == 0 fyrir nú.
Við munum einnig fara yfir það. Svo ef telja unga fólkið 2 == 0, hvað þá?
[Nemendur svar, óskiljanlegur]
Þannig að við viljum það til að enda upp hástafi.
Það eru 2 tilfelli, hástafi og lágstafir eru 2 tilfelli.
Þannig að ef við erum með lágstöfum við þurfum að gera það hástafi.
Ef það er hástafi við þurfum ekki að gera neitt.
En, er there a vegur - shouldn't hafa hreifi -
sem við gerum ekki einu sinni þurft að athuga hvort það er hástafi eða lágstafir?
Hvað getum við gert til að alltaf að tryggja að við enda alltaf upp í hástafi?
Svo taka það sem við gerðum fyrir lágstafir 'A', hvað ef við gerðum þetta sama nákvæmlega hlutur í hástafi A?
Er hástafi breyting, eða hefur gildi breyting?
Já. Svo hvaða staf höfuðborg Bita ANDed með ~ 32 er að fara að vera að sama hástaf
því fyrir hástaf á 32. hluti er ekki sett.
Þannig að ef við viljum að koma persónu s [i], við viljum það til að verða lágstafir eða hástafi.
Svo ef það var lágstafir, það er nú hástafi, ef það var hástafi, það er enn hástafi, og það er það.
Ég sagði þetta í supersection: Þú getur notað 32 ef þú vilt, en ég tilhneigingu til að vilja gera 'A' - A,
staðinn af réttlátur látlaus 32, vegna þess að það getur verið öðrum hluti.
Eftir 32 hluti, það getur verið að eitthvað af þessu, eða við myndum ekki hafa nóg
númer til að tákna alla stafi.
Svo ef þú færð 32 hluti, það gæti verið að 64 bita, það gæti verið 128 bita.
Eitthvað af þessum bitum gæti verið hluti sem greinir á milli hástafi og lágstafi.
Ég ætti ekki að þurfa að vita að það er 32 bita.
Ég get notað þetta "A" - A að fá hluti sem er mismunandi á milli tveggja
án þess að þurfa að treysta á galdur númer sem er 32.
Og svo nú, annars telja var stakur, og svo hvað vil ég gera?
[Námsmaður svarar óskiljanlegur]
[Nemandi] Hvað er það?
Ég mun gera það í 1 sekúndu.
Svo nú ef ég vil - ég vil vera viss um að eðli er nú lágstafir,
og svo get ég eða um 32, og 'a' 32 merkingu - A.
En tilkynningu, með sama rökum sem fyrri, að ef
Bréfið var þegar lágstafir, þá ORing um 32 bara heldur lágstafir.
Það hefur ekki breytt upprunalega eðli.
En núna er ég ekki að koma í veg fyrir að segja: "Ef það er lágstafir, bara gleyma óður í það,
ef það er hástafi, þá breyta því. "
Það er miklu þægilegra að gera þetta.
[Nemandi] Vildi að stefna að draga hástafi frá lágstafir vinnu ef það væri ekki 32?
Ef það var, eins og, 34 eða eitthvað?
Svo, þú þarft að vita að munurinn á milli 2 er -? >> 1 bita.
Það gæti verið meira en 1 hluti, svo lengi sem allar bita undir þessari stöðu eru þau sömu.
Þannig að við þurfum að minnsta kosti 26 stafi - eða, það eru 26 stafir.
Þannig að við þurfum að minnsta kosti 26 tölur til að tákna muninn -
Munurinn milli A og A 'verður að vera að minnsta kosti 26,
eða annað sem við viljum ekki hafa fulltrúa allt hlutafé tölur.
Það þýðir að ef við byrjum á 1, það er að fara að nota allar þessar bita,
allar þessar fyrstu 5 bita, til að tákna allt með Z.
Þess vegna er næsta hluti, eða þetta hluti er næsta hluti er sá sem er valinn til að greina á milli A og 'a.'
Það er líka hvers vegna í ASCII töflunni, það eru 5 tákn aðskilja hástafi úr lágstöfum.
Þar sem eru tákn, auka 5 sem koma upp 32 að munurinn á milli þeirra.
[Nemandi] Þannig að við gætum gert það, því ASCII er hönnuð þannig.
Já. En ASCII - munurinn gæti líka verið báðum þessum bita.
Eins, ef A var 10000001, og 'a' var 11100001 - Ég gleymi, hvað sem er.
En ef það væri það, þá gætum við samt að nota 'a' - A.
Það er bara nú munurinn á milli og 'a' er enn þessir 2 bitar.
Ég held að það er skrifað 48. Er það 32 + 64? Ég held að það sé?
Það myndi enn vera 2 bitar, hvert einasta staf, eins og, Z og Z, K og K,
Þeir myndu samt hafa sömu nákvæmlega bita sett nema fyrir þá 2 bita.
Svo eins lengi og það er alltaf satt, óháð því hvort við erum að nota ASCII eða einhver önnur kerfi,
svo lengi sem það er bara a setja fjölda bita sem eru mismunandi fyrir hvern staf,
þá virkar það fínt.
Það er bara að 32 var sett upp vegna þess að það er það fyrsta sem við gætum hugsanlega notað. >> Cool.
ÉG hafa tilhneigingu til að kjósa, ef þú hefur ekki séð, ef blokk er bara ein lína,
er hægt að fá losa af the hrokkið axlabönd, þannig að ég tilhneigingu til að kjósa að gera þetta.
Einnig, þú veist hvernig við getum gert hlutina eins og s [i] + = 1?
Þú getur líka gert s [i] Bita og = 32.
Og Bita OR = 32.
Einnig telja unga fólkið 2 == 0.
Svo muna að - ég mun ekki skrifa það - allir non-núll gildi er satt, og 0 er rangt.
Svo "ef telja unga fólkið 2 == 0" er eins og að segja "ef ekki telja unga fólkið 2."
Ég myndi sennilega hafa bara snúið við línurnar og sagði, "ef telja unga fólkið 2,
gera á eða 1, annað er á og 1, "svo að ég þarf ekki að" ekki. "
En þetta virkar alveg eins vel.
Og hvað annað get ég gert hér?
Þú getur sameinað þá með ternary ef þú vildir, en þá myndi bara gera hlutina Messier
og líklega erfiðara að lesa, þannig að við munum ekki gera það.
Einhver hefur einhverjar aðrar uppástungur?
Er að öll vandamál bað? Ó já.
Svo að losna af þessum tómar línur, nú munum við prentað f,% s að vera einn fyrir strengi,
Við munum prenta f, s.
Nú skulum hlaupa það. Gerði ég eitthvað rangt?
Það er \ ", Ég vil fá n.
Allt í lagi. Nú munum við keyra það. Það verður sennilega æpa á mig.
Strlen er string.h.
Þannig að þetta er ágætur hlutur óður Clang það segir þér hvað það er í,
stað GCC sem bara segir: "Hey, þú gleymdir eitthvað, veit ég ekki hvað það var."
En þetta mun segja við mig: "Þú átt að fela string.h."
Svo ég ekki hvetja fyrir neitt, svo það er ekki að segja neitt.
En við munum gera fordæmi þeirra, "thanks 4 the add".
Það lítur til hægri. Húrra.
Svo aftur til helstu þinn, næstum ég aldrei gera það.
Það er valfrjálst. Og helstu er eina virka sem það er valfrjálst.
Ef þú aftur ekki neitt af helstu, er gert ráð fyrir að þú átt að skila 0.
Spurningar?
Allt í lagi. Svo nú er annað vandamál.
"Muna frá seinni fyrirlestur viku 2 er að skipta gildi 2 breytum með því að farið
þessir 2 breytur til að virka (jafnvel þótt kallað skipti) er ekki nákvæmlega vinna, að minnsta kosti ekki án þess 'ábendingum. "
Og hunsa ábendingar þar til við að komast að þeim.
Við viljum að skipta 2 breytur, við erum ekki að nota aðgerð til að gera það.
Við erum enn að fara að gera það í helstu eins og það segir.
En til að nota þá 2 breytur, gera við viljum ekki að nota tímabundið breytu.
Það eru 2 leiðir til að gera þetta.
Þú getur gert það með því að nota hefðbundin tvöfaldur þinn rekstraraðila.
Svo hjartarskinn einhver vita fljótur og óhreinn vegur að gera það?
Það gæti reyndar tekið smá stund til að hugsa. Ef ég hef -
Ég stilla vandamál upp eins og þeir spyrja. Svo ef ég hef 2 breytur, A, sem er bara heiltala
sem þeir gefa mér, og summan breytu B, sem er annar heiltala sem ég er gefin.
Svo ef ég hef þessar 2 breytur, nú vil ég að skipta á þeim.
Hin hefðbundna, með reglubundnum tvöfaldur þinn stjórnandi, ég meina, eins og +, -, ÷.
Ekki Bita rekstraraðila sem starfa á tvöfaldur.
Svo með -, +, ÷, og allir þeir.
Við gætum skipta með því að gera eitthvað eins og a = a + b og b = a - b, a = a - b.
Svo, geðheilbrigði athuga, og þá munum við sjá hvers vegna það virkar.
Segjum a = 7, b = 3, þá a + b er að fara að vera 10.
Þannig að við erum nú að setja a = 10, og þá erum við að gera b = a - b.
Þannig að við erum að gera b = a - b, sem er að fara að vera 7, og b = a - b-aftur,
eða a = a - b. Hver er að fara að vera 10-7 sem er 3.
Svo nú, rétt, 'a' var 7, b var 3, og nú er b-7 og 'a' er 3.
Svo gerir þannig tilfinningu, "a" er blanda af 2 númer.
Á þessum tímapunkti, "a" er samsetning, og svo erum við að draga út upprunalega b,
og svo erum við að draga út hvað var upphaflega "a."
En þetta virkar ekki fyrir allar tölur.
Til að sjá þetta, við skulum íhuga kerfi, þannig að við höldum yfirleitt heiltölur og 32 bita.
Við skulum vinna á eitthvað sem er bara eins og 4 bita.
Vonandi kem ég með gott dæmi núna.
Svo, ég veit, þetta verður auðvelt.
Segjum 2 númer okkar eru 1111 og 1111, þannig að við erum í tvöfaldur núna.
Í raun aukastöfum, ef þú vilt að hugsa um það þannig, a = 15 og b = 15.
Og svo gerum við ráð fyrir, eftir að við skipta þeim - þeir gera ekki einu sinni að vera sömu tölur,
en ég gerði þetta svona.
Við skulum gera þá ekki sömu tölur. Við skulum gera 1111 og 0001.
Svo a = 15 og b = 1.
Eftir að við skipta þá búast við 'a' til að vera 1 og B að vera 15.
Svo er fyrsta skref okkar a = a + b.
Númer okkar eru aðeins 4 bitar á breidd, svo 'a,' sem er 1111, + b, sem er 0001,
er að fara að enda því að vera 10000, en við höfum bara 4 bita.
Svo nú a = 0.
Og nú viljum við að setja b = A - B - í raun, þetta er enn gengur fullkomlega.
a = A - B - við skulum sjá hvort þetta gengur fullkomlega.
Svo b = 0 - 1, sem myndi enn vera 15, og þá a = a - b, sem væri 1.
Kannski virkar þetta.
Mér finnst eins og það er ástæða það virkar ekki að nota reglulega.
Jæja, svo að vinna á þeirri forsendu að það virkar ekki með reglulegri starfsemi tvöfaldur,
og ég mun leita - ég Google til að sjá hvort það er satt.
Þannig að við viljum gera það með því að nota Bita rekstraraðila, og vísbending hér er XOR.
Svo, kynna XOR (^) ef þú hefur ekki séð það enn.
Það er, aftur, Bita rekstraraðila þannig að það virkar smátt og smátt, og it's -
Ef þú hefur bits 0 og 1, þá mun þetta vera 1.
Ef þú ert með bita 1 og 0, það verður 1, hefur þú bits 0 og 0 Það verður 0,
og ef þú ert með bita 1 og 1 það verður 0.
Svo það er eins og OR. Ef annað af bits eru sönn, það er 1, en ólíkt OR, það er ekki hægt að vera bæði bitar sem eru sönn.
OR hefði þetta verið 1, XOR hefði þetta verið 0.
Þannig að við erum að fara til að vilja nota XOR hér.
Hugsaðu um það í eina mínútu, ég ætla að Google.
Jæja, getur þú ekki lesið það, ég er nú á skipti XOR reiknirit síðu.
Vonandi mun útskýra hvers vegna ég skóf -
Þetta er einmitt reiknirit sem við gerðum bara.
Ég samt skil ekki af hverju - ég þarf að hafa bara valið slæmt fordæmi,
en þetta mál þar sem 'a' varð að verða 0, eftir að hafa í 5 bita, svo nú "a" er 0,
það er það sem er kallað "heiltölu flæða."
Samkvæmt Wikipedia, "Ólíkt XOR skipti, þessi breyting krefst þess að það notar nokkrar aðferðir
að tryggja að x + y veldur ekki heiltala flæða. "
Svo hefur þetta vandamál, þetta var heiltölu flæða, en ég gerði eitthvað rangt.
Ég er ekki viss. Ég ætla að reyna að koma upp með annað.
[Nemandi] Jæja, er ekki heiltala flæða þegar þú ert að reyna að setja númer á það
stærri en nemur bitum sem þú hefur úthlutað?
Já. Við höfum 4 bita. That's - við höfðum 4 bita, reynum þá að bæta 1 við það, þannig að við enda upp með 5 bitum.
En fimmta hluti bara fær skera burt, já.
Það gæti í raun og veru -
[Nemandi] Er að henda þér villa, eða gerir það - væri að kasta villu?
Nei Svo er það engin villa. Þegar þú fá til the samkoma stig, sérstaka hluti
einhvers staðar er stillt sem sagði það var gnægð, en í C þú svona bara eiga ekki við það.
Þú í raun ekki hægt að takast á við það nema þú notar sérstakar leiðbeiningar samkoma í C.
Við skulum hugsa um skipti XOR.
Og ég held að Wikipedia grein gæti hafa verið að segja að -
Svo það kom líka upp mát tölur, svo ég giska á að ég var, í orði, að gera mát tölur
þegar ég sagði að 0 - 1 er 15 aftur.
Svo það gæti í raun - með reglulegu örgjörva sem gerir 0 - 1 = 15.
Þar sem við á endanum á 0, við draga 1, svo þá hula bara aftur í kring til 1111.
Svo þetta reiknirit gæti raunverulega vinna, a + b, A - B, B - A; það gæti verið í lagi.
En það er sumir örgjörvum sem gera það ekki, og svo að það væri ekki allt í lagi í þessum sérstökum sjálfur.
XOR skipti vilja vinna á hvaða örgjörva. Allt í lagi.
Hugmyndin er að það er ætlast til að vera sama, þó.
Þar sem við erum að nota XOR til einhvern veginn að fá upplýsingar um bæði í 1 af breytum,
og þá draga út upplýsingar á einstökum breytum aftur.
Svo er einhver hafa hugmyndir / svarið?
[Námsmaður svar, óskiljanlegur]
Svo þetta ætti að vinna, og einnig, XOR er commutative.
Óháð því hvaða röð þessar 2 tölur verður að vera í allt hér,
Þessi niðurstaða er að fara til vera the sami.
Svo ^ B er b ^ a.
Þú gætir líka séð þetta skrifað sem ^ = b, b ^ = a, a ^ = b aftur.
Svo er þetta rétt, og til að sjá hvers vegna þetta virkar, hugsa um bita.
Using a smallish tala, segjum 11001, og 01100.
Svo er þetta 'a', þetta er b.
Svo ^ = b.
Við erum að fara að setja = 'A' til XOR þessara 2 hlutum.
Svo 1 ^ 0 er 1, 1 ^ 1 er 0, 0 ^ 1 er 1, og 0 ^ 0 er 0, 1 ^ 0 er 1.
Svo "a," ef þú horfir á heiltala, það er að fara að vera -
þú ert ekki að fara að sjá mikið af sambandi milli upprunalegu "A" og nýtt "a,"
en að horfa á bita, 'a' er nú eins möskva á upplýsingum
bæði upprunalegu 'A' og upprunalega b.
Þannig ef við tökum B ^ a, sjáum við að við munum á endanum á upprunalegu "a."
Og ef við tökum upprunalega 'a' ^ The New 'a,' sjáum við á endanum á upprunalegu b.
Svo (a ^ b) ^ B = 'a.' Upprunalega
Og (a ^ b) ^ a = upprunalega b.
Það er - önnur leið til að sjá þetta er eitthvað XOR sjálft er alltaf 0.
Svo 1101 ^ 1101, eru allar bits fara að vera sú sama.
Þannig að það er aldrei að fara að vera raunin þar sem 1 er 0 og hitt er 1.
Svo er þetta 0000.
Sama með þetta. (A ^ b) ^ b er eins og a ^ (b ^ b).
(B ^ b) er að fara að vera 0, a ^ 0 er bara að fara að vera "a," þar sem allir bitar eru 0.
Svo þeir einu sem eru að fara að vera þar 'a' var upphaflega 1 - átti sjálfur.
Og sama hugmynd hér, ég er nokkuð viss um að það er líka commutative.
Já. Ég gerði segja fyrir að það var commutative.
The ^ 'a,' og það er tengin, svo nú (b ^ a) ^ a.
Og við getum gert B ^ (a ^ a).
Og svo aftur, fáum við upprunalegu b.
Svo 'a' er nú blanda af 'A' og B saman.
Nota nýja greiða okkar a 'við segjum b = greiða' a '^ upprunalega b, fáum við upprunalega "a."
Og nú = combo 'a' ^ nýja b, sem var upprunalega - eða sem er nú það sem var 'a' eða b.
Það er þetta mál hérna. Þetta er = b, gamla b.
Svo nú er allt aftur í skipti röð.
Ef við litum reyndar á bita, b = a ^ b, er að fara að XOR þessar 2,
og svarið er að fara að vera svona, og þá a = a ^ b er XORing þessar 2 og svarið er þetta.
Spurningar? Allt í lagi. Svo er síðasta einn nokkuð verulega erfiðara.
[Nemandi] Ég held að hann hefur a spurning um það. >> Ó, fyrirgefðu.
[Nemandi] Hvað er í raun hraðar? Ef þú notar þessa XOR, eða er það ef þú lýsa nýja breytu?
Svo það er í raun hraðar, lýsa nýja breytu eða nota XOR til að skipta?
Svarið er, að öllum líkindum, tímabundin breytu.
Og það er vegna þess að þegar það er saman niður - það á söfnuðinum stigi,
það er ekkert sem heitir staðbundin breytu eða hvaða tímabundnar breytur eða eitthvað af þessu efni.
Þeir eru bara eins og - það er minni, og það er skráir.
Skrár eru þar sem hlutirnir eru virkir að gerast.
Þú ekki bæta 2 hlutum í minni, þú bæta 2 hluti í skrám.
Og þú koma það frá minni inn skrám til þá bæta þeim,
og þá gæti sett þá aftur í minni, en allar aðgerðir sem gerist á skrám.
Svo þegar þú ert að nota tímabundna breytu nálgun, yfirleitt það sem gerist er
þessar 2 tölur eru nú þegar á skrám.
Og svo af því að benda á, eftir að þú hefur skipt þeim,
það verður bara að byrja að nota aðra skrá.
Hvar þú hefðir verið að nota B, verður það bara að nota skrá sem var þegar geymslu "a."
Svo það þarf ekki að gera neitt til að raunverulega gera the Víxla. Já?
[Nemandi] En það tekur líka meira minni, ekki satt?
Það mun aðeins taka meira minni ef það þarf að geyma það tímabundið breytu.
Eins ef þú notar seinna að tímabundið breyta aftur einhvers staðar,
þá - eða þú gefur eitthvað til þess tímabundna breytu.
Svo ef á hverjum tíma 'a,' b-í afleysingamanneskja hafa mismunandi gildi eða eitthvað,
þá það er að fara að hafa mismunandi stöðum í minni, en það er satt að
það eru margar staðbundnar breytur sem aðeins til á skrám.
Í því tilviki, það er aldrei sett inn í minni, og svo þú ert aldrei að sóa minni.
Allt í lagi. Síðasta spurningin er aðeins meira.
Svo hér, í þessu CS50 tæki, það er orðabók.
Og ástæðan fyrir þessu er vegna þess að [? B66] er Villuleit þar sem þú munt vera að skrifa
nota kjötkássa matskeið eða reynir eða nokkur gögn uppbyggingu.
Þú ert að fara að skrifa stafa afgreiðslumaður, og þú ert að fara að nota þessa orðabók til að gera það.
En þetta vandamál, við erum bara að fara að líta upp til að sjá hvort eitt orð í orðabókinni.
Svo í stað þess að geyma alla orðabók í sum gögn uppbygging
og þá að leita yfir allt skjalið til að sjá hvort eitthvað er rangt stafsett,
við viljum bara að finna 1 orð. Þannig að við getum bara skanna yfir allt orðabók
og ef við aldrei finna orð í öllu orðabók, þá var það ekki þar.
Ef við skanna yfir allt orðabók og sé orðið, þá erum við góð, fannst okkur.
Það segir hér að við viljum byrja að horfa á virkni C-skrám-meðhöndlun,
þar sem við viljum að lesa orðabók,
en ég mun gefa vísbendingu hér um hvaða aðgerðir sem þú ættir að hugsa um.
Ég skrifa þau á bilum.
Svo þær helstu sem þú þarft til að líta á er f opin og þá óhjákvæmilega, f lokað
sem mun fara í lok program, og f skanna f.
Þú getur líka notað f lesa, en þú vilt sennilega ekki að
því að - að þú endir ekki upp að þurfa það.
F grannskoða f er það sem þú ert að fara að nota til að skanna yfir orðabókina.
Og svo þú þarft ekki að kóða upp lausn, bara að reyna eins og gervi-kóða leið
að lausn, og þá munum við ræða það.
Og í raun, þar sem ég gaf þegar þér þetta, ef þú kemst inn í flugstöðinni eða skel tæki þíns,
Ég vildi - ég yfirleitt - ef þú hefur ekki séð enn, ég veit ekki hvort þú gerðir í bekknum,
en maðurinn, þannig að maður síður, er nokkuð gagnlegt fyrir að horfa á nánast hvaða aðgerð.
Svo ég get gert, eins og, maður f, grannskoða f.
Þetta er nú að upplýsa um skanna f fjölskyldu virka.
Ég gæti líka gert mann f, opinn, og það mun gefa mér upplýsingar um það.
Svo ef þú veist hvaða aðgerð sem þú ert að nota, eða þú ert að lesa kóða
og þú sérð sumir virka og þú ert eins og: "Hvað er þetta að gera?"
Bara maður sem virka nafn.
There ert a par af skrýtin dæmi þar sem þú gætir þurft að segja
eins. Man 2 sem virka nafn, eða Man 3 sem virka nafn,
en þú verður bara að gera það ef maður virka nafn gerist ekki að vinna í fyrsta skipti.
[Nemandi] Þannig að ég er að lesa maður síðu fyrir opið, en ég er enn óviss um hvernig á að nota það og the program.
Allt í lagi. A einhver fjöldi af the man síðum er minna en gagnlegt.
Þeir eru meira gagni ef þú veist nú þegar hvað þeir gera
og þá þarftu bara að muna röð rök eða eitthvað.
Eða þeir geta gefið þér almenna yfirlit, en sumir þeirra eru mjög yfirþyrmandi.
Eins og f grannskoða F, líka. Það gefur þér upplýsingar um allar þessar aðgerðir,
og 1 lína niður gerist hér að segja, "F skanna f les frá band-eða á."
En f opna. Svo, hvernig ættum við að nota f opinn?
Hugmyndin um forrit sem þarf til að gera skrá I / O er að
þú þarft fyrst að opna skrána sem þú vilt að gera hluti með, og óhjákvæmilega
lesa það úr að skrá og gera hluti með þeim.
F opinn er það sem við notum til að opna skrána.
Málið sem við fáum til baka, þannig að hvaða skrá viljum við opna, það gefur okkur það -
hér það segir "/ notandi / share / dict / orð."
Þetta er skrá sem við viljum að opna, og við viljum að opna það -
við höfum skýrt fram hvort við viljum að opna það til að lesa eða ef við viljum að opna það til að skrifa.
There 'a par af samsetningum og efni, en við viljum opna þetta fyrir lestur.
Við viljum að lesa úr skrá.
Svo hvað er þetta aftur? Það skilar skrá stjörnu (*),
og ég verð bara að sýna allt í breytu F, þannig *,
aftur er það bendi, en við viljum ekki að takast á við ábendingum.
Þú getur held að f sem, f er nú breyta þú ert að fara að nota til að tákna hana.
Svo ef þú vilt lesa úr skránni, lesið þér frá f.
Ef þú vilt loka skrá, loka þig f.
Svo í lok áætlunarinnar þegar við viljum óhjákvæmilega að loka skrá, hvað eigum við að gera?
Við viljum loka f.
Svo nú er síðasta lagið fall sem við erum að fara til að vilja nota er skanna f, f grannskoða f.
Og hvað það gerir er að það skannar yfir skrá leita að mynstur til að passa.
Þegar litið er á manninn síðu hér sjáum við int f skanna f, hunsa aftur gildi fyrir nú.
Fyrsta röksemd er * skrá á, svo the fyrstur rök að við erum að fara að vilja til að fara framhjá er f.
Við erum að skanna yfir f.
Seinni rök er sniði band.
Ég mun gefa þér snið band núna.
Ég held að við gerast að segja, 127s \ n, a einhver fjöldi af það er óþarfi.
Hugmyndin um það að snið band er, er hægt að hugsa um skanna F sem andstæðu f prenta.
Svo prenta f, prenta f við notum líka þessa tegund af breytu sniði,
en í f prenta það sem við erum að gera er - við skulum líta á samsvarandi.
Svo prenta f, og það er í raun líka f prenta f, þar sem fyrsta rifrildi er að fara að vera f.
Þegar þú hefur prentað f, gætum við sagt eitthvað eins og: "prenta 127s \ n" og þá ef við framhjá honum band,
það er að fara að prenta þetta band og svo í nýrri línu.
Hvað 127 þýðir, ég er nokkuð viss um, en ég hef aldrei takmarkað mig við það,
Þú myndir ekki einu sinni að segja '127 'í prent F,
en hvað það þýðir prenta fyrstu 127 stafi.
Þannig að ég er nokkuð viss um að það er málið. Þú getur Google fyrir það.
En í næstu sem ég er næstum jákvæð þýðir það.
Svo er þetta prenta fyrstu 127 stafina, fylgt eftir með nýrri línu.
F skanna f nú, í stað þess að horfa á breytu og prentun það,
það er að fara að horfa á einhvern streng, og geyma mynstur í breytu.
Við skulum reyndar nota grannskoða f í öðru dæmi.
Svo skulum segja að við fengum int, x = 4,
og við vildum að búa til band úr - langaði til að búa til band
það var eins og þetta mun koma upp mun seinna,
eitthvað sem er bara eins og 4.jpg.
Svo gæti þetta verið forrit þar sem þú verður að hafa summan gegn,
summa gegn i, og þú vilt vista fullt af myndum.
Svo þú vilt vista i.jpg, þar sem ég er nokkur endurtekning af lykkju þínu.
Svo hvernig gera við þetta band fyrir að JPEG?
Ef þú vildir að prenta 4.jpg, gætum við bara segja prenta f,% d.jpg,
og þá myndi prenta fyrir þessi JPEG.
En ef við viljum spara strenginn 4.jpg, notum við grannskoða f.
Svo band s - í raun við skóf - eðli, bleikju s, við skulum fara 100.
Svo ég lýsti bara sumir fjölbreytta 100 stafi,
og það er það sem við erum óhjákvæmilega að fara að vera að geyma að JPEG inn
Þannig að við erum að fara að nota skanna f, og snið, hvernig myndum við segja% d.jpg
til að prenta 4.jpg, the snið af þessu er að fara að vera% d.jpg.
Svo er snið% d.jpg, hvað við viljum skipta% d með er x,
og nú þurfum við að geyma það streng einhvers staðar.
Og þar sem við erum að fara að geyma þetta band er í fylki s.
Svo eftir þessa línu af kóða, s, ef við prenta f,% s á breytilegum s,
það er að fara að prenta 4.jpg.
Svo f grannskoða f er sama og skanna F, nema nú er að horfa á þessa skrá
fyrir hvað á að geyma í s.
Það er það síðasta rifrildi er að fara til vera.
Við viljum að geyma - "Scan f fjölskyldu virka skannar bæði samkvæmt formi sem reynt hér.
Ef einhver eru geymd í stað atriði sem þú gætir aftur - "
Nei, gætum við verið gott. Leyfðu mér að hugsa um annað.
Svo er grannskoða f ekki - hvað Heck er fall sem gerir það?
Svo grannskoða f er ekki að fara að taka heiltölu og gera punktur JPG.
Það er að fara að [muldrar].
Vista int breytu í strengnum int C.
Hvað er þetta breyta, eða hvað er þessi aðgerð heitir?
Já. That's - já. Svo það sem ég var að skilgreina fyrir þig áður var s prenta f,
sem - sem gerir miklu meira vit, hvers vegna ég sagði að það væri miklu meira eins og F prenta.
Scan f er enn góður af eins og F prenta, en er prentað f er að fara að skanna það yfir
og skipta um breytur og nú geyma það í streng.
Í stað þess að prenta það, geymir það það í streng.
Svo hunsa það alveg. Þú getur samt hugsað snið specifier sem svona f prenta.
Svo nú, ef við vildum að gera 4.jpg hlutur, myndum við gera s prenta f, x á þetta.
Svo það skanna f er að gera - það var spurning að fara að vera?
[Nemandi] ég er bara ruglaður á því sem við erum að reyna að gera hérna
með því að JPEG. Getur þú útskýrt það 1 meiri tíma?
Svo þetta var - það er minna relevent til f skanna f nú, vonandi, mun binda aftur í einhvers konar hátt.
En það sem ég upphaflega var að ætlaði að sýna var - þetta er í raun beint við að þessir [? F5]
Þú ert að fara að nota s prenta f, þar sem segir að við höfum 100 myndir,
og þú vilt að lesa mynd 1.jpg, 2.jpg, 3.jpg.
Svo í því skyni að gera það, þú þarft að f opinn, og þá verður þú að fara í band sem þú vilt opna.
Þannig að við myndi vilja til að opna 1.jpg, í því skyni að búa til band sem er 1.jpg,
prenta f við gerum s af% d.jpg--við ekki gert fyrir int i = 0.
i <40, i + +.
Svo s prenta f% d.jpg af i.
Svo eftir þessari línu, nú breyta eða array s er að fara að 1.JPG.
Eða, 0.jpg, 1.jpg, 2.jpg. Og svo við getum opnað, aftur á móti, hver mynd fyrir lestur.
Svo er það sem er prentað f gerir. Viltu sjá hvað er prentað f er nú að gera?
[Nemandi] Jæja, svo það tekur - það skapar band, something.jpg, og geymir það.
Já. Það skapar - þetta er annað snið band, rétt eins og skanna f og prenta f,
þar sem það setur allar breytur inn í seinni rifrildi, gæti verið er í stað þess að i.
Kannski - ég meina, það er málið. En hvað er til af rökum.
Það er að fara að setja inn allar breytur í sniði band
og svo geyma í biðminni okkar, sem við köllum að biðminni, það er þar sem við erum að geyma strenginn.
Þannig að við erum að geyma inni á s á rétt-sniðinn band,% d hafa verið skipt út með 4.
[Nemandi] Þannig að ef við gerðum það, er breytan f bara að fara að vera færður?
Já. Þannig að við ættum að loka upprunalega f áður en að gera þetta.
En - og þá einnig, ef það væri ekki f opna hér, þá myndum við þurfa að segja -
Já. En það myndi opna hundrað mismunandi skrár.
[Nemandi] En við myndum ekki vera fær um að komast í eða - allt í lagi.
Allt í lagi. Svo er grannskoða f, f grannskoða f, góður af sömu hugmynd,
en í stað þess að, í stað þess að geyma það í band, það er meira eins og þú ert nú
fara yfir stunguna og mynstur samsvörun gegn sem streng og geyma niðurstöður í breytum.
Þú getur notað skanna f að flokka yfir eitthvað eins 4.jpg og geyma heiltölu 4 í summu int x.
Það er það sem við getum notað grannskoða f fyrir.
F grannskoða f er að fara að gera það á the stjórn lína.
Ég er reyndar nokkuð viss um að þetta er það sem CS50 bókasafn gerir.
Svo þegar þú segir, "fá int," það er skanna f-ing yfir - grannskoða f er sú leið sem þú færð notandi inntak.
F grannskoða f er að fara að gera það sama, en nota skrá til að skanna yfir.
Svo hér erum við skönnun á þessari skrá.
The mynstur sem við erum að reyna að passa er einhver strengur sem er 127 stafir að lengd
fylgt eftir með nýja línu
Þannig að ég er nokkuð viss um að við gætum jafnvel bara segja "passa s," því í orðabók
við átt, erum við að tryggja ekki orð að lengd,
og einnig f skanna f, held ég, hættir við nýju línuna, sama hvað.
En við munum fela nýja línu í leik, og -
[Nemandi] Ef við ekki fela nýja línu, myndi það ekki að finna hluta af orði?
Það - hvert - að horfa á orðabókina -
Svo í orðabók, þetta eru allt orð okkar.
Hver einn er á nýja línu.
The grannskoða f er að fara að taka upp þetta orð.
Ef við ekki hafa nýja línu, þá er það mögulegt að næsta skanna f mun bara lesa nýja línu.
En þar á meðal nýja línu þá verður bara hunsa nýja línu.
En við munum aldrei fá hluta af orði, þar sem við erum alltaf að lesa upp á nýtt línu, sama hvað.
[Nemandi] En hvað ef þú leitar að orðinu "cissa," eins cissa.
Mun það finna að, og segja að það er samsvörun?
Svo hér við - það verður að lesa á - þetta er í raun gott lið.
Við erum aldrei með núverandi - orðið sem við erum að leita að er fyrsta stjórn lína rifrildi.
Svo band, orð = argv 1.
Svo er band sem við erum að leita að argv 1.
Við erum ekki að leita að orði á alla í f grannskoða okkar.
Það sem við vorum að gera með skanna f að hafa hvert orð í orðabók,
og svo þegar við höfum þessi orð sem við erum að fara að nota strcmp til að bera saman þá.
Við ætlum að bera saman orð okkar og það sem við lesum bara inn
Svo óhjákvæmilega, erum við að fara að enda að gera fullt af skanna FS
fyrr en það bara gerist svo að skanna f aftur -
það mun aftur einn, svo lengi sem það hefur samþykkt nýtt orð,
og það mun skila eitthvað annað um leið og það hefur ekki tekist að passa orð.
Við erum að lesa yfir allan orðabók, geyma línu hvert orð í breytu s.
Þá erum við að bera saman orð með S, og ef samanburðurinn == 0,
strcmp gerist að koma 0 ef jafningi var gert.
Svo ef það væri 0, þá getum við prentað f, samþykkt,
eða orð í orðabók, eða hvað sem þú vilt prenta f.
Og þá - við viljum ekki að f loka aftur og aftur.
Þetta er eins konar hlutur sem við viljum gera, og við erum ekki bara að leita að orð í orðabókinni.
Þannig að við gætum gert það, ef við vildum að leita mynstur þeirra, cissa, eins og þú sagðir áður,
Ef við vildum að leita að mynstri, þá myndi það ekki í tilfelli
því það er í raun ekki orð, heldur eitt af þeim orðum í orðabók kemur að hafa það í það.
Þannig að það myndi passa þetta orð, en þessi hluti orðsins er ekki orðið sjálft.
En það er ekki hvernig við erum að nota það, við erum að lesa í hverju orði
og síðan bera saman orð sem við höfum við þessi orð.
Þannig að við erum alltaf að bera saman fullt orð.
Ég get sent út endanlegar lausnir síðar.
Þetta er eins konar næstum rétt svar, held ég.
[Námsmaður athugasemd, óskiljanlegur]
Oh, gerði ég fá losa af það áður? Bleikju s, held ég að við sagði 127 - Ég gleymi því stærsta er.
Við verðum bara að gera 128, svo nú er er nógu lengi.
Við þurfum ekki að prenta neitt.
Við erum líka að fara til að vilja hafa til að loka skránni okkar, og sem ætti að vera um rétt svar.
CS50.TV