>> [TÓNLIST]
>> DAVID J. Malan: Allt í lagi.
Þetta er CS50 og þetta er að byrja á viku 2.
Og þú munt minnast þess að yfir the fortíð par af vika,
við höfum verið að kynna tölvuna vísindi og á móti, forritun.
>> Og við byrjuðum söguna með því að Scratch, það myndræna tungumál
frá MIT Media Lab.
Og þá síðast, í síðustu viku, gerði við
kynna higher-- A lægra stigi tungumál þekkt
sem C, eitthvað sem er eingöngu texta.
Og reyndar síðasta sinn sem við kanna í því samhengi
fjölda hugtaka.
>> Þetta muna, var mjög Fyrsta forritið sem við leit á.
Og þetta program, einfaldlega, prentar út, "Halló, heimur."
En það er svo mikið virðist galdur í gangi.
Það er þetta #include með þessum Oddklofa.
Það er Int.
Það er (tóm).
Það er svigum, hrokkið axlabönd, hálf-tvípunkta, og svo margt fleira.
>> Og svo, muna að við kynntum Scratch
svo að við gætum helst sjá fortíðina að setningafræði, efni sem er í raun ekki
allt sem vitsmunalega áhugavert en snemma á
er algerlega, svolítið erfiður að vefja huganum kring.
Og reyndar einn af algengustu hlutir snemma á í forritun bekknum,
sérstaklega fyrir þeim sem minna þægilegt, er að fá svekktur með
og skemmtiferðamaður upp af ákveðinni setningafræðilegar villur, svo ekki sé minnst rökrétt villur.
Og svo meðal markmiðum okkar í dag, í raun, mun
vera að búa þig með nokkrum leysa vandamál aðferðir til hvernig
til betri leysa vandamál sjálfir í formi kembiforrit.
Og þú munt muna líka, að umhverfi sem við kynntum
síðast þegar var kallað CS50 IDE.
Þetta er vefur-undirstaða hugbúnaður sem gerir þér kleift að forrita í skýinu,
svo að segja, á meðan gæsla öll þín skrár saman, eins og við munum aftur í dag.
Og muna að við Revisited þessi mál hér,
meðal þeirra virka, og lykkjur, og breytur, og Boolean tjáning,
og aðstæður.
Og reyndar nokkrar fleiri sem við þýtt úr heimi grunni
í heim C.
>> En grundvallaratriði byggja blokkir, svo að segja,
voru í raun enn sama í síðustu viku.
Í raun, í raun við bara haft mismunandi ráðgáta stykki, ef þú vilt.
Í stað þess að fjólublátt vista blokk, við staðinn
hafði printf, sem er þessi aðgerð í C sem
gerir þér kleift að prenta eitthvað og forsníða hana á skjánum.
Við kynnti CS50 Bókasafn, þar sem þér
hafa nú yfir að ráða get_char þitt, og get_int og get_string,
og nokkrar aðrar aðgerðir sem vel, í gegnum sem þú getur fengið inntak
frá eigin lyklaborði notandans.
Og við tók einnig að líta á hlutina eins these- bool, og bleikju,
og tvöfaldur, fljóta, int, long_long band.
Og það er jafnvel aðrar tegundir gagna í C
>> Með öðrum orðum, þegar þú lýsa breytu til að geyma nokkur gildi,
eða þegar þú innleiða fall sem skilar nokkur gildi,
er hægt að tilgreina hvað tegund af gildi sem er.
Er það band, eins og röð af stöfum?
Er það að tala, eins heiltala?
Er það fleytitölu gildi, eða þess háttar?
Svo í C, ólíkt grunni, við í raun byrjaði að tilgreina hvers konar gögn
við vorum aftur eða nota.
>> En, auðvitað, hljóp við einnig inn nokkrar grundvallar mörk computing.
Og einkum, þetta tungumál C, muna
að við kíktum á heiltala flæða, raunveruleiki
að ef þú hefur aðeins endanlegt magn af minni
eða, sérstaklega, með endanlegri fjölda bita, getur þú aðeins treyst svo hátt.
Og svo skoðuðum við þetta dæmi hér þar teljari í flugvél,
reyndar, ef keyra nógu lengi myndi flæða og leitt til hugbúnaði
raunveruleg líkamleg möguleiki villa.
>> Við leit einnig á fljótandi lið ónákvæmni, að veruleikinn
að með aðeins endanlegri fjölda bita, hvort sem það er 32 eða 64,
þú getur aðeins tilgreina svo margar tölur eftir kommu, eftir sem þú
byrja að fá ónákvæm.
Svo til dæmis, einn-þriðji í Heimurinn hér, í okkar manna heimi,
við vitum er bara óendanlegur fjöldi á 3s eftir kommu.
En tölvan getur ekki endilega tákna óendanlega fjölda af tölum
ef þú leyfir aðeins það sumir endanlegt magn af upplýsingum.
>> Svo ekki bara við búa þig með meiri krafti í skilmálum
um hvernig þú gætir tjá þig á lyklaborð hvað varðar forritun,
við einnig takmarkað hvað þú getur raunverulega gert.
Og reyndar, galla og mistök geta skapast af þeim tegundum málum.
Og reyndar, meðal efni í dag eru að fara að vera efni eins kembiforrit
og í raun að leita undir hetta á hvernig hlutirnir voru kynnt í síðustu viku
eru í raun til framkvæmda þannig að þú betur
skil bæði getu og takmarkanir á tungumáli eins C.
>> Og í raun, við munum afhýða aftur lag af einföldustu gögn uppbygging,
eitthvað sem kallast fylki, þar sem Scratch gerist að hringja í "lista".
Það er svolítið öðruvísi í því samhengi.
Og þá munum við einnig kynna einn af fyrst vettvangssértæka vandamálum okkar
í CS50, heimi dulmál, the list af spæna
eða í ciphering upplýsingar svo sem hægt er að senda leyndarmál skilaboð
og lesa leyndarmál skilaboð milli tveggja einstaklinga, A og B.
>> Svo áður en við umskipti að þessi nýja veröld,
við skulum reyna að búa þér með sumir tækni sem þú getur útrýma
eða draga úr að minnsta kosti sumir af óánægju
sem þú hefur sennilega komið upp á síðustu viku eingöngu.
Í raun, á undan þér eru such-- sum Fyrstu vandamál þín í C og líkur eru,
ef þú ert eins og mig, í fyrsta skipti þú reynir að slá út áætlun,
jafnvel ef þú hugsa rökrétt The program er mjög einfalt,
þú gætir mjög vel högg a veggur, og þýðandinn er ekki að fara að vinna.
Gera eða Clang er ekki að fara að raunverulega gera boð þitt.
>> Og hvers vegna gæti það verið?
Jæja, við skulum taka a líta á, kannski, einföld forrit.
Ég ætla að fara á undan og vista þetta í skrá vísvitandi heitir buggy0.c,
vegna þess að ég veit það að gölluð fyrirfram.
En ég gæti ekki átta sig á að ef þetta er fyrsta eða annað eða þriðja program
að ég í raun að gera sjálfur.
Þannig að ég ætla að fara á undan og slá út, int helstu (tóm).
Og þá inni hrokkið axlabönd mínum, mjög kunnugur ( "halló, world--
sviga, n ") - og hálf-hreinsun.
>> Ég hef vistað skrána.
Nú ætla ég að fara niður til stöðvarinnar gluggann minn
og gerð gera buggy0, vegna þess, aftur, nafn skrárinnar dag er buggy0.c.
Svo ég slá gert buggy0, Enter.
>> Og ó, nei, man frá síðasta sinn að engin villuskilaboð er gott.
Svo engin framleiðsla er gott.
En hér hef ég greinilega sumir tala um mistök.
>> Svo fyrstu línu af framleiðslu eftir að slá gera buggy0, muna,
er nokkuð fjölorður framleiðsla Clang er.
Undir hetta, CS50 IDE er stillt
að nota a heild búnt af möguleikar með þennan þýðanda
þannig að þú þarft ekki að hugsa um þá.
Og það er allt sem fyrsta línan þýðir að byrjar með Clang.
>> En eftir það, vandamálin byrja að gera útlit þeirra.
Buggy0.c á línu 3, eðli 5, það er stór, rauður villa.
Hvað er þetta?
Óbeint lýsa bókasafn virka printf með Tegund int (const char *,
...) [-Werror].
Ég meina, það mjög fljótt fær mjög yfirnáttúrulegt.
Og vissulega, fyrst sýn, við gerðum ekki
ætlast til að þú að skilja heild á þessi skilaboð.
Og svo einn af þeim lærdóm dag er að fara
að vera að reyna að taka mynstur, eða svipaða hluti,
að villur sem þú gætir hafa fundur í fortíðinni.
Svo skulum stríða sundur aðeins þau orð sem líta kunnuglega.
The stór, rauður villa er greinilega táknrænt eitthvað sé rangt.
>> óbeint lýsa bókasafn virka printf.
Svo jafnvel ef ég er ekki alveg að skilja hvað óbeint lýsa bókasafn virka
þýðir, vandamálið hlýtur snýr að printf einhvern veginn.
Og uppspretta þeirrar útgáfu hefur að gera með að lýsa því.
>> Lýsa fall er að minnast á það í fyrsta skipti.
Og við notuðum hugtök í síðustu viku á að lýsa frumgerð fall er,
annaðhvort með einni línu efst á þinn eigin skrá eða í svokölluðu haus skrá.
Og í hvaða skrá gerði við segjum í síðustu viku að printf er vitna,
unquote, lýsti?
Í hvaða skrá er frumgerð hennar?
>> Svo ef þú manst, mjög fyrstur hlutur ÉG slegið, nánast hvert forrit á síðasta time--
og tilviljun áðan byrjaði slá myself-- var þessi here--
hash-- #include <stio-- fyrir inntak / output-- punktur klst Og reyndar,
ef ég spara nú þessa skrá, ég ætla að fara á undan og hreinsa skjáinn minn,
sem þú getur gert með því að slá Tær, eða þú getur haldið Control L,
bara til að hreinsa endastöðvar þína bara til að koma í veg fyrir sumir ringulreið.
>> Ég ætla að fara á undan og aftur gerð gera buggy0, Enter.
Og voila, ég sé samt að langur stjórn frá Clang,
en það er engin villuboð í þetta sinn.
Og reyndar, ef ég geri ./buggy0, bara eins og síðasta sinn,
þar punktur þýðir þetta skrá, Slash þýðir bara,
hér kemur nafn af the program og að nafn af the program er buggy0,
Enter, "Halló, heimur."
>> Nú, hvernig gætir þú ert tína ax þessa lausn
án þess endilega að viðurkenna eins mörg orð
eins og ég gerði, vissulega, hafa gert þetta í mörg ár?
Jæja, við gerum á fyrsta vandamál sett, munum við kynna þú til a stjórn
að eigið starfsfólk CS50 er skrifaði heitir help50.
Og reyndar, C gerir forskrift vandamálið sett um hvernig á að nota þetta.
>> En help50 er fyrst og fremst forrit sem starfsfólk CS50 er
skrifaði sem leyfir þér að keyra skipun eða keyra forrit,
og ef þú skilur ekki þess framleiðsla, til að fara framhjá framleiðsla þess að help50,
á hver benda hugbúnað að starfsfólk námskeiðinu skrifaði
verður að líta á framleiðslu áætlunarinnar þinnar línu fyrir línu, eðli með staf.
Og ef við, starfsfólk, viðurkenna villuboð sem þú ert að upplifa,
Við munum reyna að vekja þig með nokkrum Retorísk spurningar, með einhverjum ráðum,
líkt og TF eða CA eða mig myndi gera í eigin persónu á skrifstofutíma.
>> Svo líta til help50 ef þú ert ekki endilega viðurkenna vandamál.
En ekki treysta á það of mikið og hækja.
Vissulega reyna að skilja hennar framleiðsla og þá læra af henni
þannig að aðeins einu sinni eða tvisvar heldur þú alltaf hlaupa help50 fyrir tiltekna villa
skilaboð.
Eftir það, ættir þú að vera betur búið sjálfur
að reikna út hvað það er í raun.
>> Við skulum gera eitt annað hér.
Leyfðu mér að fara á undan, og í öðru skrá við munum kalla þetta buggy1.c.
Og í þessari skrá er ég fara til deliberately--
en þykjast að ég er ekki skilja hvað mistök sem ég hef gert.
>> Ég ætla að fara á undan og gera this-- #include, þar sem ég hef
lært lexíu mína frá í smá stund síðan.
Int helstu (tóm), eins og áður.
Og þá hér er ég að fara að gera band s - get_string.
Og muna frá síðasta skipti sem þetta þýðir, hey, tölva,
gefa mér breytu, kalla það er, og gera tegund breytunni a band
svo ég get geymt eitt eða fleiri orð í henni.
>> Og þá á hægri hönd hlið merkið
er get_string, sem er virka í CS50 bókasafninu
sem gerir einmitt það.
Það fær virka og þá Hendur það frá hægri til vinstri.
Þannig að þetta merkið þýðir ekki "Jafngildir" eins og við gætum hugsa í stærðfræði.
Það þýðir verkefni frá hægri til vinstri.
Þannig að þetta þýðir, taka band frá notandi og geyma það inni í s.
>> Nú skulum nota það.
Leyfðu mér að fara á undan núna og eins sekúndu lína, láta mig fara á undan og segja "halló" -
ekki "heimur", en "halló,% s-- sem er tákn okkar, komma s,
sem er breytilegt okkar, og þá hálf-hreinsun.
Þannig að ef ég gerði ekki skrúfa upp of mikið hér, þetta lítur út eins og rétta númerið.
>> Og eðlishvöt mín eru nú að þýða það.
Skráin heitir buggy1.c.
Þannig að ég ætla að gera gera buggy1, Enter.
Og fjári-það, ef það er ekki jafnvel fleiri villur en áður.
Ég meina, það er meira villuskilaboð það myndi
virðast en raunverulegum línur í þessari áætlun.
>> En takeaway hér er, jafnvel ef þú ert óvart
með tveimur eða þremur eða Fjórir fleiri villuskilaboð,
einblína alltaf á mjög fyrst af þessum skilaboðum.
Þegar litið er á efsta flestum einn, rolla aftur upp eins þarf að vera.
Svo hér er ég slóst úrbótarpróf buggy1.
Hér er um að Clang framleiðsla eins og búist.
>> Og hér er fyrsta rauða villa.
Notkun á óskilgreinda kennimerki band, gerði ég meina staðall í?
Svo er staðalbúnaður í reyndar eitthvað annað.
Það vísar til notanda hljómborð, fyrst og fremst.
>> En það er ekki það sem ég meinti.
Ég ætlaði band, og ég þýddi get_string.
Svo hvað er það sem ég gleymdi að gera þennan tíma?
Hvað vantar í þetta sinn?
Ég hef #include minn, svo ég hef aðgang að printf.
>> En hvað ég ekki aðgangur að bara ennþá?
Jæja, rétt eins og síðasta sinn, Ég þarf að segja þýðanda
Clang hvaða þessar aðgerðir eru.
Get_string kemur ekki með C. Og einkum, það
kemur ekki í haus skrá,.
Það kemur í staðinn í eitthvað starfsfólk skrifaði,
sem er öðruvísi skrá nefna en viðeigandi nafni.
>> Svo einfaldlega með því að bæta að einni línu af code-- muna frá síðasta tíma
að þegar Clang keyrir, það er að fara að líta á kóða efst mína til botns,
frá vinstri til hægri.
Það er að fara að taka eftir, ó, þú vilt.
Leyfðu mér að fara og finna það, þar sem það er á þjóninum,
afrita og líma það, í raun, flæða efst eigin skrá
svo að á þessum tímapunkti í sögunni, lína 1, restin af the program
getur reyndar nota eitthvað af þeim störfum þar, meðal þeirra get_string.
Þannig að ég ætla að hunsa restin af þessir villa,
vegna þess að ég reyndar grunar að aðeins sá fyrsti máli í raun og veru.
Og ég ætla að fara á undan og endursýning, eftir vistun skrá minn gera buggy1.
Og voila, það gerði vinna.
Og ef ég geri ./buggy1 og slá í, til dæmi, Zamyla, ég nú vilja fá halló,
Zamyla, í stað þess að halló, heimur.
>> Allt í lagi.
Svo takeaways hér þá eru til, einn, að reyna að tína eins mikið og þú getur
frá villa skilaboð einar, leita á sumir af the þekkta orðum.
Útilokar að nota help50 á vandamálið sett forskrift.
En útilokunar það líka, alltaf að líta á efstu villa eingöngu, að minnsta kosti
upphaflega, til að sjá hvaða upplýsingar það gæti í raun skila.
En það kemur í ljós að það er jafnvel meira virkni innbyggður
í CS50 bókasafn til að hjálpa þú snemma á önninni
og snemma á forritun reikna út hvað er að fara úrskeiðis.
Svo skulum gera annað dæmi hér.
Ég ætla að kalla þetta buggy2, sem, aftur, er að fara að vera gölluð út
hliðsins, við hönnun.
>> Og ég ætla að fara á undan og gera #include.
Og þá er ég að fara að gera int helstu (tóm).
Og þá er ég að fara að gera fyrir lykkju.
Fyrir (int i _ 0.
I er minni en eða jafnt og 10.
Ég ++, og síðan í hrokkið axlabönd, ég ætla að prenta út bara hashtag tákn hér
og nýja línu staf.
>> Svo ásetningi mínum með þetta Forritið er einfaldlega
að iterate 10 sinnum og á hverri ítrun
þeirrar lykkju í hvert skipti gegnum hringrás,
prenta út hashtag, a hashtag, a hashtag.
Einn á línu vegna þess að ég hafa nýja línu þar.
Og muna að fyrir lykkja, fyrir síðustu week--
og þú munt fá fleiri kannast við setningafræði
með því að nota það með starfi áður long-- þetta gefur mér
breytu sem heitir i og setur það í 0.
>> Þetta hækkar i á hvert endurtekning af 1.
Svo ég fer í 1 til 2 til 3.
Og þá er þetta ástand í miðja milli the parhús-tvípunkti
fær köflóttur á hverjum endurtekning á að gera viss um að við erum enn innan.
Svo vil ég að iterate 10 sinnum, svo ég hafa svoleiðis mjög innsæi bara
setja 10 sem efri mín það.
>> Og enn, þegar ég hlaupa þetta, eftir gerð það með gera buggy2--
og það er saman í lagi.
Þannig að ég hef ekki setningafræði villa í þetta sinn.
Leyfðu mér að fara á undan núna og hlaupa buggy2, Enter.
Og nú fletta upp.
Og láta mig aukast stærð glugga.
>> Ég virðist hafa 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.
Svo er það 11 hashtags, jafnvel þótt Ég setti greinilega 10 inni þessa lykkju.
Nú sumir af þú might sjá strax hvað villa er vegna þess, reyndar, þetta
er ekki mjög erfitt villa að gera.
En það er mjög algengt gert mjög snemma.
>> Það sem ég vil benda á, þó, er, hvernig gæti ég reikna þetta út?
Jæja, það kemur í ljós að CS50 bókasafn kemur
með ekki aðeins get_string og get_int og get_float og aðrar aðgerðir.
Það kemur líka með sérstakri aðgerð kallast eprintf, eða, villa printf.
Og það er til staðar eingöngu til að gera það svolítið auðveldara fyrir þig
þegar kembiforrit kóðann þinn bara prenta villuboð á skjánum
og vita hvar það kom frá.
>> Svo til dæmis, eitt sem ég gæti gera hér með þessi aðgerð er this--
eprintf, og þá ætla ég að fara á undan og segja að ég er nú% i, sviga, n.
Og ég ætla að stinga í verðmæti i.
Og upp efst, því þetta er í CS50 bókasafn,
Ég ætla að fara á undan og eru
svo ég hef aðgang að þessari aðgerð.
En við skulum íhuga hvaða línu 9 er ætlað að vera að gera.
Ég ætla að eyða þessu á endanum.
Þetta hefur ekkert að gera með heildarstefnu markmiði mínu.
En eprintf, villa printf, er bara ætlað að gefa mér greiningu upplýsinga.
Þegar ég keyrt forritið mitt, ég vil sjá þetta á skjánum tímabundið
svo bara að skilja hvað er í gangi.
>> Og reyndar á hverju endurtekning hér á línu 9
Ég vil sjá, hvað er gildi i?
Hvað er gildi i?
Og vonandi, ég ætti bara sjá þessi skilaboð, einnig 10 sinnum.
>> Svo láta mig fara á undan og endurþýða forritið mitt,
sem ég þarf að gera hvenær Ég gera breytingar. ./buggy2.
Og now-- lagi.
There 'a einhver fjöldi fleiri að fara á.
Svo láta mig fletta upp í enn stærri glugga.
>> Og þú munt sjá að hvert er Myllumerki er enn prentun.
En í milli hvert þeirra er nú þetta sjúkdómsgreiningar framleiðsla snið eins og hér segir.
The nafn af áætlun minni hér er buggy2.
The nafn af the skrá er buggy2.c.
The lína númer sem þetta var prentað er lína 9.
Og þá er til hægri á sem villuboð að ég á von.
>> Og hvað er gott um þetta er að núna er ég ekki að endilega telja
í höfðinu á mér hvað forritið mitt er að gera.
Ég get séð að á fyrsta endurtekning i er 0,
þá 1, síðan 2, þá 3, þá 4, þá 5, þá 6, þá 7, síðan 8, then 9, þá
10.
Svo bíddu í eina mínútu.
Hvað er að gerast hér?
Ég virðist samt vera að telja sem ætlað allt að 10.
>> En hvar var ég að byrja?
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10.
Svo 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- 11. fingurinn
er til marks um vandans.
Ég virðist hafa talið rangt í lykkju minni.
Frekar en að fara 10 endurtekningar, Ég er farin á 0,
Ég ætla að binda enda á og í gegnum 10.
En vegna þess, eins og tölva, Ég er farin að telja á 0,
Ég skal telja upp til, en ekki í gegnum, 10.
>> Og svo festa, ég loksins ljóst hér, er eitt af tvennu.
Ég gæti mjög einfaldlega sagt telja upp að minna en 10.
Svo 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, sem er reyndar rétt,
jafnvel þó að það hljómar smá rangt.
Eða ég gæti gert minna en eða jafnt og til 9, svo lengi sem ég byrja á 0.
Eða ef þú virkilega líkar ekki það, þú geta treyst upp í gegnum 10 en byrja á 1.
En aftur, þetta er bara ekki það algengt.
Í programming-- vísu ekki svo mikið í Scratch--
en í forritun í C og öðrum tungumálum,
eins JavaScript og Python og aðrir, það er
bara mjög algengt að umfjöllun okkar tvöfaldur
bara byrja að telja á því lægsta tala sem þú getur, sem er 0.
Allt í lagi.
Svo það er eprintf.
Og aftur, nú að ég hef mynstrağur út minn vandamál, og ég ætla að fara aftur í 0
gegnum minna en 10, ég er að fara að fara í og ​​eyða eprintf.
>> Það ætti ekki að vera þar þegar ég skip númerið mitt eða sendu númerið mitt
eða sýna það að einhver annar.
Það er í raun bara ætlað um tíma.
En nú hef ég fastur þetta sérstaklega vandamál eins og heilbrigður.
>> Jæja, við skulum gera eitt dæmi hér sem ég ætla að svipa upp eins og hér segir.
Ég ætla að fara á undan og #include. $ 50
Og ég ætla að fara á undan og #include.
>> Og ég ætla að spara þessi skrá sem buggy3.c.
Og ég ætla að fara á undan og lýsa int helstu (tóm).
Og þá inni þar Ég ætla að gera int i _ -
Ég vil að innleiða áætlun með get_negative_int.
Þetta er ekki fall sem er til staðar enn.
Þannig að við erum að fara að innleiða það í bara smá stund.
En við erum að fara að sjá hvers vegna það er þrjótur við fyrstu umferð.
Og þegar ég hef fengið int frá notanda,
Ég ætla bara að fara að prenta% i er neikvætt heiltala, sviga, n, komma, i.
Með öðrum orðum, allt sem ég langar þetta forrit til að gera
er að fá neikvæð int frá notandinn og síðan prentað út
að svo og svo er neikvæð Int.
>> Nú þarf ég að framkvæma þessa aðgerð.
Svo seinna í minn skrá, ég ætla að fara undan og lýsa fall sem kallast
get_negative_int (tóm) - og við munum koma aftur á það að línan þýðir aftur
í moment-- int n; do-- do sem following-- printf n er :.
Og þá er ég að fara að gera n - get_int, og að gera þetta á meðan n er stærra en 0.
Og síðan aftur n ;.
>> Svo er það mikið að gerast í þetta en enginn sem við gerðum ekki
líta á síðustu viku, að minnsta kosti stuttlega.
Svo á línu 10 hér ég hef lýst að virka kallast get_negative_int,
Ég hef sett (tóm), í sviga, og er ástæðan sú þetta
tekur ekki inntak.
Ég ætla ekki liggur neitt í þessa aðgerð.
Ég ætla bara að fá eitthvað til baka af því.
>> Og hvað er ég að vonast til fá aftur er heiltala.
Það er engin gögn tegund í C heitir negative_int.
Það er bara int, svo það er að fara að vera á okkur til að ganga úr skugga um
að verðmæti sem er í raun skilað er ekki aðeins int
en er einnig neikvætt.
>> Á línu 12. Ég ætla að lýsa yfir breytu heitir n og gera það af int.
Og þá í samræmi 13. gegnum 18 Ég gera eitthvað á meðan eitthvað er satt.
Ég ætla að fara á undan og prentun n er, ristli, og síðan bil,
eins og hvetja til notanda.
>> Ég ætla þá að hringja get_int og geyma svokallaða skilagildi
í breytilegum n að.
En ég ætla að halda að gera þetta á meðan n er stærra en 0.
Með öðrum orðum, ef notandinn gefur mér int og þessi tala er hærri en 0,
Ergo, jákvæð, ég ætla að bara halda reprompting notanda,
halda reprompting, með því að neyða þá til að vinna og gefa mér neikvæða int.
>> Og þegar n er í raun negative-- býst notanda loks tegundir -50,
þá er þetta á meðan lykkja ekki lengur satt vegna þess að -50 er ekki meiri en 0.
Þannig að við brjótast út af því lykkja rökrétt og aftur n.
>> En það er eitt annað sem ég þarf að gera.
Og ég get einfaldlega gert þetta með því að afrita og líma
ein lína af kóða efst á skránni.
Ég þarf að kenna Clang, eða lofa að Clang,
skýrt sem ég vil, reyndar, fara og framkvæma
þessi aðgerð get_negative_int.
Það gæti bara verið lægri í skrá.
Aftur, muna að Clang les hlutina toppur til botn,
vinstri til hægri, svo þú getur ekki hringja í aðgerð ef Clang
veit ekki það er að fara að vera til.
>> Nú, því miður, þetta forrit, eins og sumir af þú might hafa taka eftir,
er þegar þrjótur.
Leyfðu mér að fara á undan og gera buggy3.
Það safnar, svo vandamálið mitt er nú ekki a setningafræði villa, eins og texta villa,
það er í raun að fara að vera rökrétt villa sem ég hef vísvitandi
gerði sem tækifæri til að skref í gegnum hvað er að gerast.
>> Ég ætla að fara á undan núna og hlaupa buggy3.
Og ég ætla að fara undan og ekki vinna.
Ég ætla að gefa það númer 1.
Það var ekki eins og það, svo það er vekur mig aftur.
>> Hvernig um 2?
3?
50?
Ekkert af þeim eru að vinna.
Hvernig óður -50?
Og the program virðist virka.
>> Leyfðu mér að reyna það einu sinni enn.
Leyfðu mér að reyna -1, virðist virka.
Leyfðu mér að reyna -2, virðist virka.
Leyfðu mér að reyna 0.
Huh, það er rangt.
Nú erum við að vera svolítið smámunasamur hér.
En það er reyndar raunin að 0 er hvorki jákvæð né neikvæð.
Og svo sú staðreynd að áætlun mín er segja að 0 er neikvæð heiltala,
það er ekki tæknilega rétt.
>> Nú, hvers vegna er það að gera þetta?
Jæja, það gæti verið augljóst.
Og reyndar, the program er ætlað að vera nokkuð einfalt
þannig að við höfum eitthvað til að kanna.
>> En við skulum taka þriðja aflúsun tækni hér kallað debug50.
Svo er þetta forrit að við höfum bara búið
þessu ári sem heitir debug50 sem mun leyfa þér
að nota það sem er kallað innbyggður-í Grafísku aflúsara í CS50 IDE.
Og a aflúsara er bara forritið sem yfirleitt leyfir þér að keyra forritið þitt
en skref fyrir skref fyrir skref, línu með línu fyrir línu, stansa, poking
kring, horfa á breytum þannig að the program hjartarskinn ekki bara blása framhjá þér
og fljótt prenta eitthvað eða ekki prenta eitthvað.
Það gefur þér tækifæri á manna hraði, til að hafa samskipti við það.
>> Og til að gera þetta, þú Einfaldlega gera eftirfarandi.
Eftir samantekt númerið þitt, sem ég gerði þegar, buggy3,
þú ferð á undan og keyra debug50 ./buggy.
Svo mikið eins help50 hefur þú keyrir help50 og þá stjórn,
debug50 hefur þú keyrir debug50 og þá nafn stjórn.
>> Nú horfa á það sem gerist á skjánum mínum, á hægri hönd hlið í lagi.
Þegar ég lenti Run, allt í skyndileg þessi réttur-hönd spjaldið
opnast á skjánum.
Og það er mikið að gerast á við fyrstu sýn.
En það er ekki of mikið að hafa áhyggjur enn.
>> Þetta er að sýna mér allt sem er að gerast inni í áætlun mína
núna og um þessar hnappar upp efst er þá
leyfa mér að stíga í gegnum númerið mitt lokum skref fyrir skref fyrir skref.
En ekki bara ennþá.
Eftir hvað gerist.
Á flugstöðinni gluggann minn Ég hef verið beðinn um að n.
Og ég ætla að fara á undan og vinna í þetta sinn og tegund í -1.
Og að vísu lítið cryptically, -1 er neikvæð heiltala, eins og búist var við.
>> Og þá barn lauk með Staða 0 GDBserver spennandi.
GDB, GNU Debugger, er nafn af undirliggjandi hugbúnaður
sem útfærir þetta aflúsara.
En allt þetta í raun þýðir, aflúsara fór í burtu vegna þess að forritið mitt hætta
og allt var vel.
Ef ég vil sannarlega kemba forritið mitt, Ég verð að preemptively segja debug50,
þar sem ég vil að byrja stepping gegnum númerið mitt?
>> Og kannski einfaldasta leiðin til að gera það er sem hér segir.
Ef ég sveima yfir Göturæsi af ritstjóra minn hér,
svo í raun bara í the skenkur hér, vinstra megin við línu númer,
Takið eftir að ef ég smelli bara einu sinni, ég setti smá rauða punktur.
Og það litla rauða punktur, eins og stöðvunin þýðir, hey,
debug50, hlé framkvæmd númerið mitt þarna þegar ég keyra þetta forrit.
>> Svo skulum gera það.
Leyfðu mér að fara á undan og keyra forritið mitt aftur með debug50 ./buggy3, Enter.
Og nú, tilkynning, eitthvað öðruvísi hefur gerst.
Ég ætla ekki að vera beðin enn í flugstöðinni gluggann minn
fyrir neitt, því ég hef ekki fengið það enn í áætlun mína.
Takið eftir að á línu 8 sem er nú lögð áhersla á,
og það er lítið ör á vinstri orðatiltæki, þú ert í bið hér.
Þessi lína af kóða, lína 8, hefur ekki enn framkvæmt.
>> Og hvað er forvitinn, ef ég lít hérna á hægri hönd hlið,
eftir því að ég er á staðnum breytilegt, staðbundin í þeim skilningi
að það er inni í núverandi aðgerð.
Og gildi þess, virðist sjálfgefið, og svoleiðis þægilegan, er 0.
En ég vissi ekki að slá 0.
Það gerist bara að vera hennar Sjálfgefið gildi í augnablikinu.
>> Svo láta mig fara á undan og gera þetta núna.
Leyfðu mér að fara á undan og á efst hérna, ég er
að fara á undan og smelltu á þennan fyrsta táknið sem
þýðir skrefið yfir sem þýðir sleppa ekki það heldur stíga yfir þessa línu af kóða,
framkvæma það á leiðinni.
>> Og nú, eftir, minn hvetja hefur bara breyst.
Afhverju er það?
Ég hef sagt debug50, keyra þessa línu af kóða.
Hvað þýðir þessi lína af kóða gera?
Hvetja mig fyrir int.
OK.
Leyfðu mér að vinna.
Leyfðu mér að fara á undan núna og slá -1, Enter.
Og nú eftir hvað hefur breyst.
Á hægri hönd hlið, mín staðbundin breytu ég
er ætlað eins og að vera -1 nú.
Og það er enn af gerðinni int.
>> Og takið eftir, líka, minn svokallaða kalla stafla, þar gerði ég hlé?
Við munum tala meira um þetta í framtíðinni.
En kallið stafla átt bara að það aðgerðir eru nú á hreyfingu.
Núna er það bara aðal.
Og núna aðeins staðbundin breyta er ég með gildið 1.
>> Og þegar ég stíga loks yfir þessa línu hér, með sama táknið efst til hægri,
-1 Er neikvæð heiltala.
Nú er það stansa yfir þessi hrokkið borsveif.
Við skulum láta það gera hlutur hennar.
Ég stíga yfir þessi lína, og voila.
>> Svo ekki allt sem hræðilega uppfræða enn,
en það var að láta mig gera hlé og hugsa um rökrétt
hvað þetta forrit er að gera.
En það var ekki rangra raunin.
Við skulum gera þetta aftur eins og hér segir.
>> Ég ætla að láta þessi breakpoint á línu 8 við rauða punktur.
Ég ætla að endursýning debug50.
Það er sjálfkrafa sett í bið hér.
En í þetta skiptið, í stað þess að stepping yfir þessa línu,
láta mig fara í raun inni get_negative_int og reikna út,
hvers vegna er það að samþykkja 0 sem gilt svar?
>> Svo í stað þess að smella Step Over.
Ég ætla að fara á undan og smelltu stíga inn.
Og eftir að línan 8 sem er nú hápunktur nú skyndilega
verður línan 17.
>> Nú, það er ekki það að aflúsara hefur sleppt línur 14 og 15 og 16.
Það er bara að það er ekkert til að sýna þér það.
Þeir eru bara að lýsa yfir breytur, og þá er orðið Gera
og þá opinn hrokkið Brace.
Eina hagnýtur línu sem er safaríkur er í raun þetta hérna, 17.
Og það er þar sem við höfum bið sjálfkrafa.
>> Svo printf ( "n.is:") ;, svo sem hefur ekki gerst enn.
Svo skulum fara á undan og smelltu Skref Over.
Nú hvetja minn, reyndar, breytt í ( "n er:").
Nú get_int, ég ætla ekki að fara að standa stepping inn,
vegna þess að virka var gert af CS50 í bókasafninu.
Það er væntanlega rétt.
>> Þannig að ég ætla að fara á undan og konar samstarf með því að gefa henni
int, en ekki neikvæð Int.
Svo láta mig fara á undan og högg 0.
Og nú hvað gerist hér þegar ég fá niður til að stilla 21?
Ég hef ekki ítrekað aftur.
Ég virðist ekki vera fastur í þeirri lykkju.
Með öðrum orðum, þetta gula Bar ekki halda að fara í kringum,
og kring, og í kring.
>> Nú, hvers vegna er það?
Jæja, n, hvað er N núna?
Ég get líta á staðbundnum breytur í aflúsara.
n er 0.
Allt í lagi, hvað var ástand mitt?
>> 20-- lína 20 er vel, 0 er meiri en 0.
Það er ekki satt.
0 er ekki meiri en 0.
Og svo ég braust út úr þessu.
>> Og svo er það þess vegna á línu 21, ef ég held áfram reyndar,
Ég ætla að fara aftur 0, jafnvel þótt ég ætti að hafa hafnað 0
sem í raun ekki að vera neikvætt.
Svo nú, ég í raun ekki einu sinni hugsa um aflúsara.
Fékk það, ég þarf ekki að vita hvað meira er að gerast.
>> Þannig að ég ætla að fara á undan og bara smella á play takkann,
og láta þetta ljúka upp.
Nú, ég hef orðið ljóst að minn galla er greinilega á línu 20.
Það er rökrétt villa mín.
>> Og svo hvað ég vil að gera til að breyta þessu?
Ef vandamálið er að ég er ekki smitandi 0, það er bara rökrétt villa.
Og ég get sagt en n er stærra en eða jafnt og 0,
halda vekur notandi aftur og aftur.
>> Svo aftur, einföld mistök, kannski jafnvel augljóst þegar þú sást mig
skrifa það bara nokkrar mínútur síðan.
En takeaway hér er að með aflúsunar 50,
og með kembiforrit hugbúnaður almennt,
þú hefur þetta nýja stofna styrk til ganga í gegnum eigin kóðann þinn, líta
um að rétta hönd spjaldið hvað Breyturnar gildi eru.
Svo þú ert ekki endilega að nota eitthvað
eins og þú eprintf að prenta þau gildi.
Þú geta raunverulega sjá þá sjónrænt á skjánum.
>> Nú, fyrir utan þetta, það er athyglisvert að það er annar tækni sem er
reyndar frábær sameiginleg.
Og þú gætir furða hvers vegna þetta litla strákur hér hefur verið sitjandi á sviðinu.
Svo er það þessi tækni, almennt þekktur sem gúmmí önd kembiforrit,
sem í raun er bara erfðaskrá til þess
að oft þegar forritari að skrifa kóða,
þeir eru ekki endilega samstarfi við aðra,
eða vinna í sameiginlegum umhverfi.
>> Þeir eru eins konar heima.
Kannski er það seint á kvöldin.
Þeir eru að reyna að tala út einhverjum galla í kóðanum þeirra.
Og þeir eru bara ekki að sjá það.
>> Og það er engin herbergisfélagi.
Það er engin TF.
Það er engin CA í kring.
Allt sem þeir hafa á hilluna þeirra er þetta litla gúmmí Ducky.
>> Og svo gúmmí önd kembiforrit er bara þessi boð
að hugsa um eitthvað sem kjánalegt eins og þetta sem alvöru veru,
og í raun ganga í gegnum kóðann þinn munnlega við þennan dauða hlut.
Svo, til dæmis, ef þetta er dæmi mitt here--
og muna að fyrr vandamálið var þetta,
ef ég eyða þessum fyrstu línu af kóða, og ég fara á undan og gera gallaðir 0 aftur,
muna að ég hafði þetta villuskilaboð hér.
Svo hugmynd hér, fáránlegt þó að ég finnst í augnablikinu að gera þetta opinberlega,
er það villa.
>> OK, svo vandamálið mitt er að ég hef óbeint lýst bókasafn virka.
Og það bókasafn virka er printf.
Declare-- OK, lýsa minnir mig á frumgerðum.
>> Það þýðir að ég þarf í raun segja þýðanda fyrirfram hvað
virka lítur út.
Bíddu aðeins.
Ég hafði ekki staðlað io.h.
Þakka þér kærlega fyrir.
>> Svo bara þetta ferli of-- þig þurfa ekki að í raun hafa önd.
En þessi hugmynd um gangandi sjálfur í gegnum eigin kóðann þinn
þannig að þú heyrir jafnvel sjálfur, svo að þú
gera sér grein fyrir aðgerðaleysi í eigin athugasemdir, er yfirleitt hugmynd.
>> Og kannski meira rökrétt, ekki svo mikið með því einu heldur meiri þátt
dæmi við gerðum bara í buggy 3.c, þú gætir gengið sjálfur í gegnum það
eins og hér segir.
Svo allt í lagi, gúmmí Ducky, DDB, ef þú vilt.
Hér höfum við í meginvirkni mínum, Ég ætla að hringja að fá neikvæða int.
>> Og ég er að fá skilagildi.
Ég ætla að geyma það á vinstri hönd á línu 8 í breytu sem heitir i.
OK, en bíddu, hvernig var að fá þessi gildi?
Leyfðu mér að líta á virkni í línu 12.
>> Í línu 12, höfum við fengið neikvæð int.
Ekki taka neinar inntak, kemur aftur int, OK.
Ég lýsi á línu 14 breytu n.
Það er að fara að geyma heiltölu.
Það er það sem ég vil.
>> Svo gera eftirfarandi þegar n is-- láta mig losa það sem festa sem ég þegar gert.
Svo á meðan n er stærra en 0, prenta út n er, OK.
Og þá kalla fá INT geymd í n.
Og þá stöðva ef n er 0, n er not-- það er það.
Svo aftur, þú ert ekki þarf í raun önd.
En bara að ganga sjálfur í gegnum númerið þitt sem vitsmunalegum æfingu
verður oft að hjálpa þér gera sér grein fyrir hvað er að gerast,
öfugt við bara að gera eitthvað svona, glápa á skjáinn,
og ekki að tala þig í gegnum það, sem heiðarlega er ekki
nærri eins áhrifarík tækni.
Svo þar hafið þið það, a Fjöldi mismunandi aðferðum
fyrir raunverulega kembiforrit númerið þitt og átölulaust, sem öll
ætti að vera verkfæri í Toolkit þannig að þú ert ekki of seint á kvöldin,
sérstaklega, þú ert í borðstofu sölum, eða á skrifstofutíma,
lemja hausnum gegn vegg, að reyna að leysa nokkur vandamál.
Gera sér grein fyrir að það eru hugbúnaður verkfæraskúr.
Það eru gúmmí önd verkfæri.
Og það er allt starfsfólk styðja bíða eftir að lána a hönd.
>> Svo nú, orð á vandamálinu setur, og á hvað við erum að vonast þig
fá út úr þeim, og hvernig við förum um mat.
Per kennsluáætlun námskeiðsins er, CS50 er vandamál setur
eru metin á fjórum aðal ása, svo að speak-- umfang, nákvæmni, hönnun,
og stíl.
Og umfang átt bara að hversu mikið verksins hefur þú bitinn af?
Hversu mikið vandamál hefur þú reynt?
Á hvaða stigi átaki hefur þú fram?
>> Nákvæmni er, er forritið vinna eins það er ætlast til að hvert CS50 forskrift
þegar þú gefur ákveðnar inntak eða tilteknar afurðir koma aftur?
Hönnun er mest huglægt þeirra.
Og það er eitt sem verður lengst að læra
og lengsta að kenna, í svo miklu leyti sem það snýst um að,
hversu vel skrifað er númerið þitt?
>> Það er eitt að prenta bara rétt framleiðsla eða skila rétt gildi.
En ert þú að gera það sem skilvirkan hátt og mögulegt er?
Ert þú að gera það skipta og sigra, eða tvöfaldur
leita eins og við munum fljótlega sjá að við gerðum tvær vikur síðan við símaskránni?
Eru betri leiðir til að leysa Vandamálið en þú ert nú hér?
Það er tækifæri fyrir betri hönnun.
>> Og þá style-- hvernig laglegur er númerið þitt?
Þú munt taka eftir því að ég er nokkuð Einkum um indenting númerið mitt,
og gættu breytur mínum eru nokkuð heitir. n,
en stutt er gott nafn fyrir a númer i fyrir talningu heiltölu,
s fyrir streng.
Og við getum haft lengur breyta nöfnum stíl.
Stíllinn er bara hversu góður er númerið þitt útlit?
Og hvernig læsileg er það?
>> Og með tímanum, hvað tas þín og TFS mun gera í námskeiðinu
er að veita þér með það konar eigindlegum endurgjöf
þannig að þú færð betri á þeim ýmsa þætti.
Og hvað varðar það hvernig við mat á sérhverju þessara ása,
það er yfirleitt með mjög fáir fötunum svo að þú, almennt,
fá tilfinningu fyrir hversu vel þú ert að gera.
Og reyndar, ef þú færð einkunn á eitthvað af þeim axes-- réttmæti, hönnun
og stíl especially-- að tala mun almennt vera á milli 1 og 5.
Og, bókstaflega, ef þú ert að fá 3 er í upphafi misseris,
þetta er mjög gott.
Það þýðir að það er enn pláss fyrir framför,
sem þú myndi vona að í taka Class fyrir í fyrsta skipti.
Það er vonandi einhver hluti af loft sem þú ert að aspirín að ná.
Og svo að fá 3 er á elstu stykki,
ef ekki einhver 2 og 4 er, er reyndar gott.
Það er vel innan marka, vel innan væntingum.
>> Og ef hugur þinn er kappakstur, bíddu mínútu, þrír af fimm.
Það er í raun 6 af 10.
Það er 60%.
Guð minn, það er F.
>> Það er ekki.
Það er ekki, í raun, að.
Frekar, það er tækifæri til að bæta á meðan á önn.
Og ef þú ert að fá einhver Poors, þetta eru tækifæri
að nýta skrifstofutíma, vissulega köflum og aðrar auðlindir.
>> Best er tækifæri, í raun, að vera stolt af hversu langt þú hefur
koma á meðan á önn.
Svo veist, ef ekkert annað, þrjú er gott.
Og það gerir pláss fyrir vöxt með tímanum.
>> Eins og til hvernig þessir ása eru vegin raunhæft að þú ert
að fara að eyða mestum tíma þínum að fá hlutir til vinnu, hvað þá á réttan hátt.
Og svo rétttrúnaður hefur tilhneigingu til að vega mest, eins og með
þetta Margfaldandi þáttur af þremur.
Hönnun er einnig mikilvægt, en eitthvað sem þú ert ekki endilega
eyða öllum þeim tíma á reyna að fá hlutina bara til að vinna.
>> Og svo það er vegið svolítið meira létt.
Og þá stíll er vegin minnst.
Jafnvel þó að það er ekkert minna Mikilvægt grundvallaratriðum,
það er bara, ef til vill, auðveldast að gera rétt,
Líkt dæmi sem við gera í fyrirlestri og kafla,
með það fallega aum, og sagði,
og svo framvegis er meðal auðveldasta hlutir til að gera og fá rétt.
Svo sem slík, átta að þeir eru stig
sem eru tiltölulega auðvelt að skilja.
>> Og nú orð á this-- fræðileg heiðarleika.
Svo á að sjálfsögðu er kennsluáætlun, þú munt sjá
að sjálfsögðu hefur alveg hluti af tungumáli kringum þetta.
Og auðvitað tekur útgáfu fræðilegum heiðarleika alveg alvarlega.
>> Við höfum greinarmun, fyrir betri eða verri,
af því að hafa sent á hverju ári meira nemendur fyrir viðurlögum
en flestir allir aðrir Auðvitað, sem ég er meðvituð um.
Þetta er ekki endilega til marks um þá staðreynd
sem CS nemendur, eða CS50 nemendur, eru allir minna heiðarlegur en bekkjarfélögum þínum.
En raunin að í þessu heimur, með rafrænum hætti, við bara
hafa tæknilega þýðir að skynja þetta.
>> Það er mikilvægt fyrir okkur að sanngirni yfir bekknum
að við gerum uppgötva þetta, og hækka málið þegar við sjáum hlutina.
Og bara til að mála mynd, og í raun til að hjálpa eitthvað eins og þetta vaskur í,
þetta eru tölur um nemendur á undanförnum 10 árum
sem hafa tekið þátt í sumum slík mál akademískra heiðarleika,
með nokkrum 32 nemendum frá falli 2015, sem
er að segja að við tökum málið mjög alvarlega.
Og, að lokum, semja þessar tölur, The nýlega, um 3%, 4% eða svo
í bekknum.
>> Svo fyrir frábær meirihluta nemenda það virðist sem línurnar eru skýrar.
En ekki halda þessu í huga, sérstaklega seint
á kvöldin þegar í erfiðleikum með sumir lausn á Heimadæmi,
að það eru leiðir til að fá þig betur
Stuðningur en þú gætir hugsa, jafnvel á þeim tíma.
Grein fyrir því að þegar við fáum tillögur nemenda, yfir við
bera allar innsendingar á þessu ári gegn hverjum uppgjöf síðasta ári,
gegn hverjum uppgjöf frá 2007, og síðan að horfa á, eins og heilbrigður,
númer geymslunum á netinu, Umræðuhópar, starf staður.
Og við nefna þetta, í raun, allir fyrir sakir
á fulla birtingu, að ef einhver annar getur fundið það á netinu,
vissulega, svo við getum að sjálfsögðu.
En, í raun, andi af sjálfsögðu snýst um
að þessu ákvæði í kennsluáætlun.
Það er í raun bara, að vera sanngjarn.
>> Og ef við þurftum að útfæra á að með bara smá meira máli,
átta sig á að kjarninn allur vinnu sem þú sendir til þessu námskeiði
verður þitt eigið.
En innan að, það eru vissulega tækifæri og hvatningu,
og uppeldislegt gildi í að snúa við others-- mig, sem TFS, CAS,
TAS, og aðrir í bekknum, fyrir stuðning, hvað þá vini
og herbergisfélaga sem hafa rannsakað CS og forritun áður.
Og svo er það vasapeninga fyrir það.
Og Almenna þumalputtaregla er this-- þegar að biðja um hjálp,
þú gætir sýnt númerið þitt til annarra, en þú getur ekki skoðað þeirra.
Svo jafnvel ef þú ert á skrifstofutíma, eða í D sal, eða annars staðar
vinna á einhverjum stykki sett, vinna við hlið vinar, sem
er algerlega fínt, á lok dags vinnu þína
ætti að lokum að tilheyra hver ykkar í sömu röð, og ekki
vera einhvers samstarf átak, nema fyrir síðasta verkefni þar
það er leyft og hvatt.
>> Gera sér grein fyrir að ef þú ert erfiðleikum með eitthvað
og vinur þinn bara gerist að vera betri í þessu þá,
eða betri á þeim vanda en þú, eða lítið lengra fram í tímann en þú,
það er algerlega eðlilegt að snúa til vinar og segja, hey,
þú huga að horfa á númerið mitt hér, hjálpa mér að koma auga hvað málið mitt er?
Og vonandi í áhugi uppeldislegt gildi
að vinur er ekki bara segja, ó, gera þetta, heldur
hvað ert þú sem vantar á línu 6 eða eitthvað svoleiðis?
En lausnin er ekki fyrir vin hliðina á þér
að segja, ó, jæja, hér, lát mig draga þetta upp, og sýna lausn mína til þín.
Svo er að línan.
Þú sýna kóðann þinn til aðrir, en þú getur ekki
sjá putta, með fyrirvara um önnur skorður í kennsluáætlun námskeiðsins er.
>> Svo ekki hafa í huga að þetta svokölluð eftirsjá ákvæði
í námsskrá Auðvitað er eins vel, að ef þú fremja einhverja athöfn sem
er ekki sanngjarnt, en koma með það til athygli höfuð Námskeiðið er
innan 72 klukkustunda, að sjálfsögðu er heimilt að setja staðbundnar viðurlög sem
geta falið í sér á almennum markaði ófullnægjandi eða falleinkunn fyrir vinnu lögð.
En að sjálfsögðu mun ekki vísa á máli til frekari viðurlögum,
nema í þeim tilvikum endurteknum athöfnum.
Með öðrum orðum, ef þú gera sumir heimskur, sérstaklega seint á kvöldin, ákvörðun
að næsta morgun eða tvo daga síðar, þú vaknar og átta,
hvað var ég að hugsa?
Þú gerir í CS50 hafa innstungu til að ákveða þessi vandamál
og eiga upp að henni, svo að við mun hitta þig á miðri leið og takast
með það í málinu sem er bæði mennta og dýrmætur fyrir þig,
en samt sætt á einhvern hátt.
Og nú, til að taka á brún burt, þetta.
>> [Vídeó spilun]
>> [TÓNLIST]
>> [END spilun]
DAVID J. Malan: Allt í lagi, við erum aftur.
Og nú erum við að líta á einn af the fyrst af okkar lénum raunveruleikanum
í CS50, the list af dulmál, listin að senda og taka á móti
leynileg skilaboð dulkóðuð skilaboð ef þú vilt,
sem er aðeins hægt að deciphered ef þú ert sumir lykill innihaldsefni sem sendandi hefur
einnig.
Svo til að hvetja þetta munum við taka a líta á þetta hlutur hér,
sem er dæmi um a leyndarmál tengd hringur sem
er hægt að nota til þess að reikna út hvað leynileg skilaboð í raun er.
Í raun aftur í Dagur í grunnskóla,
ef þú alltaf sent leyndarmál skilaboð til sumir vinur eða einhver skotin í bekknum,
þú gætir hafa hugsun þú varst að snjall
af þann stykki þinn pappír breytast, eins, A til B, og B til C, og C til D,
og svo framvegis.
En þú varst í raun að dulkóða upplýsingarnar, jafnvel
ef það var lítið léttvæg, var ekki að erfitt fyrir kennara að gera sér grein fyrir,
vel, ef þú skiptir bara B að A og C til B,
þú reikna í raun út hvað var boðskapurinn,
en þú varst í ciphering upplýsingar.
>> Þú varst bara að gera það einfaldlega, líkt Ralphie hér
í frægri bíómynd sem spilar ansi mikið auglýsingu nauseum hver vetur.
[Vídeó spilun]
-Farðu Það vitað að allt sem Ralph Parker er hér
skipaður meðlimur Little Orphan Annie Secret Circle
og er rétt að öllum láði og bætur koma við hana.
>> -Signed, Little Orphan Annie, gegn undirritaður Pierre Andre, í bleki.
Heiður og hlunnindi, þegar á aldrinum níu.
>> [Hróp]
-Láttu ekki svona.
Við skulum fá á við það.
Ég þarf ekki allt sem djass um smyglara og sjóræningja.
>> -Listen Morgun fyrir heimasíðunni niðurstöður ævintýri
af svörtu sjóræningjaskipi.
Nú er kominn tími til leyndarmál skilaboð Annie
fyrir þér meðlimir Secret Circle.
Mundu, börnin, aðeins meðlimir Annie Secret Circle
geta lesa leyndarmál skilaboð Annie.
>> Mundu, Annie er eftir þér.
Setja pinna til B2.
Hér eru skilaboðin.
12, 11--
>> -Ég Er í, fyrsta leyndarmál fundi mínum.
>> -14, 11, 18, 16.
>> Pierre var í mikilli rödd kvöld.
Ég gæti sagt að í kvöld er Skilaboðin var mjög mikilvægt.
>> -3, 25, sem er skilaboð frá Annie sjálf.
Mundu, ekki segja neinum.
>> -90 Sekúndum síðar er ég í eina herbergi í húsinu þar sem drengurinn níu
gæti setið í næði og lesa.
Aha, B!
Ég fór á næsta, E.
>> Fyrsta orðið er að vera.
S, það var að koma auðveldara núna, U, 25--
>> -OH, Koma á, Ralphie, ég verð að fara!
>> -Ég Vera rétt niður, Ma!
Gee Whiz!
>> -T, O, vera viss to-- vera viss um að hvað?
Hvað var Little Orphan Annie reyna að segja?
Vertu viss um að hvað?
>> -Ralphie, Andy hefur fengið að fara, verður þú vinsamlegast koma út?
>> -Allt Í lagi, Ma!
Ég kem strax út!
>> -Ég Var að fá nær nú.
Spennan var hræðilegur.
Hvað var það?
Örlög jörðinni getur hanga í jafnvægi.
>> -Ralphie!
gotta Andy fara!
>> -Ég Vera rétt út fyrir að gráta upphátt!
>> -Almost Það, fingur mína flaug, huga minn var stál gildru, hvert svitahola titrað.
Það var næstum ljóst, já, já, já.
>> -Farðu Viss um að drekka ovaltine þína.
Ovaltine?
A crummy auglýsing?
Helvítið.
[END spilun]
DAVID J. Malan: Allt í lagi, svo sem var mjög langt
þess að kynna dulmál, og einnig ovaltine.
Í raun, frá þessu gamla auglýsingu hér, hvers vegna er ovaltine svo gott?
Það er samþjappað útdráttur af þroskaður bygg malt, mjólk hreint Rjómalöguð kúm,
og sérstaklega unnin kakó, saman með náttúrulegum fosfatíðum og vítamínum.
Það er frekar styrktur með Til viðbótar vítamín B og D, Yum.
Og enn er hægt að fá það, greinilega, á Amazon, eins og við gerðum hér.
>> En hvatning hér var að kynna dulmál, sérstaklega
gerð dulmál þekkt sem leyndarmál lykill dulmál.
Og eins og nafnið gefur til kynna, allt öryggi leynilykli Crypto kerfi,
ef þú vilt, aðferðafræði fyrir bara spæna
Upplýsingar á milli tveggja manna, er að Aðeins sendandinn og aðeins móttakandi
veit leyndarmál key-- nokkur gildi, sumir Leyndarmálið setning, sumir leyndarmál númer, sem
gerir þeim kleift að bæði dulkóða og afkóðað upplýsingar.
Og dulmál, í raun, er bara þetta frá viku 0.
>> Það er vandamál þar sem það er inntak, eins raunverulegt skilaboð á ensku
eða hvað tungumál sem þú langar að senda til einhvers í bekknum,
eða yfir netið.
Það er einhver framleiðsla, sem er að fara að vera spæna skilaboð sem þér
langar viðtakandi að fá.
Og jafnvel ef einhver í miðja fær það líka,
þú vilt ekki þá að endilega að vera fær um að hallmæla henni,
vegna inni þessa svartur kassi, eða reiknirit,
er einhver vélbúnaður, sumir skref fyrir skref leiðbeiningar, til að taka að inntak
og umbreyta það inn í framleiðsla, í vonandi öruggan hátt.
>> Og í raun, það er einhver orðaforða í þessum heimi eins og hér segir.
Plain texti er orðið a tölva vísindamaður myndi
nota til að lýsa inntak skilaboð, eins og ensku
eða hvað tungumál þig í raun og veru langar að senda einhverjum öðrum mönnum.
Og þá er ciphertext að Scramble til enciphered, eða dulkóðuð,
útgáfa hennar.
>> En það er eitt annað efni hér.
Það er eitt annað inntak til leyndarmál lykill dulmál.
Og það er lykillinn sjálft, sem er, yfirleitt,
eins og við munum sjá, númer, eða bréf, eða orð, hvað
reiknirit það er í raun ætlast.
>> Og hvernig heldur þú að hallmæla information?
Hvernig heldur þú að unscramble það?
Jæja, þú snúa bara framleiðsla og inntak.
>> Með öðrum orðum, þegar einhver fær dulkóðuð skilaboðin þín,
hann eða hún hefur einfaldlega að vita að sama takka.
Þeir hafa fengið ciphertext.
Og með því að tengja þá tvo stærðirnar í dulritunarstjórneiningunni kerfi,
reiknirit, þetta svartur kassi, út að koma upprunalega kæra.
Og svo er það mjög mikil mynd af því sem dulmál er í raun
allt um.
>> Þannig að við skulum fá það.
Við skulum nú líta undir hetta eitthvað
við höfum verið að taka sem sjálfsögðum hlut að síðustu viku, og fyrir þetta fundur
here-- band.
A band í lok dags er bara röð af stöfum.
>> Það gæti verið halló heimur, eða halló Zamyla eða hvað sem er.
En hvað þýðir það að vera röð af stöfum?
Í staðreynd, the CS50 bókasafn gefur okkur a gögn tegund sem kallast band.
>> En það er í raun engin svo sem hlutur eins og a band í C.
Það er í raun bara röð af eðli, eðli, eðli,
eðli, aftur, til baka, til aftur, til baka, til baka innan
af minni tölvunnar, eða RAM.
Og við munum líta dýpra inn í það í Framtíð þegar við lítum á minni sjálft,
og nýtingu, og ógnir sem taka þátt.
>> En við skulum íhuga band Zamyla.
Svo bara nafn manna hér, Zamyla,
það er runa af stafi, Z-A-M-Y-L-A.
Og nú skulum gera ráð fyrir að nafn Zamyla er er geymt inni í tölvu
program.
>> Jæja, það stendur til ástæðu að við ættum vera fær um að líta á þá stafi
fyrir sig.
Þannig að ég ætla bara að fara að teikna smá kassi í kringum nafni Zamyla hér.
Og það er raunin í C að þegar þér hafa a band, eins Zamyla-- og kannski
að strengur er kominn aftur frá fall eins fá band,
þú getur raunverulega vinna það eðli með staf.
>> Nú er þetta germane fyrir samtal á hönd, vegna þess að
í dulmál ef þú vilt breyta A til B, og B til C, og C til D,
og svo framvegis, þú þarft að vera fær um að líta á einstökum persónum
í streng.
Þú þarft að vera fær um að breyta Z til eitthvað annað, A
eitthvað annað, M til eitthvað annað, og svo framvegis.
Og svo þurfum við leið, kerfisbundið, svo
að tala, í C til að vera fær um að breyta og líta á einstökum bréfum.
Og við getum gert þetta eins og hér segir.
>> Leyfðu mér að fara höfuð aftur í CS50 IDE.
Og láta mig fara á undan og búa til nýja skrá
að ég kalla þetta skipti string0, eins og fyrsta slíka dæminu okkar, punktur c.
Og ég ætla að fara á undan og svipa það upp eins og hér segir.
>> Svo eru CS50.h, og þá eru stöðluð io.h,
sem ég er næstum alltaf að fara að vera með í áætlunum mínum, að minnsta kosti
í upphafi.
int helstu ógild, og þá hér er ég að fara að gera strengi fær fá band.
Og þá er ég að fara að fara á undan og gera þetta.
Ég vil fara á undan og, eins og andleg heilbrigði stöðva,
bara segja, halló, prósent s, hálf-hreinsun, gerir streng 0.
Obbosí, hvað gerði ég hér?
Ó, ég vissi ekki stinga því inn.
Svo kennslustund lærður, sem var ekki viljandi.
>> Svo villa, meira prósent viðskipti en gögn rök.
Og þetta er þar, í lína 7-- lagi, þannig að ég hef,
vitna unquote, það er band mitt til printf.
Ég hef fengið prósent skilti.
En ég vantar annað rök.
>> Ég vantar kommum S, sem Ég vissi hef í fyrri dæmum.
Svo gott tækifæri til að festa einn mistök, óvart.
Og nú langar mig að hlaupa string0, tegund í Zamyla.
OK, halló Zamyla.
>> Þannig að við höfum keyrt þessa tegund af program nokkrar mismunandi sinnum núna.
En við skulum gera eitthvað svolítið öðruvísi í þetta sinn.
Í stað þess bara prentun Zamyla er heild nafn út með printf,
við skulum gera það staf eftir staf.
>> Ég ætla að nota fyrir lykkju.
Og ég ætla að gefa mér a telja breytu, kallaði ég.
Og ég ætla að halda iterating, svo lengi sem I er minni en lengd s.
>> Það kemur í ljós, við gerðum ekki gera þetta síðasta sinn,
sem c kemur með virka kallast Stirling.
Til baka í dag, og almennt enn þegar framkvæmd aðgerðir,
menn vilja oft velja mjög gagnorðar nöfn sem eins konar hljóð
eins og það sem þú vilt, jafnvel þó að það er vantar nokkra sérhljóða eða bréf.
Svo er Stirling í Heiti fall sem
tekur rifrildi milli svigum sem ætti að vera strengur.
Og það skilar bara heiltölu, lengd strengsins.
>> Svo þetta fyrir lykkju á línu 7 er að fara að byrja að telja á ég jafngildir 0.
Það er að fara að hækka Ég á hverri ítrun
um 1, eins og við höfum verið að gera nokkrum sinnum.
En það er að fara að bara þetta upp þar til þeim punkti
þegar ég er lengd af the band sig.
>> Þannig að þetta er leið, að lokum, iterating yfir stafi
í band sem er eftirfarandi.
Ég ætla að prenta út ekki Öllum strengnum, en prósent c,
einn staf fylgt eftir með nýja línu.
Og þá er ég að fara að fara á undan, og ég þarf
að segja að ég vil prenta ith eðli s.
>> Svo ef ég er breytan sem gefur til kynna Vísitala band, þar sem
þú ert í það, ég þarf að vera fær um að segja, gefa mér ith eðli s.
Og c hefur leið til að gera þetta með hornklofa.
Þú segir einfaldlega nafnið á band, sem í þessu tilfelli er s.
Síðan sem þú notar hornklofa, sem eru yfirleitt rétt fyrir ofan aftur eða inn
lykill á lyklaborðinu.
Og þá setja vísitölu karakter sem þú vilt prenta.
Svo vísitalan er að fara til vera a number-- 0, eða 1, eða 2, eða 3, eða punktur,
punktur, punktur, einhver önnur tala.
>> Og við að tryggja að það er að fara að vera rétt númer, því ég
byrja að telja á 0.
Og sjálfgefið, fyrsta staf í streng er með venju 0.
Og annað eðli er krappi 1.
Og þriðja persónan er krappi 2.
Og þú vilt ekki að fara of langt, en við munum ekki vegna þess að við erum
að fara að aðeins hækka i þar til það jafngildir lengd strengsins.
Og á hver benda, þetta fyrir lykkju vilja stöðva.
>> Svo láta mig fara á undan og vista þetta program, og hlaupa gera band 0.
En ég ruglaður upp.
Óbeint lýsa bókasafn virka Stirling með gerð slíks og such-- nú,
þetta hljómar kunnuglega.
En það er ekki printf.
Og það er ekki að fá band.
>> Ég vissi ekki að skrúfa upp í á sama hátt í þetta sinn.
En eftir hérna smá niður frekar, ma í haus string.h,
sérstaklega veita yfirlýsing um Stirling.
Svo er það í raun vísbending þar.
>> Og reyndar kemur í ljós það er annað haus skrá
sem við höfum ekki notað í bekknum enn, en það er
meðal þeirra boði til þín, sem heitir string.h.
Og í þeirri skrá, string.h er Stirling lýst.
Svo láta mig fara á undan og vista þetta, gera streng
0-- gott, engin villuskilaboð þetta sinn.
>> ./string0 Zamyla, og Ég er að fara að ýta á Enter,
á hver benda GetString er að fara að skila band, setja það í s.
Þá for lykkju er að fara að árétta yfir stafi S er einn í einu,
og prenta þá einn í hverja línu, vegna þess að Ég hafði að sviga n í lokin.
Svo ég gæti sleppt því sviga n, og þá bara prenta Zamyla allt
í sömu línu, í raun reimplementing
printf, sem er ekki allt sem að gagni.
En í þessu tilfelli, hef ég ekki gert það.
Ég hef reyndar prentað eitt eðli í einu, eitt í hverja línu,
þannig að við sjáum raunverulega áhrif.
>> En ég ætti að hafa í huga eitt hér.
Og við munum koma aftur til þetta í framtíðinni viku.
Það kemur í ljós að þetta númerið er hugsanlega þrjótur.
>> Það kemur í ljós að fá band og nokkrar aðrar aðgerðir í lífinu
ekki endilega alltaf skila hvað þú ert að búast við.
Við vitum af bekknum síðasta tími í þessu að fá
band er ætlað að skila streng.
En hvað ef notandinn slær út eins langur orð, eða málsgrein, eða ritgerð
að það er bara ekki nóg minni í tölvunni til að passa það.
>> Eins og, hvað ef eitthvað fer rangt undir hetta?
Það gæti ekki gerst oft, en það gæti gerst einu sinni
í smá stund, mjög sjaldan.
Og svo kemur í ljós að fá band og virka like it ekki endilega
alltaf aftur strengi.
Þeir gætu aftur smá villa gildi, sumir Sentinel gildi svo að segja,
það gefur til kynna að eitthvað hefur farið úrskeiðis.
Og þú myndir bara vita þetta frá hafa lært það í bekknum núna,
eða hafa lesið nokkrar fleiri skjöl.
Það kemur í ljós að fá band getur aftur á gildi kallast null.
Null er sérstakt gildi sem við munum koma aftur til í framtíðinni viku.
En nú, bara veit að ef ég vil að vera virkilega rétt á áfram
með fá band, ég ætti ekki bara að kalla það,
og blindni nota aftur gildi þess, treysta því að það er band.
>> Ég ætti fyrst að segja, hey, bíddu í eina mínútu, aðeins
áfram ef s er ekki jafn null, þar null, aftur,
er bara sérstakt gildi.
Og það er eina sérstakt gildi að þurfa að hafa áhyggjur af að fá band.
Fá band er annað hvort að fara að skila streng eða null.
>> Og þetta upphrópunarmerki samasemmerkinu þú might vita af kannski stærðfræði bekknum
að þú gætir draga jafnaðarmerki með línu í gegnum það til að sýna ekki jöfn.
Það er ekki almennt eðli þú getur slegið á lyklaborðinu þínu.
Og svo í flestum forritunarmál, þegar þú vilt segja ekki jafnir,
þú notar upphrópunarmerki, annars þekkt sem Bang.
Svo segir þú Bang jafnt sem þýðir ekki jafngildir, rökrétt.
Það er bara eins og það er ekki meiri en, eða jöfn eða minni en
eða jafnt takkann á lyklaborðinu þínu sem gerir það allt í eitt tákn.
Svo er það hvers vegna, í fortíð dæmum, þú gerðir opinn krappi, og þá
jafnaðarmerki, í því skyni að gera stærra en eða segja, minna en.
>> Svo er það takeaway hér?
Þetta er einfaldlega leið nú af kynna þessa setningafræði, þessi eiginleiki,
iterating yfir einstaklingur stafir í streng.
Og rétt eins og þeim torginu sviga leyfa þér að fá á þá,
að taka tillit til hornklofa sem konar vísbending um þetta undirliggjandi
hönnun, þar sem hvert eðli inni streng
er eins konar Hnefaleikar í somewhere undir hetta í minni tölvunnar.
>> En við skulum gera afbrigði af þessu.
Það kemur í ljós að þetta Forritið er rétt.
Svo á ásum CS50 er að meta kóða, þetta er rétt núna.
Sérstaklega núna þegar ég er að skoða fyrir null, þetta forrit ætti aldrei hrun.
Og ég veit bara að af reynslu.
En það er ekkert annað sem við getum raunverulega farið úrskeiðis hér.
En það er ekki mjög vel hönnuð, vegna þess að við skulum fara aftur til grunnatriði.
>> First, principles-- hvað þýðir a for lykkju gera?
A fyrir lykkju gerir þrennt.
Það initializes sumir gildi, ef þú spyrð hana að.
Það fer ástand.
Og þá eftir hverja endurtekning, eftir hverja lotu,
það hækkar sumir gildi, eða gildi, hér.
>> Svo hvað þýðir það?
Við frumstilla ég til 0.
Við að athuga og ganga úr skugga um að ég er minna en lengd s, sem er Z-A-M-Y-L-A,
svo sem er minna en 6.
Og reyndar 0 sem minna en 6.
>> Við prenta út Z úr nafni Zamyla er.
Þá erum við hækka ég frá 0 til 1.
Við athugum þá, er 1 minna en hæðin á s?
Lengd s er 6.
Já það er.
>> Þannig að við að prenta á nafni Zamyla er, ZA.
Við hækka i frá 0, til 1, 2.
Við athugum þá, er 2 minni en lengd nafni Zamyla er.
6- svo 2 er minna en 6.
Já, við skulum prenta út núna M í Nafn Zamyla er, þriðja persóna.
>> Lykillinn hér er að á hverju endurtekning sögunnar, ég stöðva,
er eg síður en lengd Zamyla?
En aflinn er að Stirling er ekki eign.
Þau ykkar sem hafa forritað áður í Java eða öðrum tungumálum
gæti vita lengd af a band er eign, bara nokkrar lesa aðeins gildi.
>> Í C í þessu tilfelli, ef það er fall sem er bókstaflega
telja fjölda stafir í Zamyla hvert skipti
við köllum að virka.
Í hvert skipti sem þú spyrð tölvuna til að nota Stirling, það tekur a líta á Zamyla,
og sögðu Z-A-M-Y-L-A, 6.
Og það skilar 6.
Í næsta skipti sem þú hringja það inni að fyrir lykkju,
það er að fara að horfa á Zamyla aftur, segja Z-A-M-Y-L-a, 6.
Og það er að fara að skila 6.
Svo er það heimskulegt um þessa hönnun?
>> Hvers vegna er númerið mitt ekki 5 af 5 fyrir hönnun núna, svo að segja?
Jæja, ég ætla að spyrja spurning óþörfu.
Ég ætla að gera meiri vinnu en ég þarf að.
>> Svo jafnvel þótt svarið er rétt, ég er
spyrja tölvuna, hvað er lengd Zamyla aftur,
og aftur, og aftur, og aftur?
Og það svar er aldrei að fara að breytast.
Það er alltaf að fara að vera 6.
>> Svo betri lausn en þetta væri þetta næsta útgáfa.
Leyfðu mér að fara á undan og setja það í Sérstakur skrá sem heitir string1.c,
bara að halda það aðskilið.
Og það kemur í ljós í a lykkja, þú getur raunverulega
lýsa margar breytur í einu.
>> Þannig að ég ætla að halda i og setja það á 0.
En ég ætla líka að fara að bæta við kommu, og segja,
gefa mér breytu sem heitir n, sem gildi er strenginn lengd s.
Og nú skaltu gera ástand mitt svo lengi sem I er minni en n.
>> Svo á þennan hátt, rökfræði er eins í lok dags.
En ég muna að gildi 6, í þessu tilfelli.
Hver er lengd nafni Zamyla er?
Og ég ætla að setja það á n.
>> Og ég er enn að stöðva ástand í hvert skipti.
Er 0 minna en 6?
Er 1 minna en 6?
Er 2 minna en 6, og svo framvegis?
>> En ég ætla ekki að biðja tölvuna aftur, og aftur, hvað er
lengd nafni Zamyla er?
Hvað er lengd nafni Zamyla er?
Hvað er lengd nafni þessa Zamyla er?
Ég er bókstaflega að huga að fyrst og aðeins svara í þessum seinni breytilegum n.
Svo þetta núna væri ekki eingöngu rétt, en einnig vel hönnuð.
>> Nú, hvað um stíl?
Ég hef nefnt breytur mína nokkuð vel, myndi ég segja.
Þeir eru frábær gagnorðar núna.
Og það er algerlega fínt.
>> Ef þú hefur aðeins einn band í forriti,
þú might eins og heilbrigður kalla það er fyrir streng.
Ef þú hefur aðeins eina breytu að telja í forriti,
þú might eins vel kalla það ég.
Ef þú ert með lengd, n er frábær algengt eins og heilbrigður.
En ég hef ekki tjáð einhverju númerið mitt.
>> Ég hef ekki tilkynnt reader-- hvort sem er TF mín, eða TA,
eða bara colleague-- hvað er ætlast að fara á í þessari áætlun.
Og svo til að fá gott stíl, það sem ég myndi vilja gera
er this-- eitthvað eins spyrja notandann um inntak.
Og ég gæti umrita þetta allir tala af lifnaðarhættir.
>> Gakktu úr skugga um s-- tryggja fá band skilaði streng.
Og þá í here-- og þetta er kannski mikilvægasta comment-- kunnugt
yfir stafina í s einn í einu.
Og ég gæti notað eitthvað Val á ensku
hér að lýsið þessara klumpur af kóða.
>> Takið eftir að ég hef ekki sett upp tjá sig um hverja línu af kóða,
í raun bara á áhugavert sjálfur, þær sem
hafa einhverja merkingu, sem ég gæti langar að gera frábær ljóst að einhver
lesa númerið mitt.
Og hvers vegna ertu að hringja færð band biðja notandann um inntak?
Jafnvel að maður er ekki endilega allt sem lýsandi.
En það hjálpar að segja sögu, vegna þess að annarri línu í sögunni er, ganga úr skugga um
fá band skilaði streng.
>> Og í þriðja línan í sögunni er, iterate yfir stafi í s einn
í einu.
Og nú bara gott mál, Ég ætla að fara á undan og bæta við
eitt athugasemd sem bara segir prenta i-ta eðli í s.
Nú, hvað hefi ég gjört í lok dags?
>> Ég hef bætt við nokkrum English orð í formi athugasemda.
The slash slash tákn merkir, hey, tölva þetta er fyrir mönnum,
ekki fyrir þig, the tölva.
Svo þeir eru hunsuð rökrétt.
Þeir eru bara þarna.
>> Og reyndar CS50 IDE sýnir þá sem grár, eins og að vera gagnlegt, en ekki lykill
til áætlunarinnar.
Eftir hvað þú getur nú gert.
Hvort sem þú veist C forritun eða ekki, þú
getur bara staðið bak við þetta program, og Lögð athugasemdir.
Spyrja notanda fyrir hjálpina, ganga úr skugga um fá band skilaði band,
iterate yfir stafi í s einn í einu, prenta staf
i-ta persóna í s-- þú ekki einu sinni að líta á kóðann
að skilja hvað þetta forrit gerir.
Og enn betra, ef þú sjálfur lítur á þessari áætlun í viku eða tvær,
eða mánuð eða ár, þú líka þarft ekki
að stara á kóða, að reyna að muna,
hvað var ég að reyna að gera með þennan kóða?
>> Þú hefur sagt sjálfur.
Þú hefur lýst því fyrir sjálfan þig, eða einhver vinnufélagi eða TA, TF.
Og svo þetta myndi nú vera rétt, og góð hönnun,
og að lokum góður stíll eins og heilbrigður.
Svo gera hafa það í huga.
>> Svo er það eitt annað sem ég ætla að gera hér
sem getur nú sýna nákvæmlega hvað er fara á undir hetta.
Svo er það þessi eiginleiki í C, og öðrum tungumálum,
heitir Typecasting sem annaðhvort óbeint
eða beinlínis gerir þér kleift að umbreyta frá einni tegund gagna til annars.
Við höfum verið að fást svo langt í dag með strengi.
>> Og strengir eru stafir.
En muna frá viku 0, hvað eru stafir?
Stafir eru bara abstrakt ofan á Numbers aukastaf númer,
og tugabrot tölur eru í raun bara abstrakt ofan á tvöfaldur tölur,
eins og við skilgreint það.
>> Svo stafir eru tölur.
Og tölur eru stafir, bara fer eftir samhenginu.
Og það kemur í ljós að inni af tölvuforriti,
getur þú skilgreint hvernig þú vilt líta á bita inni á þeirri áætlun?
>> Muna frá viku 0 sem við höfðum Ascii, sem er bara þetta númer
kortlagning bréf til tölur.
Og við sögðum, höfuðborg A er 65.
Capital B er 66, og svo framvegis.
>> Og takið eftir, höfum við í raun Sérstafir á Efsta línan hér, eins og C myndi kalla þá,
stafi, og þá ints á annarri röð.
Og það kemur í ljós að þú getur umreiknað óaðfinnanlega milli tveggja, yfirleitt.
Og ef við viljum gera þetta vísvitandi, við
might vilja til að takast á eitthvað eins og þetta.
>> Við viljum kannski að breyta efri mál að lækka
ræða, eða lágstöfum að hástafi.
Og það kemur í ljós að það er í raun mynstur hér
við getum faðma í bara smá stund.
En við skulum líta fyrst á Dæmi um að gera þetta skýrt.
>> Ég ætla að fara aftur í CS50 IDE.
Ég ætla að búa til Skráin heitir Ascii 0.c.
Og ég ætla að fara á undan og bæta minn staðall io.h efst, int helstu ógilt
efst á virka minn.
Og þá er ég bara að fara að gera following-- fyrir lykkju frá I jafngildir,
við skulum segja, 65.
>> Og þá ég er að fara að vera minna en 65, auk 26 stafir í stafrófinu.
Svo ég læt tölvuna gera stærðfræði fyrir mig þar.
Og þá inni þessa lykkju, hvað er ég að fara að prenta?
>> % C er% i sviga n.
Og nú vil ég að stinga í tveimur gildum.
Ég hef tímabundið sett spurningu markar það að bjóða spurninguna.
>> Ég vil árétta frá 65 og áfram fyrir 26 bókstöfum,
prentun á hverri ítrun sem óaðskiljanlegur jafngildir staf.
Með öðrum orðum, ég vil Iterate yfir 26 tölur prentun
hvað ASCII staf er, bréf, og hvað samsvarandi fjöldi is--
í raun bara að endurskapa töfluna frá því renna.
Svo hvað ætti þessi spurningarmerki vera?
>> Jæja, það kemur í ljós að seinni einn ætti bara að vera breytileg i.
Ég vil sjá að sem tala.
Og miðja rök Hér get ég sagt tölvuna
til að meðhöndla þessi heiltölu Ég sem persóna, svo sem
að skipta henni hér fyrir prósent C.
>> Með öðrum orðum, ef ég, manna forritari, ég veit
þetta eru bara tölur í lok dags.
Og ég veit að 65 ætti landakort að einhverju staf.
Með þessu skýr kastað, með sviga,
nafn gögn gerð sem þú vilt umbreyta til og lokað svigi,
þú getur sagt að tölva, hey, tölva,
umbreyta þessum tölu á bleikju.
>> Svo þegar ég keyra þetta program eftir að setja saman,
við skulum sjá hvað ég get-- gera ascii 0.
Fjári það, hvað gerði ég rangt hér?
Notkun óskilgreinda kennimerki, allt í lagi, ekki viljandi,
en við skulum sjá hvort við getum ekki Ástæðan gegnum þetta.
>> Svo lína five-- svo ég gerði ekki fá mjög langt áður en skrúfa upp.
Það er allt í lagi.
Svo línu 5 Ég jafngildir 65-- ég sjá.
Svo muna að í C, ólíkt sumir tungumál ef þú hefur áður forritun
reynslu, hefur þú að segja tölva,
ólíkt grunni, hvað Tegund breytu það er.
>> Og ég gleymdi a lykill setningu hér.
Í samræmi fimm, hef ég byrjaði að nota i.
En ég hef ekki sagt C hvaða gögn tegund það er.
Þannig að ég ætla að fara í hér og segja, Ah, gera það heiltala.
>> Nú ætla ég að fara á undan og laun.
Sem fastur það.
./ascii0 Enter, það er góður af kaldur.
Ekki aðeins er það frábær fljótur að spyrja tölvuna þessa spurningu,
frekar en að horfa upp á mynd, það prentað út einn í hverja línu, A er 65,
B er 66, alla leið down-- síðan ég gerði þetta 26 times-- til stafina z,
sem er 90.
Og í raun, örlítið fleiri greindur myndi
hafa verið fyrir mig að treysta á tölvunni til að bæta 26.
Ég gæti hafa bara gert 90 eins og heilbrigður, svo lengi
eins og ég ekki gera sömu mistökin tvisvar.
Ég vil fara upp í gegnum z, ekki bara upp í gegnum y.
>> Svo er það skýr kastað.
Það kemur í ljós að þetta er ekki einu sinni nauðsynlegt.
Leyfðu mér að fara á undan og endursýning þetta þýðanda, og endursýning Ascii 0.
Það kemur í ljós að C er nokkuð klár.
>> Og printf, sér í lagi, er nokkuð klár.
Ef þú fara bara upp i tvisvar fyrir bæði staðgengla, printf
verður að átta sig, ó, og ég þekki þig gaf mér integer-- sumir tala,
eins 65, eða 90, eða hvað sem er.
En ég sé að þú vilt mig til að sníða að tala eins og staf.
Og svo printf getur óbeint varpað int til char fyrir þig eins og heilbrigður.
Svo er það ekki vandamál yfirleitt.
>> En eftir því, vegna þessa jafngildi getum við í raun að gera þetta eins vel.
Leyfðu mér að fara á undan og gera einn önnur útgáfa af this-- Ascii 1.c.
Og í stað þess iterating yfir heiltölur, getur raunverulega blása þinn hugur
með iterating yfir stafi.
Ef bleikju c fær fjármagni, ég langar að fara á undan og gera þetta,
svo lengi sem C er minni en eða jafnt og að fjármagni Z. Og á hverri ítrun
Ég vil að hækka C, ég get nú í printf línu mína hér
segjum prósent C er prósent ég aftur, komma C.
>> Og nú, ég get farið í hina áttina, steypu eðli skýrt
heiltölu.
Svo aftur, hvers vegna viltu gera þetta?
Það er svolítið skrítið að raða á telja í skilmálar af stöfum.
>> En ef þú skilur hvað er fara á undir hetta,
það er í raun engin galdur.
Þú ert bara að segja, hey, tölva gefa mér breytu sem heitir C-gerð bleikju.
Frumstilla hana að höfuðborg A. And taka einn quotes málið.
>> Fyrir stafi í C, muna frá í síðustu viku, þú nota einn quotes.
Fyrir strengi, fyrir orð, setningar notarðu gæsalappa.
OK, tölvan, halda að gera þetta, svo lengi sem eðli er minna en
eða jafnt og z.
Og ég veit af Ascii mitt borð sem allir þessi ASCII kóða er samliggjandi.
>> Það er ekkert bil.
Svo það er bara í gegnum Z, aðskilin með eitt númer hvert.
Og þá get ég hækka bleikju, ef ég vil virkilega.
Í lok dags, það er bara tala.
Ég veit þetta.
Svo ég get bara gera ráð fyrir að bæta við 1 til þess.
>> Og þá í þetta sinn, sem ég prenta c, og þá óaðskiljanlegur jafngildi.
Og ég er ekki einu sinni þörf á skýr kastað.
Ég get látið printf og þess tölva Mynd hlutina út,
þannig að nú ef ég hlaupa gera Ascii1./ascii1,
Ég fæ nákvæmlega það sama eins og heilbrigður.
>> Gagnslaus program, though-- engan er að fara til raunverulega skrifa hugbúnað
í því skyni að reikna út, hvað var tala sem kort til A eða B, eða Z?
Þú ert bara að fara að google það, eða leita það upp á netinu, eða líta upp
á mynd, eða þess háttar.
Svo hvar þetta raunverulega fá gagni?
>> Jæja, talandi um það renna, eftir það er
raunveruleg mynstur hér á milli hástafi og lágstafir það var ekki tilviljun.
Takið eftir að fjármagn A er 65.
Lágstafir a er 97.
Og hversu langt í burtu er lágstöfum a?
>> Svo 65 er hversu mörg skref í burtu frá 97?
Svo 97 mínus 65 er 32.
Svo höfuðborg a er 65.
Ef þú bætir 32 við það, þú færð lágstafir a.
Og equivalently, ef þú draga 32, þú kemur til baka til höfuðborgarinnar -A- sama með B
til litla b, stór C við litla c.
>> Öll þessi bil er 32 í sundur.
Nú, þetta virðist til að leyfa okkur að gera eitthvað eins og Microsoft Word,
eða Google Docs eru, þar sem þú Hægt er að velja allt og þá segi,
breyta öllu til lágstafir eða breyta öllu til hástaf
eða breyta aðeins fyrsta orðið um setningu til hástafi.
Við getum í raun gert eitthvað svona sjálf.
>> Leyfðu mér að fara á undan og vista skrá hér kallað nýta 0.c.
Og við skulum fara á undan og svipa upp forrit sem gerir nákvæmlega það sem hér segir.
Svo eru CS50 bókasafn.
Og eru stöðluð I / O.
>> Og ég veit að þetta er að koma bráðum.
Þannig að ég ætla að setja það í það nú þegar, string.h,
svo ég hef aðgang að hlutir eins Stirling,
og þá int helstu ógilt, eins og venjulega.
Og þá ætla ég að fara á undan og gera strengi fær fá band,
bara til að fá band frá notanda.
Og þá er ég að fara að gera geðheilsan stöðva mína.
Ef strengurinn ekki jafn null, þá er það óhætt að halda áfram.
Og hvað sem ég vil gera?
Ég ætla að árétta frá ég jafngildir 0, og n upp til strengsins lengd s.
>> Og ég ætla að gera þetta svo lengi sem I er minni en n, og ég auk plús.
Svo langt, ég er í raun bara lántökur hugmyndir frá áður.
Og nú ætla ég að taka upp útibú.
>> Svo hugsa til baka að klóra, þar við höfðum þá gafflar í veginum,
og í síðustu viku í C. Ég ætla að segja þetta, ef i-ta eðli í s
er meiri en eða jafnt að lækka tilfelli,
and-- í grunni þú myndir bókstaflega segja og, en í C þú segir merkið,
ampersand-- og i-ta eðli í s er minna en eða jafnt og lækka ef Z,
við skulum gera eitthvað áhugavert.
Við skulum í raun prenta út eðli með engu NEWLINE
sem er eðli í band, i-ta staf í streng.
>> En við skulum fara á undan og draga 32 frá henni.
Annars ef eðli í band sem við erum að leita
er ekki á milli litlu a og lítið z, fara á undan
og bara prentað það út óbreytt.
Þannig að við höfum kynnt þetta flokkast rithátturinn
fyrir strengi okkar til að fá á i-ta staf í streng.
>> Ég hef bætt við nokkrum skilyrt rökfræði, eins Scratch í viku einu síðustu viku, þar sem
Ég ætla bara að nota grundvallaratriði mín skilning á því hvað er
fara á undir hetta.
Er i-ta eðli s stærra en eða jafnt og a?
Eins er það 97 eða 98, eða 99, og svo framvegis?
>> En er það einnig minna en eða jafnt og að verðmæti lágstafir z?
Og ef svo er, hvað þýðir þetta lína meina?
14, þetta er tegund af sýkill af öllu hugmynd,
nýta bréfið með einfaldlega að draga 32 frá því,
í þessu tilfelli, vegna þess að ég veit, fyrir það graf, hvernig tölur mínar eiga fulltrúa.
Svo skulum fara á undan og keyra þetta, eftir að setja saman nýta 0.c,
og hlaupa nýta 0.
>> Við skulum slá í eitthvað eins Zamyla í öllum lágstöfum inn.
Og nú höfum við Zamyla í öllum hástafi.
Við skulum slá í Rob í öllum lágstöfum.
Við skulum reyna Jason í öllum lágstöfum.
Og við höldum að fá neyddist fjármögnun.
Það er minniháttar galla sem ég konar gerði ekki ráð fyrir.
Tilkynning nýtt hvetja minn er lendi á sömu línu og nöfn þeirra,
sem finnst svolítið sóðalegur.
>> Þannig að ég ætla að fara hér, og reyndar í lok þessarar áætlunar
prenta út ný lína staf.
Það er allt og sumt.
Með printf, þú þarft ekki að fara í breytur eða sniði kóða.
Þú getur bókstaflega bara prenta eitthvað eins og NEWLINE.
>> Svo skulum fara á undan og gera nýta 0 aftur, endursýning það, Zamyla.
Og nú er það svolítið fallegri.
Nú hvetja mitt er á eigin nýja línu.
Svo er það allt í lagi og gott.
Svo er það gott dæmi.
En ég er ekki einu sinni endilega þarf að harða kóða 32.
Veistu hvað?
Ég gæti say-- ég ekki alltaf muna hvað munurinn er.
>> En ég veit að ef ég hafa lágstafinn,
Ég vil fyrst og fremst að draga burt hvað fjarlægðin er á milli lítið
a og stór, vegna þess að ef ég geri ráð fyrir að allar aðrir stafir eru þau sömu,
sem ætti að fá starf.
En frekar en að gera það, þú veist hvað?
Það er önnur leið enn.
>> Ef það er að nýta 1.c-- ef ég væri að setja það inn í sérstaka skrá.
við skulum ekki nýta 2.c sem hér segir.
Ég ætla að virkilega hreinsa þetta upp hér.
Og í stað þess að jafnvel að þurfa að vita eða sjá um þá lágu stigi
framkvæmd smáatriði, ég er í staðinn bara að fara að prenta staf,
vitna unquote, prósent C, og þá kalla annað fall sem
er til sem tekur rifrildi, sem er eðli, eins og þetta.
>> Það kemur í ljós í C, það er annar virka símtalinu
til efri, sem eins og nafn þess bendir tekur staf
og gerir það að efri hulstrið sambærilegt, og þá skilar það
svo að printf getur stinga því í það.
Og svo til að gera þetta, þó ég þarf að kynna eina aðra skrá.
Það kemur í ljós að það er annar skrá að þú myndir bara vita af bekknum,
eða kennslubók, eða á netinu tilvísun, hringdi C type.h.
>> Þannig að ef ég bæti það upp meðal haus minn skrár, og nú aftur saman þetta forrit,
capitalize2, ./capitalize2 Enter.
Við skulum slá í Zamyla í öllum lágstafir, enn virkar það sama.
En þú veist hvað?
Það kemur í ljós að til þess að efri hefur einhverja aðra virkni.
>> Og láta mig kynna þetta stjórn hér, eins konar vandræðalega
nefnt, en maðurinn fyrir handbók.
Það kemur í ljós að flestir Linux tölvur, eins og við erum að nota here-- Linux stýrikerfi
system-- hafa stjórn heitir maður, sem segir,
hey, tölva, gefa mér handbók í tölvunni.
Hvað viltu að líta upp í þeirri handbók?
>> Ég vil líta upp aðgerðina kallaði til efri, Enter.
Og það er svolítið dulinn að lesa stundum.
En taka við erum í handbók linux forritari.
Og það er allt texta.
Og eftir að það er Heiti virka hér.
Það kemur í ljós að það hefur frænda sem heitir að lækka, sem gerir hið gagnstæða.
Og takið eftir undir ágrip, til að nota þetta virka maðurinn síðuna, svo að segja,
er að segja mér að ég þarf að fela c type.h.
Og ég vissi að úr starfi.
>> Hér, það er að sýna mér tvö frumútgáfur fyrir virka,
þannig að ef ég vil alltaf að nota þetta Ég veit hvað þeir taka sem inntak,
og hvað þeir aftur sem framleiðsla.
Og þá ef ég las lýsing, sjá I
nánar hvaða hlutverk gerir.
En meira um vert, ef Ég lít undir verðmæti aftur,
það segir verðmæti skilað er að af the breytir bréfinu,
eða C, upprunalega inntak, ef að viðskiptin var ekki hægt.
>> Með öðrum orðum, að efri mun reyna að breyta bréf til hástafi.
Og ef svo er, það er að fara að skila henni.
En ef það er ekki hægt fyrir suma reason-- kannski er það þegar hástaf
kannski er það upphrópunarmerki eða einhver önnur punctuation--
það er bara að fara að skila upprunalega C,
sem þýðir að ég get gert númerið mitt betur hannað eins og hér segir.
>> Ég þarf ekki alla þessi fjári línur af kóða.
Allar línur sem ég hef bara hápunktur getur
að hrunið í bara eitt einfalt lína, sem er this-- printf prósent
c efri S krappi i.
Og þetta myndi vera dæmi um betri hönnun.
>> Hvers vegna hrinda í 7 eða 8 línur af kóða, hvað sem það var ég bara
eytt, þegar þú getur í staðinn hrynja öll þessi rökfræði og ákvarðanatöku
í einni línu, 13 nú, að byggir á bókasafni function--
fall sem kemur með C, en það er nákvæmlega það sem þú vilt að hún geri.
Og hreinskilnislega, jafnvel þótt það kom ekki með C,
þú gætir framkvæma það sjálfur, eins og við höfum séð, með að fá neikvæð int
og fá jákvæð INT síðustu viku eins og heilbrigður.
>> Þetta númer er nú miklu læsilegri.
Og reyndar, ef við skruna upp, líta hversu miklu meira samningur
þessi útgáfa af forritinu mínu er.
Það er svolítið efst þungur núna, með öllum þessum nær.
En það er allt í lagi, vegna þess að nú er ég að standa á herðum forritari
fyrir mér.
Og hver var það sem framkvæmda við efri virkilega
gerði mér greiða, eins sá framkvæmda Stirling í raun
gerði mér greiða nokkru síðan.
Og svo nú höfum við betri hönnun program
sem útfærir nákvæmlega sömu rökfræði.
>> Talandi um Stirling, láta mig fara á undan og gera þetta.
Leyfðu mér að fara á undan og vista þessi skrá sem stirling.c.
Og það kemur í ljós, getum við afhýða aftur eitt annað lag ansi einfaldlega núna.
Ég ætla að fara á undan og svipa upp annað forrit í helstu
hér að einfaldlega með tilvísun til-áhald band lengd eins og hér segir.
Svo er hér lína af kóða sem fær mig band frá notanda.
Við halda áfram að nota þetta aftur og aftur.
Leyfðu mér að gefa mér breytu sem heitir n af gerðinni int sem geymir fjölda.
>> Og láta mig fara á undan og gera eftirfarandi rökfræði.
Þó að n-ta eðli í s er ekki jafn sviga 0, fara á undan
og hækka n.
Og síðan prentað út printf prósent i n.
Ég halda því fram að þetta forrit hér, án þess að kalla band lengd,
tölur út lengd strengsins.
>> Og galdur er algjörlega encapsulated í línu 8
Hér með það lítur út eins og nýr setningafræði, þetta skástrik 0 í einn quotes.
En hvers vegna er það?
Jæja, íhuga hvað er verið fara á öllum þessum tíma.
>> Og eins og innskot áður en ég gleymi, grein fyrir of, að í viðbót við manninn síður
að koma með dæmigerður Linux kerfi eins CS50 IDE,
grein fyrir því að við, sem Starfsfólk Auðvitað er, hafa einnig
gerði website útgáfa þessarar sömu hugmynd heitir
reference.cs50.net, sem hefur allar þessar sömu maður síður,
allt það sama skjöl, svo og
lítill kassi efst sem gerir þér kleift að umbreyta öllum sæmilega
Bogagöng tungumál í minna þægilegt ham, þar sem við, kennara,
hafa gengið í gegnum og reyndi að einfalda sum tungumál til að halda hlutum
áherslu á hugmyndum, og ekki sum af tæknilegu hliðinni.
Svo hafa í huga, reference.cs50.net eins og annar auðlind eins og heilbrigður.
>> En hvers vegna er strengur lengd vinnu í leiðin sem ég lagði stund síðan?
Hér er nafn Zamyla er aftur.
Og hér er nafn Zamyla er Hnefaleikar í, eins og ég halda að gera,
að mála mynd um það að vera, í raun, bara röð af stöfum.
En Zamyla er ekki til í einangrun í áætluninni.
>> Þegar þú skrifar og hlaupa a program, þú ert að nota Mac eða PC þína
sem minni, eða RAM svo að segja.
Og hægt er að hugsa um tölvan sem hafa
hellingur af gígabæta minni þessa dagana.
Og tónleikar þýðir milljarða, svo billjón bæti.
>> En við skulum baka í tíma.
Og geri ráð fyrir að við erum að nota mjög gamla tölvu sem
Aðeins eru 32 bæti af minni.
Ég gat á tölvuskjáinn, einfaldlega draga þetta út eins og hér segir.
>> Ég gæti einfaldlega sagt að minn tölva hefur allt þetta minni.
Og þetta er eins og stafur minni, ef þú manst mynd okkar af síðasta tíma.
Og ef ég skipta bara þetta í nógu oft,
Ég halda því fram að ég hef 32 bæti minni á skjánum.
>> Nú, í raun, ég get bara draga svo langt á þessum skjá hér.
Þannig að ég ætla að fara á undan, og bara með því að venju,
draga minni tölvunnar míns sem rist, ekki bara eins og einn beint línu.
Nánar tiltekið, halda ég nú að þetta rist, þetta 8 eftir 4 rist,
bara táknar alla 32 bæti minni í boði í Mac minn,
eða í boði í tölvunni minni.
Og þeir eru umbúðir á að tvær línur, bara
vegna þess að það passar meira á skjánum.
En þetta er fyrsta bæti.
Þetta er í annað bæti.
Þetta er þriðja bæti.
>> Og þetta er 32nd bæti.
Eða, ef við hugsum eins og tölva vísindamaður, þetta er bæti 0, 1, 2, 3, 31.
Svo þú þarft 0 til 31, ef þú byrjar að telja á 0.
>> Þannig að ef við notum forrit að símtöl fá band,
og við fáum band frá mönnum eins og ÉG did hringdi Zamyla, Z-A-M-Y-L-A,
hvernig í heiminum er að tölva Haltu utan um þau bæti,
sem klumpur af minni, tilheyrir sem band?
Með öðrum orðum, ef við höldum áfram að slá annað nafn inn í tölvuna,
eins og þetta Andi, hringja fá band í annað sinn,
A-N-D-I hefur að enda í minni tölvunnar eins og heilbrigður.
En hvernig?
>> Jæja, það kemur í ljós að undir hetta, hvað C er þegar geyma strengi
að mönnum gerðum í, eða sem koma frá einhverjum öðrum uppruna, er það
lýsir enda af þeim með sérstakt character-- sviga
0, sem er bara sérstakan hátt segja 80 bita í röð.
>> Svo -A- er þetta númer 97 muna.
Svo sumir mynstur 8 bita táknar heiltala 97.
Þetta sviga 0 er bókstaflega fjöldi 0, gengur einnig undir nafninu Nul, N-U-L, ólíkt áður,
N-U-L-L, þar sem við ræddum um.
En nú, bara veit að þetta sviga 0 er bara 80 bitar í röð.
>> Og það er bara þessi lína í sandur sem segir nokkuð til vinstri
tilheyrir einum streng, eða einn tegund gagna.
Og allt til hægri tilheyrir eitthvað annað.
Andi er nafn, á meðan, sem bara sjónrænt
gerist að vefja um að hinni línunni, en það er bara fagurfræði smáatriði,
Á sama hátt er Nul slitið.
>> Það er a band af a A-N-D-I stafi, auk fimmtungur leyndarmál staf,
allt 0 bitar, sem bara demarcates í lok nafni Andi eins og heilbrigður.
Og ef við köllum fá band í þriðja sinn í tölvunni til að fá band eins
Maria, M-A-R-I-A, Á sama hátt er Maríu Nafnið Nul slitið með sviga 0.
>> Þetta er í grundvallaratriðum öðruvísi frá því hvernig tölva myndi venjulega
geyma heiltölu eða fljóta, eða önnur gagnatög enn, vegna þess að muna,
heiltala er yfirleitt 32 bita eða 4 bæti, eða kannski jafnvel 64 bitar,
eða átta bæti.
En margir frumform í tölvunni í forritunarmál
hafa fastan fjölda bæti undir hood--
kannski 1, kannski 2, kannski 4, kannski 8.
>> En strengir, með hönnun, hafa dynamic fjöldi stafi.
Þú veist ekki fyrirfram, þar manna gerðir í Z-A-M-Y-L-A,
eða M-A-R-I-A, eða A-N-D-I. Þú veist ekki hversu oft notandinn er að fara að lemja
lyklaborðið.
Því þú veist ekki hvernig margir stafir í fyrirfram
þú ert að fara að þurfa.
>> Og svo C bara svona fer eins og Leyndarmálið breadcrumb undir hetta
í lok band.
Eftir að geyma Z-A-M-Y-L-A í minni, það líka bara setur jafnvirði
á tímabilinu.
Í lok setningarinnar, það setur 80 bita, svo sem
að muna hvar Zamyla byrjar og endar.
>> Svo er það tengingin, þá, að þetta forrit?
Þetta forrit hér, Stirling, er einfaldlega kerfi
til að fá band frá notanda, lína 6.
Line 7, lýsa ég breytu heitir n og setja það jafnt 0.
>> Og þá í línu 8, spurði ég einfaldlega spurning, en n-ta karakter gerir
ekki jafnt allir 0 bits-- með öðrum orðum, er það ekki
jafnt þetta sérstaka eðli, sviga 0, þar sem
var bara að sérstakur Nul character-- fara á undan og bara hækka n.
>> Og halda að gera það, og halda að gera það, og halda að gera það.
Og svo jafnvel þótt í fortíðin sem við höfum notað i,
það er fullkomlega í lagi merkingu og til að nota n,
ef þú ert bara að reyna að telja þetta sinn vísvitandi,
og bara til að kalla það n.
Þannig að þetta heldur bara að spyrja spurningu, er n-ta eðli s allt 0sek?
Ef ekki, líta til næstu útlit, líta til næsta, líta til næsta,
líta til the næstur.
>> En um leið og þú sérð sviga 0, þetta loop-- lína 9 í 11-- hættir.
Þú brjótast út úr while lykkju, fara inni í því breytilega N
samtals telja af öllum hér að stafir í strengnum sem þú sást,
þannig prentun það út.
Svo skulum reyna þetta.
>> Leyfðu mér að fara á undan og, án þess að nota Stirling virka,
en bara að nota eigin homegrown minn útgáfu hér kallað Stirling, láta mig fara á undan
og hlaupa Stirling, tegund í eitthvað eins Zamyla, sem ég veit fyrirfram
er sex stafir.
Við skulum sjá hvort það virkar.
Reyndar er það sex.
Við skulum reyna með Rob, þrír stafir, þrír stafir eins vel, og svo framvegis.
Svo er það allt sem er að gerast á undir hetta.
Og eftir tengingar, þá, með fyrstu viku
í flokki, þar sem við ræddum um eitthvað eins og abstrakt,
sem er bara þetta layering af hugmyndum, eða flókið, ofan á grundvallarreglum.
Hér erum við svoleiðis leita undir hetta Stirling,
svo að segja, til að reikna út, hvernig væri það að koma til framkvæmda?
>> Og við gætum aftur framkvæma það sjálf.
En við erum aldrei aftur að fara að koma aftur innleiða Stirling.
Við erum bara að fara að nota Stirling í röð
til raunverulega fá smá strengi lengd.
>> En það er engin galdur undir hetta.
Ef þú veist að undir hetta, a band
er bara röð af stöfum.
Og það röð af stöfum allir geta verið tölulega beint
með bracket 0, krappi 1, krappi 2 og þú
vita að í lok streng er sérstakur karakter, er hægt að reikna út
hvernig á að gera mest allt í a program, vegna þess að allt það snýst um að
er að lesa og skrifa minni.
Það er að breytast og leita á minni, eða færa hluti
um í minni, prentun hlutir á skjánum, og svo framvegis.
>> Svo skulum nota nú þessa nýfundinni skilningur á því hvað strengir í raun
eru undir hetta, og afhýða aftur eitt annað lag
sem allt þar til nú að við höfum verið að hunsa með öllu.
Einkum hvenær við höfum innleitt áætlun,
við höfum haft þessa línu af kóða ofarlega lýsa helstu.
Og við höfum tilgreint int helstu ógilt.
>> Og það ógilt inni í sviga hefur verið að segja allan þennan tíma að helsta
sjálft tekur ekki nein rök.
Sérhver inntak sem helsta er að fara að fá frá notandanum
þarf að koma frá einhverjum öðrum vélbúnaður, eins Fá int,
eða fá fljóta, eða fá band, eða einhver önnur virka.
En það kemur í ljós að þegar þú skrifar forrit,
þú getur raunverulega að tilgreina að þetta forrit skal
taka inntak frá mönnum á skipanalínu sjálft.
>> Með öðrum orðum, jafnvel þó að við svona langt hafa verið í gangi bara ./hello halló
eða svipuð forrit, allt frá því önnur forrit sem við höfum verið að nota,
að við sjálf ekki skrifa, hafa verið að taka, það virðist,
stjórn lína arguments-- hlutir eins gera.
Þú segir eitthvað eins gera, og þá annað orð.
Eða Clang, þú segir Clang, og þá annað orð, heiti skráar.
>> Eða jafnvel RM eða CP, eins og þú might hafa séð eða notað þegar
til að fjarlægja eða afrita skrár.
Allir sem taka svokallaða stjórn lína arguments--
viðbótar orð á flugstöðinni hvetja.
En allt þar til nú, við sjálf hef ekki haft
þetta lúxus að taka inntak frá notandi þegar hann eða hún hleypur í raun
forritið sjálft á skipanalínunni.
>> En við getum gert það með tilvísun til-að lýsa Helstu áfram, ekki eins og að hafa
ógilt í sviga, en þessar tvær breytur
instead-- fyrsta heiltala, og seinni eitthvað
ný, eitthvað sem við erum að fara að hringja fylki, eitthvað svipað í anda
við það sem við sáum í grunni sem lista, en fylki af strengjum, eins og við munum sjá fljótlega.
En við skulum sjá þetta með því að til að gefa dæmi, áður en við
greina nákvæmlega hvað það þýðir.
>> Þannig að ef ég fer inn í CS50 IDE hér, ég hef farið á undan
og lýst í skrá sem kallast argv0.c eftirfarandi sniðmát.
Og taka eina það er öðruvísi svo langt
er að ég hef breytt ógilt að int argc band argv opið krappi, nálægt
krappi.
Og eftir að nú, það er ekkert inni þessum sviga.
>> Það er engin tala.
Og það er engin i, eða n, eða önnur bréf.
Ég ætla bara að nota hornklofum fyrir nú,
af ástæðum sem við munum koma aftur í bara smá stund.
>> Og nú það sem ég ætla að gera er þetta.
Ef argc jafnt jafnt 2-- og muna að jafn jafn
er jafnrétti rekstraraðili bera saman vinstri og hægri fyrir jafnrétti.
Það er ekki verkefni rekstraraðila, sem er
einn jafnaðarmerki, sem þýðir afrit frá hægri til vinstri sumir gildi.
>> Ef argc jafngildir jafngildir 2, ég vil segjum printf, halló, percents, nýja línan,
og þá stinga in-- og hér er nýja trick-- argv krappi 1, af ástæðum
að við munum koma aftur í smá stund.
Annars ef argc ekki jafnt 2, þú veist hvað?
Við skulum fara bara á undan og, eins og venjulega, prenta út halló heimur án skipta.
>> Svo virðist sem ef argc, sem stendur fyrir rifrildi telja, jafngildir 2,
Ég ætla að prenta út halló eitthvað.
Annars, við vanræksla, ég er að fara að prenta halló heiminn.
Svo hvað þýðir þetta?
>> Jæja, láttu mig fara á undan og vista þessi skrá, og þá gera gera argv0,
og þá ./argv0, Enter.
Og það segir halló heimur.
Nú, hvers vegna er það?
>> Jæja, það kemur í ljós hvenær þú keyra forrit á the stjórn lína,
þú ert að fylla í það sem við munum almennt kalla rifrildi vektor.
Með öðrum orðum, sjálfkrafa tölva, the stýrikerfi,
er að fara að afhenda til program sjálft listi af öllum orðunum
að mönnum slegið á hvetja, ef þú
forritari langar til að gera eitthvað við þær upplýsingar.
Og í þessu tilfelli, eina orðið Ég hef slegið á hvetja er ./argv0.
>> Og svo fjöldi viðfanga sem er samþykkt að áætlun mín er bara einn.
Með öðrum orðum, þau rök telja, annars þekkt sem argc
hér sem heiltala, er bara einn.
Einn, auðvitað, ekki jafn tveir.
Og svo er þetta það sem prentar, halló heiminn.
>> En láta mig taka þetta einhversstaðar.
Leyfðu mér að segja, argv0.
Og þá hvernig um Maria?
Og þá Enter.
>> Og taka eftir hvað dularfullur gerist hér.
Nú, í stað þess að halló heimur, ég hef breytt hegðun þessarar áætlunar
með því að taka inntak ekki frá Ná band eða einhver önnur virka,
en frá virðist, minni stjórn sjálft, það sem ég slóst upphaflega í.
Og ég get spilað þennan leik aftur með að breyta því að Stelios, til dæmis.
>> Og nú sé ég annað nafn enn.
Og hér, ég gæti sagt Andi.
Og ég gæti sagt Zamyla.
Og við getum spilað þennan leik allan daginn, bara tengja í mismunandi gildum,
svo lengi sem ég veita nákvæmlega tvö orð við áminningu
þannig að argc, rök mín telja, er 2.
>> Get ég séð það nafn tappi inn printf, fyrir þessu ástandi hér?
Þannig að við virðast hafa nú svipmikill getu
að taka inntak frá öðru kerfi, frá svokölluðum stjórn lína,
frekar en að þurfa að bíða þar sem notandinn keyrir forritið,
og þá hvetja hann eða hana nota eitthvað eins og fá band.
>> Svo er það þetta?
Argc, aftur, er bara heiltala, fjöldi words-- arguments--
að notandinn veitt á hvetja, á flugstöðinni gluggann,
þar á meðal nafn forritsins.
Svo ./argv0 okkar er, í raun, forritsins nafn,
eða hvernig ég hlaupa the program.
>> Að telja eins orði.
Svo argc væri 1.
En þegar ég skrifa Stelios, eða Andi, eða Zamyla, eða Maria,
sem þýðir að rök telja er tveir.
Og svo nú er það tvö orð liðin í.
>> Og takið eftir, getum við haldið áfram þessa rökfræði.
Ef ég segi reyndar eitthvað eins Zamyla Chan,
fullt nafn, þannig liggur þrjú rök samtals,
nú segir hún sjálfgefið aftur, vegna þess, að sjálfsögðu, 3 ekki jafn 2.
>> Og svo á þennan hátt, ég hef aðgangur um argv þetta nýja rifrildi
sem við gátum tæknilega kalla eitthvað sem við viljum.
En með því að venju, það er argv og argc, í sömu röð.
Argv, rifrildi vektor, er góður af samheiti fyrir forritun
lögun í C kallast fylki.
>> An array er listi af svipuðum gildum aftur, til baka, til baka, til baka.
Með öðrum orðum, ef einn er réttur hér í RAM, næsta einn er rétt við hliðina á henni,
og rétt við hliðina á henni.
Þeir eru ekki út um allt.
Og það síðar- nefnda, þar sem hlutirnir eru út um allt í minni,
geta raunverulega vera a öflugur lögun.
En við munum koma aftur til að þegar við tala um áhugamaður gögn uppbygging.
Fyrir nú, fylki er bara klumpur af samliggjandi minni,
hver af sem þættir eru aftur, til baka, til baka, til baka,
og almennt sömu gerð.
>> Svo ef þú hugsar um, frá stund síðan, hvað er band?
Jæja, a band, eins og Zamyla, Z-A-M-Y-L-A, er, tæknilega,
bara array.
Það er fylki af stöfum.
>> Og svo ef við drögum þetta, þar sem ég gerði áðan, eins og klumpur af minni,
það kemur í ljós að hver af þessum stafir tekur upp bæti.
Og þá er það sem sérstakt Sentinel eðli, sviga 0,
eða öllum átta 0 bitar, sem demarcates enda strengsins.
Svo a band, snýr það út, vitna unquote band,
er bara fylki af chara-- bleikju vera raunveruleg gögn tegund.
>> Og nú argv, meanwhile-- við skulum fara aftur til the program.
Argv, jafnvel þó að við sjáum orðið band hér, er ekki band sjálft.
Argv, rök vektor, er fylki af strengjum.
>> Svo bara eins og þú getur að hafa fjölda stafi, getur þú meiri,
An array af strings-- svo, til dæmis, þegar ég slóst í smá stund síðan ./argv0
argv0, pláss Z-A-M-Y-L-A, I hélt því fram að argv átti tvo strengi í it-- ./argv0,
og Z-A-M-Y-L-A. í öðrum orðum, argc var 2.
Afhverju er það?
>> Jæja, í raun, hvað er að gerast á er að hver þessara strengi
er, að sjálfsögðu, fylki af stöfum eins og áður, hver af hvers stafir
tekur upp eitt bæti.
Og ekki rugla ekki raunverulegt 0 í nafni forritsins með 0,
sem þýðir allar 80 bita.
Og Zamyla, á meðan er enn Einnig fjölbreytta stafi.
>> Svo í lok dagsins, það er í raun lítur út eins og þetta undir hetta.
En argv, eðli þess hvernig helstu verk, gerir mig að vefja þetta allt
upp í, ef þú vilt, stærri array að ef við rúmlega einfalda
hvað myndin lítur út eins og ekki alveg draga það að skala upp þar,
þetta array er aðeins af stærð 2, fyrsta þáttur um sig inniheldur streng,
seinni þáttur sem inniheldur strenginn.
Og, aftur á móti, ef þú konar stækka á hverju
þessara strengi, hvað þú sjá undir hetta
er að hver strengur er bara An array af stöfum.
>> Nú, rétt eins og með strengi, við gátum til að fá aðgang
í i-ta staf í streng að nota þessi hornklofi tákn.
Á sama hátt, með fylki í Almennt getum við
nota veldi krappi tákn til að fá á hvaða fjölda strengja í fylki?
Til dæmis, láttu mig fara á undan og gera þetta.
>> Leyfðu mér að fara á undan og búa til argv1.c, sem er svolítið öðruvísi í þetta sinn.
Í stað þess að stöðva fyrir argc2, Ég ætla að í staðinn að gera þetta.
Fyrir INT ég fæ 0, I er minna en argc, ég plús plús,
og síðan prentað út inni af þessu, prósent s, ný lína, og þá
argv krappi i.
>> Svo í öðrum orðum, ég er ekki að takast á við einstakar persónur í augnablikinu.
Argv, eins og fólst í því að þessir tóm veldi axlabönd til hægri nafn argv,
þýðir argv er fylki af strengjum.
Og argc er bara int.
>> Þessi lína hér, 6, er segja setti ég jafnir til 0.
Telja alla leið upp til, þó ekki, argc.
Og þá á hverri ítrun, prenta út streng.
Hvað band?
>> I-ta band í argv.
Svo en áður en ég var með veldi krappi
ritháttur að fá á ith persóna í streng, nú
Ég er að nota hornklofi tákn að fá á ith band í fylki.
Svo það er góður af einu lagi hér að framan, eðli.
>> Og svo er það sniðugt um þetta program nú, ef ég safna saman argv1,
og þá gera ./argv1, og þá tegund í eitthvað eins foo bar Baz,
sem eru þrír sjálfgefnu orð sem a Tölvunarfræðingur nær fyrir hvaða tíma
hann eða hún þarf nokkrar placeholder orð, og ýta á Enter, hver af þeim orðum,
þar á meðal nafn forritsins sem er í argv við fyrstu staðsetningunni,
endar að vera prentuð einn í einu.
Og ef ég breyti þessu, og ég segi eitthvað eins argv1 Zamyla Chan,
fáum við öll þrjú af þeim orð, sem er argv0,
argv1, argv2, vegna þess að í þessu Málið argc, telja, er 3.
>> En hvað er sniðugt er ef þú skilur sem argv er bara fylki af strengjum,
og þú skilja að strengur er fylki af stöfum,
getum við í raun eins konar nota þetta hornklofi auðkennisstillingar mörgum sinnum
að velja band, og þá velja eðli í band,
köfun í dýpra sem hér segir.
Í þessu dæmi, láta mig fara á undan og kalla þetta argv2.c.
Og í þessu dæmi, láta mig fara á undan og gera following-- fyrir int i fá 0,
Ég er minna en argc, ég plús plús, bara eins og áður.
Svo í öðrum words-- og nú þetta er að fá flókið nóg.
Þá ætla ég að segja kunnugt um strengi í argv,
sem athugasemd við mig.
Og þá ætla ég að hafa hreiður fyrir lykkju, sem þér sennilega
hafa gert, eða talið gera, á grunni, þar sem
Ég ætla að segja int-- ég er ekki að fara að nota i aftur,
vegna þess að ég vil ekki að skuggi, eða konar skrifa yfir núverandi i.
>> Ég ætla að, í staðinn, segja j, vegna þess að það er fara mín að breyta eftir i,
þegar ég er bara að reyna að telja einfaldar tölur.
Fyrir J fær 0-- og einnig, n, er að fara að fá Stern lengd argv krappi i,
svo lengi sem j er minna en m, J plús plús, gera eftirfarandi.
Og hér er áhugaverður hluti.
>> Prenta út staf og nýja línu, tengja í argv krappi i, krappi j.
OK, svo látið mig bæta nokkrum athugasemdum hér.
Iterate yfir stafi í núverandi band,
prenta J-ta persóna í i-ta streng.
Svo nú skulum íhuga hvað þessar athugasemdir meina.
>> Iterate yfir strengi í argv-- hversu margir
strengir eru í argv, sem er fylki?
Argc margir, þannig að ég ætla að iterating frá ég jafn 0 upp í argc.
Á sama tíma, hversu margir stafir eru í i-ta band í argv?
>> Jæja, til að fá það svar, Ég kalla bara band lengd
á núverandi band I umönnun um, sem er argv krappi i.
Og ég ætla að geyma tímabundið að gildi í n, bara vegna flýtiminni,
að muna það fyrir skilvirkni.
Og þá er ég að fara að frumstilla j 0, halda áfram svo lengi sem j er minni en n,
og á hverri endurtekning vöxtur j.
>> Og þá hér, fyrir athugasemd mína á línu 12,
prenta út staf, fylgt eftir með nýja línu,
sérstaklega argv krappi Ég gefur mér i-ta streng
í argv-- Svo fyrsta orði, Annað orð, þriðja orðið, hvað sem er.
Og þá j kafar dýpra, og fær mér var J-ta eðli þess orðs.
Og svo, í raun, þú getur skemmtun argv eins og a multi-víddar,
sem tvívíð, array, þar hvert orð konar útlit
svona í hugann er auga, og hvert eðli
er eins konar samsett í dálki, ef það hjálpar.
>> Í raun og veru, þegar við stríða þetta sundur í framtíðinni vikur,
það er að fara til vera a lítill flóknari en það.
En þú getur raunverulega hugsa um það, að nú,
eins og bara þetta tvívíð array, þar sem ein stigi það
er öllum strengi.
Og svo ef þú kafa í dýpri, þér er hægt að fá á einstökum persónum
í henni með því að nota þessa tákn hér.
>> Svo er það hrein áhrif?
Leyfðu mér að fara á undan og gera argv2-- fjári það.
Ég gerði mistök hér.
Óbeint lýsa því bókasafn virka Stirling.
Svo allt þetta skiptið, það er kannski við
sem við erum að svoleiðis klára nákvæmlega þar sem við byrjuðum.
>> Ég ruglaður upp, óbeint lýsa bókasafn virka Stirling.
OK, bíddu í eina mínútu.
Ég man það, sérstaklega þar sem það er hérna.
Ég þarf að fela string.h í þessi útgáfa af forritinu.
>> Leyfðu mér að fara á undan og eru string.h, vista það, fara á undan
og laun argv2.
Og nú, hér við fara, gera argv2, Enter.
Og þó það er lítið dulinn við fyrstu sýn,
taka eftir því, örugglega, hvað er prentuð er punktur argv2.
>> En ef ég gerð nokkur orð eftir hvetja, eins argv2 Zamyla Chan,
Sláðu einnig lítið dulinn við fyrstu sýn.
En ef við fletta aftur upp, ./argv2 Z-A-M-Y-L-A C-H-A-N.
Þannig að við höfum ítrekað yfir hvert orð.
Og, aftur á móti, höfum við ítrekað yfir Sérhver persóna innan orðs.
>> Nú, eftir allt þetta, átta sig á að það er
eitt annað smáatriði sem við höfum verið góður hunsa þetta allan tímann.
Við strítt bara í sundur hvað inntak Main getur verið?
Hvað um framleiðslu MAIN er?
>> Allt þetta sinn höfum við verið bara að afrita og líma
orðið INT framan helstu, þó þú getur séð á netinu,
stundum ranglega í eldri útgáfum C og vistþýðendur, sem þeir segja ógilt,
eða ekkert yfirleitt.
En reyndar, fyrir útgáfu C sem við erum að nota,
C 11, eða 2011, grein fyrir að það ætti að vera Int.
Og það ætti að vera annaðhvort ógilt eða argc og argv hér.
>> En hvers vegna int helstu?
Hvað er það aftur í raun?
Jæja, það kemur í ljós allan þennan tíma, hvenær þú hefur skrifað forrit Main
er alltaf aftur eitthvað.
En það er verið að gera það í leyni.
>> Að eitthvað er int, eins línu 5 til kynna.
En hvað INT?
Jæja, það er þetta venju í forritun,
þar ef ekkert hefur farið úrskeiðis og allt er vel,
áætlanir og aðgerðir almennt return-- nokkuð counterintuitively--
0.
0 yfirleitt táknar allt er vel.
Svo jafnvel þótt þú hugsa um það sem rangar í mörgum samhengi,
það reyndar yfirleitt þýðir gott
>> Á sama tíma, ef forrit skilar 1, eða neikvæð 1, eða 5, eða neikvætt 42,
eða allir non-0 gildi, sem almennt táknar
að eitthvað hefur farið úrskeiðis.
Í raun, á eigin Mac eða PC, þú gætir hafa í raun séð
villuboð, þar sem það segir eitthvað eða annað, villa
númer neikvæð 42, eða villa kóða 23, eða eitthvað svoleiðis.
Þessi tala er yfirleitt bara vísbending til forritari, eða fyrirtæki
sem gerði hugbúnað, hvað fór úrskeiðis og hvers vegna,
þannig að þeir geta flett í gegnum skjöl þeirra eða númer,
og reikna út hvað villa þýðir í raun.
Það er almennt ekki gagnlegt fyrir okkur endanotenda.
>> En þegar helstu skilar 0, allt er vel.
Og ef þú tilgreinir ekki hvað helstu ætti aftur,
það verður bara sjálfkrafa aftur 0 fyrir þig.
En aftur eitthvað annað er raunverulega gagnlegur.
>> Í þessu síðasta áætlun, láttu mig fara á undan og kalla þetta exit.c,
og kynna síðasta dag er efni, þekktur sem villukóða.
Leyfðu mér að fara á undan og eru okkar þekki skrár upp efst, gera int helstu.
Og að þessu sinni, við skulum gera int argc, band argv, og með sviga mínum
að gefa til kynna að það er í fylkinu.
Og þá láta mig gera bara geðheilsu stöðva.
Í þetta sinn, ef argc ekki jafnir 2, þá veistu hvað?
Gleymdu því.
Ég er að fara að segja það, hey, notandi, þú ert sem vantar stjórn lína rifrildi
sviga n.
>> Og þá er það það.
Ég vil hætta.
Ég er að fara að preemptively, og snemma í raun, aftur
eitthvað annað en númer 1.
The fara að verðmæti fyrir fyrsta villa sem getur gerst er 1.
Ef þú ert einhver önnur rangra ástand sem gæti átt sér stað,
þú gætir sagt aftur 2 eða skila 3, eða kannski jafnvel neikvæð 1 eða neikvæð 2.
>> Þetta eru bara hætta kóðar sem eru, almennt,
aðeins gagnlegt að forritari, eða fyrirtæki sem er skipum hugbúnað.
En sú staðreynd að það er ekki 0 er það sem er mikilvægt.
Þannig að ef í þessari áætlun, ég vil tryggja að þessi áætlun einungis
virkar ef notandi gefur mér með rifrildi telja um tvo,
nafn af the program, og sum önnur orð, get ég framfylgja eins mikið eins og hér segir,
æpa á notanda með printf orðatiltæki, vantar stjórn lína rifrildi,
skila 1.
Það verður bara strax hætta forritið.
>> Aðeins ef argc jafngildir 2 munum við fá niður hér, þar sem ég er að fara að segja,
halló prósent s, sviga n, argv1.
Með öðrum orðum, ég er ekki að fara eftir argv 0,
sem er bara nafn af the program.
Ég vil að prenta út halló, komma, annað orð sem mönnum slegið.
Og í þessu tilfelli á lína 13, allt er vel.
>> Ég veit að argc er 2 rökrétt frá þessari áætlun.
Ég ætla að fara á undan og aftur 0.
Sem innskot, hafa í huga að þetta er satt í grunni eins og heilbrigður.
>> Rökrétt, gæti ég gert þetta og þjappa þessar línur
af kóða í þessum annað ákvæði hér.
En það er tegund af óþarflega indenting númerið mitt.
Og ég vil gera frábær ljóst að sama hvað,
sjálfgefið, halló eitthvað mun fá prentað,
svo lengi sem notandinn vinnur.
>> Svo það er mjög algengt að nota ástand, bara ef,
að veiða nokkrar röng ástand, og þá hætta.
Og þá, svo lengi allt er vel, ekki hafa óákveðinn greinir í ensku annað,
en bara að hafa kóðann utan að ef, því það er
jafngildi í þessu Einkum tilfelli, rökrétt.
Þannig að ég ætla að skila 0, bara að sérstaklega signify allt er vel.
>> Ef ég sleppt aftur 0, myndi það vera sjálfkrafa ráð fyrir mig.
En núna þegar ég er að fara aftur einn í að minnsta kosti þessu tilfelli,
Ég ætla að, gott mál og skýrleika, aftur 0 í þessu tilfelli.
Svo nú láta mig fara á undan og gera hætta, sem er fullkomin Segue bara fara.
>> En gera hætta, og láta mig fara á undan og gera ./exit, Enter.
Og the program öskraði á mig, vantar stjórn lína rifrildi.
OK, láttu mig vinna.
>> Leyfðu mér staðinn gera ./exit, David, Enter.
Og nú segir hann, halló David.
Og þú myndir ekki venjulega sjá þetta.
>> En það kemur í ljós að það er sérstakan hátt í Linux til raunverulega sjá
með hvaða hætta póstnúmer forrit lauk.
Stundum á myndrænan Heimurinn eins og Mac OS eða Windows,
þú sérð bara þessar tölur þegar villuboð birtist á skjánum
og forritari sýnir þér að tala.
En ef við viljum sjá hvað villa Skilaboðin eru, getum við gert það here--
svo ./exit, Enter, prenta vantar stjórn lína rifrildi.
>> Ef ég geri nú echo $ ?, sem er hlægilegur dulinn leita.
En $?
er töfrum incantation sem segir, hey, tölva,
segðu mér hvað fyrri Hætta númer áætlunarinnar var.
Og ég ýta á Enter.
Ég sé 1, vegna þess að það er það sem ég sagði meginhlutverki mína til að fara aftur.
>> Á sama tíma, ef ég geri ./exit Davíð, og ýta á Enter, ég, halló David.
Og ef ég nú echo $ ?, ég sé halló 0.
Og svo þetta mun í raun vera verðmætar upplýsingar
í samhengi við aflúsara, ekki svo mikið að þú, manna, myndi kæra.
En aflúsara og annað forrit við munum nota þessa önn
vilja oft líta á þessi númer, jafnvel þó að það er tegund af falinn í burtu
nema þú lítur á það, að ákvarða hvort forrit eða ekki
framkvæmd var rétt eða rangt.
>> Og svo að koma okkur til þetta, í lok dags.
Við byrjuðum í dag með því að horfa á kembiforrit, og síðan á námskeiðinu
sjálft, og þá fleiri áhugaverður, tæknilega undir hetta
á hvaða strengir eru, sem endast viku tókum bara sjálfsagðan hlut,
og vissulega tók þá sjálfsagðan hlut í grunni.
>> Við leit þá á hvernig við getum nálgast einstök stafir í streng,
og síðan aftur tók meiri líta á hlutina, að horfa á hvernig well--
Ef við viljum fá á einstökum þættir í lista eins og uppbyggingu,
getum við ekki gert það með mörgum strengjum?
Og við getum með stjórn lína rifrildi.
En þessi mynd hér af bara kassa er sýnileg með þessum almenna hugmynd
af fjölda, eða lista, eða vektor.
Og eftir á samhengi, öll þessi orð
meina örlítið mismunandi hluti.
Svo í C, við erum bara að fara að tala um fylki.
Og fylki er klumpur af minni, hver þeirra sem er
þættir eru samliggjandi, aftur, til baka, til baka, til baka.
>> Og þessir þættir eru almennt, af sömu gögn gerð, eðli,
eðli, eðli, eðli eða band, band, band, band, eða int,
int, int, hvað sem það er við erum að reyna að geyma.
En í lok dagsins, þetta er hvað það lítur út eins og eðli.
Þú ert að taka þinn minni tölvunnar eða RAM.
Og þú ert útskorið það út í samur stór kassa, sem öll
eru aftur, til baka, til aftur, til baka á þennan hátt.
>> Og hvað er gott um þessi hugmynd, og sú staðreynd
að við getum tjáð gildi á þennan hátt með fyrsta mannvirkja gögn okkar
í bekknum, þýðir að við getum byrjað til að leysa vandamál með kóða
sem kom svo innsæi í viku 0.
Þú munt muna símann bók dæmi, þar sem
við notuðum deila og sigra, eða tvöfaldur leit reiknirit,
að sigta í gegnum heild fullt af nöfnum og númerum.
En við ráð fyrir, muna, að það símaskrá var þegar raðað,
að einhver annar hafði þegar mynstrağur out-- gefið lista yfir nöfn
og Numbers hvernig á að alphabetize þeim.
Og nú að í C við, of, hafa getu
að leggja það út, ekki líkamlega í símaskránni
en nánast í tölvu er minni, munum við vera fær í næstu viku
að kynna aftur this-- fyrsta gagna mannvirki okkar í gegnum array--
en meira um vert, raunverulegur tölva vísindi reiknirit framkvæmd
í kóða, sem við getum geymt Gögn í mannvirki eins og þetta,
og þá byrja að vinna það, og að í raun að leysa vandamál með það,
og til að byggja ofan á það, að lokum, forrit í C,
í Python, í JavaScript, fyrirspurn gagnagrunna með SQL?
>> Og við munum sjá að allir þessir mismunandi hugmyndir interlock.
En nú, muna að Lénið sem við kynntum í dag
var þetta hlutur hér, og heimurinn dulmál.
Og meðal næstu vandamál sem þú sjálfur mun leysa er list dulmál,
spæna og de-spæna upplýsingar og ciphering
og deciphering texta, og miðað við að lokum
sem þú veist nú hvað er undir hetta
þannig að þegar þú sérð eða færð skilaboð eins og þetta, þú
sjálfur getur ráða hana.
Allt þetta, og meira næst.
>> [Vídeó spilun]
>> -Mover Kom bara.
Ég ætla að fara heimsókn háskólaprófessor hans.
Jebb.
Hi.
Það ert þú.
Bíddu!
David.
Ég er bara að reyna að reikna út hvað gerðist við þig.
Vinsamlegast eitthvað gæti hjálpað.
Þú varst háskóli hans herbergisfélagi, varstu ekki?
Þú varst þarna með honum þegar Hann lauk CS50 verkefnið?
>> [TÓNLIST]
>> -Það Var CS50.
>> Ég elska þennan stað.
>> -Eat Upp.
Við erum að fara út af fyrirtæki.
>> [END spilun]