[TÓNLIST] DAVID J. Malan: Allt í lagi, þetta er CS50. Og þetta er vika eitt. Svo muna að síðasta skipti í viku núll, við áherslu á computational hugsun. Og við færðum frá því að Scratch, myndrænt forritun Tungumál frá vinum okkar á MIT Media Lab. Og með grunni, gerði við kanna hugmyndir eins virka og skilyrði, og lykkjur, og breytur, og jafnvel Viðburðir og þræði, og fleira. Og í dag erum við að fara að halda áfram að nota þær hugmyndir, og í raun taka þá fyrir veitt, en þýða þær annað tungumál þekktur sem C. Nú, C er meira hefðbundin tungumál. Það er lægra tungumál, ef þú vilt. Það er eingöngu texta. Og svo við fyrstu sýn, það er allt að fara að líta frekar dulinn ef þú hefur aldrei forritað áður. Við erum að fara að hafa hálf-tvípunkta og sviga, og hrokkið axlabönd, og fleira. En ljóst að jafnvel þótt setningafræði er um að líta svolítið framandi að flest ykkar, sjá framhjá því. Og reyna að sjá hugmyndirnar það eru reyndar þekki, vegna þess að hér í viku eitt hvað Við munum byrja að gera er að bera saman, upphaflega, Scratch móti C. Svo, til dæmis, man að þegar við framkvæmda fyrsta forrit okkar síðasta sinn, við höfðum blokk sem leit a lítill eitthvað eins this-- hvenær grænn fáni smellt, og þá höfðum við eitt eða fleiri púsluspil stykki undir það, í þessu tilfelli, segja, halló heimur. Svo, reyndar í grunni, þegar ég smelli þessi græna fána að keyra forritið mitt, svo að tala, þetta eru blokkir sem fá keyrð, eða hlaupa. Og, sérstaklega, Scratch sagði halló, heimur. Nú, ég hefði getað tilgreint mismunandi orð hér. En við munum sjá það reyndar margir þessara blocks-- og já, í C mörg functions-- getur verið parametrized eða aðlaga að gera mismunandi hluti. Í staðreynd, í C ef við langar að breyta, nú, þetta Scratch program til þessa annað tungumál, við erum að fara að skrifa lítill eitthvað eins og þetta. Leyfishafi, það er einhver ókunnur setningafræði þar líklega, int, og svigum og tóm. En printf-- jafnvel þó þú myndir held að það myndi bara vera prenta. En prenta þýðir prenta sniðinn, eins og við munum sjá fljótlega. Þessi bókstaflega mun prenta á skjáinn hvað er inni af þeim sviga, sem auðvitað í þessu tilfelli er, halló heimur. En þú munt taka eftir einhverjum öðrum setningafræði, sumir gæsalappa, að svigar í lok, hálf-krabbamein í ristli og þess háttar. Svo er það hluti af kostnaður, svo að segja, bæði vitræn og setningafræðilega, sem við erum að fara að þurfa að muna áður en langur. En ljóst að með starfi, þetta mun byrja að hoppa út á þig. Í raun, við skulum leggja áherslu á að einn virka specifically-- í þessu tilfelli, segja Halló heimur. Svo segja er að virka. Halló heimur er viðfang hennar, eða rök, customization þess. Og jafngildi í C er bara að fara að vera þetta eina línu hér, þar printf jafngildir, segja, tvöfaldur vitna band, halló heimurinn er jafngildi, að sjálfsögðu, hvað er í hvítum kassa þar. Og sviga n, þó lítið undarlegt og fjarverandi frá grunni, einfaldlega er að fara að hafa áhrif að við munum sjá í tölvu, eins og Mac minn eða tölvu, af bara hreyfa bendilinn í næstu línu. Það er eins og að berja Enter á lyklaborðinu. Þannig að við munum sjá að aftur áður en langur. En fyrst skulum taka a líta á þetta önnur dæmi um er að ræða lykkjur. Við höfðum þetta að eilífu lykkju síðasta sinn, sem var röð af stykki púsluspil sem gerði eitthvað bókstaflega forever-- í þessu tilfelli, segja, halló heimur, halló heimur, halló heimur, halló heimur. Svo er það óendanlega lykkju af hönnun. Í C, ef við viljum framkvæma þetta Sama hugmynd, gætum við einfaldlega að gera þetta. En satt, printf halló world-- nú en bara merkingu, eins konar conjures upp hugmynd að gera eitthvað aftur og aftur, og aftur, og hve lengi? Jæja, true-- muna að satt er bara á eða einn. Og satt er, að sjálfsögðu, alltaf satt. Svo það er góður af a tilgangslaust Yfirlýsing bara að segja satt. En reyndar er þetta viljandi, því ef satt er bara alltaf satt, en en satt bara gefur til kynna, ef smá óbeint, að eftirfarandi línur af kóða á milli þessara hrokkið axlabönd ættir bara að framkvæma aftur, og aftur, og aftur, og aldrei hætta. En ef þú vilt þinn lykkja til að hætta, eins og við gerði síðasta skipti með eitthvað svona þetta endurtaka eftirfarandi 50 sinnum, í C við getum gert það sama með hvað sem er kallað til loop-- leitarorð ekki vera á meðan, en fyrir. Og þá höfum við nokkur ný setningafræði hér, með int i jafngildir 0, eg síður en 50, Ég ++. Og við munum koma aftur að því. En þetta er einfaldlega hvernig við gerðum þýða sett af Scratch blokkir til að setja af C línum af kóða. Á sama tíma, telja breytur. Og í raun, við bara sá einn í smá stund síðan. Og að því er varðar grunni, ef við langaði að lýsa yfir breytu sem heitir i fyrir i að vera heiltala, bara tala, og við viljum að setja það að nokkur gildi, við myndum nota þetta appelsínugult loka here-- stillt ég til 0. Og við munum sjá í dag og utan, rétt eins og í síðustu viku, forritari gera nánast alltaf byrja að telja frá núlli, virkilega samkvæmt venju. En einnig vegna þess að innköllun frá umfjöllun okkar tvöfaldur, minnsti fjöldi þú getur tákna með hvaða fjölda bita er bara að fara að vera 0 sig. Og svo við munum yfirleitt byrja frumstilla jafnvel breytur okkar til 0. Og í C til að gera hið sama, við erum að fara að segja int fyrir heiltölu, ég bara eftir venju. Ég gæti hafa kallað þessi breyta eitthvað sem ég vil, bara eins og í grunni. Og þá jafngildir 0 bara úthlutar gildi 0 frá hægri og setur það í breytu, eða geymsla gámur þarna á vinstri. Og hálf-hreinsun eins og við munum see-- og Við höfum séð nokkrar af þessum already-- þýðir bara enda hugsun. Halda áfram að gera eitthvað annað á línum sem fylgja. Nú, hvað um Boolean tjáning? Muna að í grunni, Þetta voru orðasambönd sem eru annaðhvort satt eða false-- spurningar, í raun, sem eru annaðhvort satt eða ósatt. Svo er að ræða grunni, gætum við spyrja einfaldri spurningu eins og þetta, er ég minni en 50 |? Svo i, aftur, er heiltala. Kannski erum við að nota það í Scratch áætlun að halda utan um stöðuna eða eitthvað svoleiðis. Þannig að þetta setningafræði hér í grunni þýðir bara, er ég minna en 50? Jæja, sem betur fer, eitthvað er einfalt í C. Og að þýða, þetta við myndi einfaldlega segja að ég minna en 50, með því að nota kunnuglega lykilinn á lyklaborðinu. Á sama tíma, ef þú vildir segja eitthvað meira almennt, eins vel, er x minna en y þar sem hver af X og Y eru sjálfir breytur? Við getum gert það sama í C, svo lengi sem við höfum búin þessar breytur þegar. Og við munum sjá hvernig á að gera það fyrir löngu. Við myndi einfaldlega segja x minna en y. Svo þú ert að byrja að sjá sumir líkt. Og þeir fólkinu sem gerði Scratch voru vissulega innblásin af sumum af þessum grunnhugmyndir. Og þú munt sjá þessa tegund af setningafræði í mörgum languages-- ekki bara Scratch, ekki bara C, en Python, og JavaScript, og önnur tungumál enn. Við skulum íhuga annað reisa frá C, hugmyndin um ástand, gera eitthvað skilyrðum. Ef eitthvað er satt, að gera þetta. Ef eitthvað annað er satt, að gera það. Það er tegund af forritun jafnvirði gaffli í veginum. Kannski er það tveir-vegur gaffal, þriggja-vegur punga eða fleiri. Og í grunni, gætum við hafa séð eitthvað eins og þetta. Svo er þetta ein stór. En íhuga hlutfallsleg einfaldleiki af the rökfræði. Ef x er stærra en y, þá segja x er minna en y, annars ef x er hærra en y, þá segja x er hærra en y. Og þá, rökrétt, ef þú hugsa til baka til Scratch eða bara þitt eigið manna innsæi, vel, ef X er ekki meiri en y, og X er ekki minna en y, svo náttúrulega x er að fara að vera jafn y. Þannig að í þessu tilfelli, með því að verpa þessir Scratch blokkir, getum við náð þrjú vegur punga í veginum? Á sama tíma, ef við viljum gera það í C, það að öllum líkindum lítur svolítið simpler-- minnsta kosti þegar þú fá kunnuglegur með the setningafræði. Ef x er stærra en Y, printf x er stærra en y. Annars ef x er hærra en y, printf x er hærra en y. Annars printf x er jafnt y-- og, aftur, með þeim sviga endar bara fyrir þá nýjar línur þannig að ef þú reyndar hljóp af þessu tagi program það myndi bara fara bendilinn lokum í næstu línu á skjánum. Nú, á meðan Scratch hafði annað flóknari aðgerðir, aðeins sem sum hver við erum að fara að upphaflega að fara yfir til the veröld af C. Og einn af þeim var kallast listi í grunni. Og þetta var sérstakt tegund breytu sem leyfa þér að geyma marga hluti í það aftur, til baka, til baka, til baka. Í C, er það ekki listum, í sjálfu sér, en eitthvað sem eru almennt heitir fylki, þó að við munum koma aftur síðar þessa önn að horfa á eitthvað kallað lista, eða bara tengdan lista. En nú, næst jafngildi í C fyrir okkur er að fara að vera eitthvað kallast fylki. Og fylki er einfaldlega sérstök tegund af breytu sem leyfir þér að geyma gögn aftur, til baka, til baka, til baka. Og reyndar í grunni, ef við vildum að nálgast fyrsti þátturinn af fjölda eða a list-- og ég ætla að kalla það, Samkvæmt venju argv, rök vektor, en meira um það fyrir löngu. Ef ég vil fá á fyrstu frumefni á argv, í heimi grunni þú gerir í raun venjulega byrja að telja frá 1. Og svo ég gæti fengið atriði 1 af argv. Það er bara hvernig MIT framkvæmda hugmyndin um listum. En í C, ég ætla að meira einfaldlega bara að segja, argv, sem aftur er nafn mitt list-- eða að vera ljóst, fylki. Og ef ég vil fyrst þættir, ég er að fara að nota hornklofa, sem þér gæti ekki oft notuð undir lyklaborðinu. En 0 þýðir bara, fá mér fyrst. Svo stundum og eins tíminn líður, við erum að fara að byrja að sjá þessar dichotomies milli grunni og C, þar Scratch notar einn. Við í C notum 0 hér. En þú munt fljótt sjá þegar þú skilur undirstöður hverrar tungu, að þetta byrjar að fá allt meira þekki í gegnum starf og starfshætti. Svo skulum í raun líta nú á dagskrá. Hér skal vera fyrsti C okkar Kóðinn fyrir heill forrit. Og the program við erum að fara að bjóða til umfjöllunar er sá sem er jafngildi að það fyrra Scratch stykki. Svo hér höfum við hvað er að öllum líkindum einfaldasta C program þú getur skrifað það reyndar gerir eitthvað. Nú munum við líta framhjá, nú, hefur ma, staðall io.h, og þessir horn sviga, og int, og ógilt, og hrokkið axlabönd, og þess háttar. Og við skulum einblína bara á hvað, að minnsta kosti innsæi, gæti hoppað út á þig þegar. Í raun, helstu, ég ekki endilega vita hvað þetta er, en líkt grunni hafði það þegar grænn fáni smellt þraut stykki, svo er C sem forritunarmál hafa helstu stykki af kóða sem fær keyrð sjálfgefið. Og reyndar það er bókstaflega að fara að vera kölluð aðal. Svo Helsta er fall. Og það er sérstakt fall sem er til staðar í C að þegar þú keyrir forritið, það er helsta sem fær hlaupa með sjálfgefið. Í heimi grunni, það var yfirleitt þegar grænn fáni smellti sem fékk að keyra sjálfkrafa. Á sama tíma höfum við séð þetta áður, printf eða prenta sniðinn, það er að fara að vera fall sem kemur með C, ásamt a heild búnt af öðrum, að vilji frá tíma og tíma aftur, í því skyni að gera nákvæmlega eins og nafnið gefur til kynna, prenta eitthvað. Hvað viljum við að prenta? Jæja, munum við sjá að eftir umlykur stafi eins these-- halló heimur, sviga n í gæsalöppum, við getum sagt printf nákvæmlega hvað á að prenta á skjánum. En til þess að gera það, við því miður þarf að taka eitthvað sem er þegar dulinn að okkur mönnum, en að minnsta kosti er það nokkuð readable-- skarpur eru, staðall io.h, int, Helsta, ógilt, printf, allt töfrum álagaþulurnar sáum bara á skjánum. En við höfum í raun að fara meira Bogagöng enn. Við þurfum fyrst að þýða kóðann að við skrifa inn kóða vél. Og muna frá síðustu viku sem vélar, að minnsta kosti þær sem við vitum hér, í lok dagsins eingöngu skil núll og sjálfur. Og Guð minn, ef við þurftum að skrifa þetta núll og sjálfur að raunverulega áætlun, það myndi mjög fljótt taka gaman af neinu. En það kemur í ljós, á síðustu viku, að þessi mynstur núllum og sjálfur bara hafa sérstaka merkingu. Við tilteknar aðstæður, þeir gætu þýtt tölur. Í sumum tilfellum, þeir gætu þýtt bréf, eða liti, eða allir tala annarra vatnstöku þar yfir. En eins og tölvan þín hefur CPU, Central Processing Unit, eða gáfur inni á tölvunni. Það er yfirleitt Intel inni, því það er eitt af stærstu fyrirtækjum sem gerir örgjörva fyrir tölvur. Jæja, Intel örgjörva og aðrir einfaldlega hafa ákveðið fyrirfram að tiltekin mynstur núllum og Þeir merkir tiltekna hluti. Ákveðnar mynstur núllum og sjálfur vilja meina, prenta þetta á skjánum, eða bæta þessar tvær tölur, eða draga þessar tvær tölur, eða færa þetta stykki af gögnum frá minni tölvunnar minnar hérna, eða allir tala af öðrum mjög lágu stigi, en á endanum gagnlegur, rekstur. En, sem betur fer, við mennirnir erum ekki að fara að þurfa að vita þessu stigi smáatriðum. Reyndar bara eins og síðasta sinn, þar sem við sem nýtt aftur, og aftur, og aftur, bygging frá mjög lágu stigi frumform eins núllum og sjálfur að hærra stigi hugtök eins tölustafa og bókstafa, og liti, og fleiri, Svo getum við sem forritari standa á herðum aðrir sem hafa komið á undan okkur og nota hugbúnað sem annað fólk hefur skrifað áður us-- þ.e. forrit sem heitir vistþýðendur. C er tungumál sem er yfirleitt unnin, sem þýðir breytt úr Kóðinn til vél númer. Einkum hvað þetta þýðir er að ef þú hefur fengið uppspretta númer sem þú sjálfur skrifar, eins og við bráðum mun í bara smá stund á skjánum, og þú vilt að umbreyta það að lokum að vél code-- þessir núll og sjálfur að Aðeins Mac eða PC understands-- þú hafir fengið fyrsta fæða þá kóðann í eins Inntak sérstakt forrit sem heitir þýðanda, framleiðsla sem við skal sjá er vél númer. Og reyndar síðasta sinn sem við ræddum um, í raun, í lok dags, lausnaleit. Þú hefur got inntak. Og þú hefur fengið framleiðsla. Og þú hefur fengið einhvers konar reiknirit í miðjunni. Reiknirit geta vafalaust verið framkvæmda í hugbúnaði, eins og við sáum með sauðakóðanum síðustu viku og eins og við munum sjá með raunverulegum kóða í þessari viku. Og svo þýðanda raun bara hefur sett af reiknirit inni af því að vita hvernig á að umbreyta sérstaka leitarorð, eins helstu og printf, og aðrir sem við bara sá í mynstri núll og Þeir sem Intel inni og öðrum örgjörva reyndar skilur. Svo hvernig gerum við þetta? Hvar fáum við þýðanda? Flest okkar hér hafa Mac eða PC. Og þú ert að keyra Mac OS eða Windows eða Linux eða Solaris, eða allir tala af öðrum stýrikerfi. Og reyndar, við gátum fara út á vefnum og sækja þýðanda fyrir Mac eða PC fyrir tiltekna stýrikerfið. En við viljum öll að vera á mismunandi síður, svo að segja. Við myndum hafa örlítið mismunandi stillingar. Og það myndi ekki virka öllum sama. Og reyndar þessa dagana margir af okkur ekki að nota hugbúnaður sem keyrir eingöngu á fartölvur okkar. Þess í stað notum við eitthvað eins og vafra sem gerir okkur kleift að fá aðgang að vefur-undirstaða umsókn í skýinu. Og síðar í þessari önn, við munum gera einmitt það. Við munum skrifa forrit eða hugbúnaður með code-- ekki C, en önnur tungumál eins Python og Javascript-- að keyra í skýinu. Og til að gera það, við sjálf á önn verður í raun að nota ský-undirstaða Umhverfi þekktur sem CS50 IDE. Þetta er vefur-undirstaða forritun umhverfi, eða samþætt þróun umhverfi, IDE, sem er byggð á topp sumir opinn uppspretta hugbúnaður sem kallast Cloud 9. Og við höfum gert nokkrar kennslufræði einfaldanir til það svo sem að fela ákveðnar aðgerðir í Fyrstu vikur sem við þurfum ekki, eftir sem þú getur sýna þá og gera mest allt sem þú vilt við umhverfið. Og það gerir okkur líka, að pre-setja í embætti ákveðin hugbúnað. Hluti eins svokölluðu CS50 bókasafn, sem við munum fljótlega sjá veitir okkur í C ​​með nokkrum viðbótar virkni. Svo ef þú ferð til, að lokum, CS50.io, þú verður beðinn um að skrá þig inn, og þegar þú gerir og búa reikningur fyrir frjáls, þú verður að vera fær um að fá aðgang að umhverfi sem lítur alveg eins og þetta. Nú, þetta er í sjálfgefna stillingu. Allt er gott og björt á skjánum. Mörg af okkur hafa venja af vinna á CS50 stykki sem er alveg seint í nótt. Og svo sumir af þú might vilja til að snúa það inn í næturstillingu, svo að segja. En, að lokum, hvað þú ert fara að sjá innan CS50 IDE er þriggja greinilegur areas-- svæði á vinstri þar skrár eru að fara að vera í ský, svæði á efst til hægri hvar númerið þitt er að fara að vera editable. Þú munt vera fær um að opna einstök flipa fyrir einhverju forriti sem þú skrifar þessa önn inni þess efst í hægra horninu. Og þá mest arcanely, og enn öflug, er að fara að vera svona hlutur á the neðst þekktur sem endastöðvar. Þetta er gamall skóli Command Line Interface, eða CLI, sem gerir þú þarft að framkvæma skipanir á computer-- í þessu tilfelli, tölva í cloud-- að gera hlutina eins saman númerið þitt frá frumkóða til vél númer, til að keyra forrit, eða að byrja þinn vefþjón, eða til að fá aðgang gagnagrunninn, og fjölda annarra aðferða sem við munum byrja að nota áður en langur. En til að komast þangað, við erum fara að í raun hafa að fara á netinu og byrja að spila. Og til að gera það, við skulum fyrst byrja tinkering með helstu, og skrifa helstu hluti af áætluninni. Og við skulum nota þessi virkni printf, sem við notuðum áður, einfaldlega að segja eitthvað. Svo hér er ég nú inni á CS50 IDE. Ég hef innskráður fyrirfram. Og ég sýnd fullur gluggann. Og svo, að lokum, þú of í komandi vandamál mun fylgja svipuðum skrefum sem mun veita netinu skjöl. Svo þú þarft ekki að hafa áhyggjur af hrífandi hvert lítið tæknilega skref sem ég hér í dag. En þú munt fá a skjár eins og þetta. Ég gerst að vera í næturstillingu. Og þú getur bjartari allt upp með því að slökkva næturstillingu. Og í lok sem dag, þú ert að fara að sjá þessir þrír helstu areas-- skrá Vafrinn í vinstri, kóðinn flipa upp efst, og endastöðvar neðst. Leyfðu mér að fara á undan og skrifa fyrstu áætlun mína. Ég ætla að preemptively fara í File, Spara, og vista þessa skrá mína eins hello.c. Reyndar, samkvæmt venju, hvaða forrit við skrifa sem er skrifað í C tungumál ætti að heita eitthvað punktur c, eftir venju. Þannig að ég ætla að nefna það hello.c, því Ég vil bara segja halló við heiminn. Nú ætla ég að stækka út og smellt á Save. Og allt sem ég hef hér nú er flipi þar sem ég get byrjað að skrifa kóðann. Þetta er ekki að fara að safna saman. Þetta þýðir ekkert. Og svo jafnvel þótt ég breytt þetta núllum og sjálfur, CPU er að fara að hafa ekki hugmynd hvað er að gerast í kring. En ef ég skrifa línur sem passa upp með conventions-- C C er veru, aftur, þetta Language-- með setningafræði eins þetta printf halló world-- og ég hef fengið ánægð með gera þetta með tímanum. Þannig að ég held ekki að ég gerði einhverjar prentvillur. En, undantekningarlaust, the mjög fyrstur skipti sem þú gerir þetta, þú verður. Og það sem ég ætla að gera gæti mjög vel ekki vinna fyrir þér í fyrsta sinn. Og það er fullkomlega í lagi, því núna að þú gæti bara séð allt fullt af nýjung, en með tímanum þegar þú fá kunnuglegur með þessu umhverfi, og þetta tungumál, og aðrir, þú munt byrja að sjá hluti sem eru annaðhvort rétt eða rangt. Og þetta er það sem kennslu félagar og auðvitað aðstoðarmenn fá svo góð í tímanum, er blettablæðingar mistök eða galla í kóðanum þínum. En ég halda að það eru engar villur í þessum kóða. Svo ég vil nú að keyra þetta forrit. Nú á minn eigin Mac eða PC, ég er í að venja af því að tvísmella táknum þegar ég þarf að keyra eitthvað forrit. En það er ekki fyrirmynd hér. Í þessu umhverfi, sem er CS50 IDE. Við erum með starfsleyfis Kerfið heitir Linux. Linux er minnir á annað stýrikerfi, almennt þekktur eins Unix. Og Linux er sérstaklega þekkt fyrir hafa Command Line Umhverfi, CLI. Nú erum við að nota sérstakt bragð af Linux kallast Ubuntu. Og Ubuntu er einfaldlega viss útgáfu af Linux. En þessi linux þessa dagana að gera í raun og veru koma með myndræna notandi tengi. Og sá við skyldir að nota hér er vefur-undirstaða. Þannig að þetta gæti litið jafnvel Smá öðruvísi frá einhverju þú sjálfur gætir hafa séð eða hlaupa í fortíðinni. Þannig að ég ætla að fara á undan núna og gera eftirfarandi. Ég hef vistað þessa skrá sem hello.c. Ég ætla að fara á undan og gerð clanghello.c Svo Clang fyrir C tungumál er þýðanda. Það er fyrirfram uppsett í CS50 IDE. Og þú getur alveg niður og setja þetta á eigin Mac eða PC. En, aftur, þú myndi ekki hafa allir the pre-stillingar gert fyrir þig. Svo nú, ég bara fara að hlaupa clanghello.c. Og nú eftir þetta setningafræði Hér mun að lokum átta sig bara þýðir að ég er í möppu eða skrá sem heitir Workspace. Þetta dollaramerki er bara samningur fyrir merkingu, slá skipanir þínar hér. Það er það sem er kallað hvetja, bara samkvæmt venju er dollaramerki. Og ef ég fer á undan núna og smella Sláðu ekkert virðist hafa gerst. En það er í raun gott. The minna sem gerist á skjárinn, þeim mun líklegra númerið þitt er að vera rétt, að minnsta kosti setningafræðilega. Þannig að ef ég vil keyra þetta program, hvað á ég að gera? Jæja, það kemur í ljós að sjálfgefið nafn samkvæmt venju fyrir forrit þegar þú tilgreinir ekki nefna að forritið þitt er bara a.out. Og þetta setningafræði líka, munt þú fá kunnuglegur með fyrir löngu. Dot rista bara þýðir, hey, CS50 IDE, keyra forrit sem heitir a.out það er inni núverandi möppu mína. Það punktur þýðir núverandi möppu. Og við munum sjá hvað aðrar slíkar raðir stafi þýðir fyrir löngu. Svo hér við fara, Enter, halló heimur. Og þú munt taka eftir, að það sem gerðist? Ekki aðeins gerði það prentað Halló heimur. Það flutti einnig bendilinn í næstu línu. Og hvers vegna var það? Hvað var númer sem við skrifaði áður að tryggja að bendillinn myndi fara niður í næstu línu? Það fyndna um a Tölvan er það bara að fara að gera bókstaflega hvað þú segja það að gera. Þannig að ef þú segir það að printf halló, komma, rúm, heimur, loka vitna, það er bókstaflega bara að fara að prenta þær stafi. En ég hafði þetta sérstaka karakter Í lokin muna, sviga n. Og það er það tryggt að eðli fór í næstu línu á skjánum. Í raun, láta mig fara og gera þetta. Leyfðu mér að fara á undan og eyða þessu. Nú, eftir að efst á skjánum mínum það er smá rautt ljós í flipann gefur til kynna, hey, þú hefur ekki vistað skrá. Þannig að ég ætla að fara á undan með stjórn S eða stjórn S, vista skrána. Nú það goes-- fór í moment-- grænn. Og nú er það aftur til bara að vera nálægt táknið. Ef ég hlaupa nú clanghello.c aftur, Slá, punktur rista, a.out, Enter, þú munt sjá að það starfaði enn. En það er að öllum líkindum lítið þrjótur. Núna, prompt-- vinnusvæði minn, og þá dollaramerki, og þá raunverulegur prompt-- mín er allt á sömu línu. Svo þetta vissulega fagurfræði galla, jafnvel ef það er ekki í raun rökrétt galla. Þannig að ég ætla að losa það sem ég gerði bara. Ég ætla að endursýning a.out. Tilkynning Ég hef bætt við NEWLINE staf aftur. Ég hef vistað skrána. Þannig að ég ætla að endursýning a.out, and-- dammit, padda, padda sem þýðir mistök. Svo villan er að jafnvel þó Ég bætti sviga n þar, aftur bjargaði, með tilvísun til-hljóp forritið, hegðun var sú sama. Hvers vegna myndi það vera? Ég vantar skref, ekki satt? Þessi lykill skref fyrr var að þú ert to-- þegar þú breytir kóðann þinn, það kemur í ljós einnig að keyra það í gegnum þýðanda aftur þannig að þú færð nýjan vél númer. Og vél númer, á núll og sjálfur, eru að fara að vera nánast eins, en ekki fullkomlega þannig, vegna þess að við þurfum, auðvitað, að ný lína. Svo til að laga þetta, ég ætla að þurfa að endursýning clanghello.c, slá, punktur rista, a.out. Og nú, halló heimur er aftur að þar sem ég búast við það til að vera. Svo er þetta allt fínt og gott. En a.out er ansi heimskur nafn fyrir a program, jafnvel þó að það gerist að vera, fyrir sögulegum ástæðum default-- þýðir samkoma framleiðsla. En láta mig fara á undan hér og að gera þetta öðruvísi. Ég vil minn Hello World program að í raun hægt að kalla halló. Þannig að ef það væri tákn á minn skrifborð, myndi það ekki vera a.out. Það væri hægt að kalla halló. Svo til að gera þetta, það kemur í ljós sem Clang, eins og margir programs, styður viðföng, eða fánar, eða rofa, sem einfaldlega hafa áhrif á hegðun þess. Nánar tiltekið, Clang styður þjóta o merkja, sem síðan tekur annað orð. Í þessu tilviki, ég ætla geðþótta, en sæmilega, kalla það halló. En ég gat kalla það nokkuð Ég vil, nema a.out, sem væri frekar utan lið. Og þá bara tilgreina nafn skrárinnar sem ég vil að safna saman. Svo nú jafnvel þótt í upphafi á stjórn ég hef enn Clang, í lok stjórn Ég hef enn filename, Ég hef nú þessi skipanalína rök, þessi fánar sem eru að segja, ó, við the vegur, framleiðsla-o, a skrá kallað halló, ekki sjálfgefið a.out. Þannig að ef ég högg Sláðu inn núna, ekkert virðist hafa gerst. Og enn, nú get ég gert punktur rista halló. Svo er það sama program. Núllum og sjálfur er eins í lok dags. En þeir eru í tvennt mismunandi files-- a.out, sem er fyrsta útgáfa og bara heimskulega nefnd, og nú halló, sem er mun meira sannfærandi nafn fyrir a program. En heiðarlega, ég er aldrei að fara að muna þetta aftur, og aftur, og aftur. Og í raun, eins og við að skrifa flóknari forrit, skipanir sem þú ert fara að skrifa eru að fara að fá jafnvel flóknari enn. Og svo ekki að hafa áhyggjur. Það kemur í ljós að menn áður okkur hafa áttað þeir líka hafði þetta nákvæmlega sama vandamál. Þeir líka ekki njóta þess að þurfa að slá nokkuð löng, Bogagöng skipanir, hvað þá muna þær. Og svo menn á undan okkur hafa gert önnur forrit sem gera það auðveldara að safna saman hugbúnað. Og reyndar eitt slíkt Forritið heitir Make. Þannig að ég ætla að fara á undan og gera þetta. Ég ætla að losa allt sem ég bara gerði á eftirfarandi hátt. Láta mig slá LS. Og þú munt taka eftir þrjú things-- a.out og stjarna, halló og stjarna, og hello.c. Vonandi, þetta ætti vera svolítið innsæi, svo miklu leyti sem fyrr var þar ekkert í þessu vinnuaðstöðu. Það var ekkert sem ég hafði búin til við byrjuðum bekknum. Og ég búin hello.c. Ég unnin þá það, og kallaði það a.out. Og svo ég tekið saman það aftur lítillega öðruvísi og kallaði hana halló. Þannig að ég hef þrjár skrár í þessari möppu, í þessari möppu sem heitir Workspace. Nú, ég get séð það sem vel ef ég súmma út í raun og veru. Ef ég súmma út hér og líta á sem efst til hægri handar horn, eins og lofað vinstri hönd hlið af skjánum er alltaf að fara að sýna þér hvað er í reikningnum þínum, hvað er inni CS50 IDE. Og það er þrír skrár þar. Svo ég vil losna við a.out og halló. Og eins og þú might ímynda innsæi, þér gæti raða böndunum smell eða hægri smella á þetta. Og þetta litla valmyndin birtist. Hægt er að sækja skrána, hlaupa það, forskoða það, hressa, endurnefna, eða hvað ekki. Og ég gæti bara eytt, og það myndi fara í burtu. En við skulum gera hlutina með stjórn lína fyrir nú, svo sem að fá þægilegt með þetta, og gera eftirfarandi. Ég ætla að fara á undan og fjarlægja a.out með því að slá bókstaflega rma.out. Það kemur í ljós, skipunina fjarlægja eða eyða eitthvað, er ekki fjarlægja eða eyða. Það er meira succinctly RM, bara til að spara þú sumir mínútum, og ýta á Enter. Nú erum við að fara að vera nokkuð cryptically fjarlægja reglulega skrá a.out. Ég í raun ekki vita hvað óreglulegur skrá td verið enn. En ég vil að fjarlægja það. Þannig að ég ætla að slá y fyrir já. Eða ég gæti slegið það út, og ýta á Enter. Og aftur, ekkert virðist gerast. En það er, almennt, gott. Ef ég tegund LS að þessu sinni, hvað ætti ég að sjá? Vonandi bara halló og hello.c. Nú, eins og innskot, munt þú taka þessa stjörnu, Stjörnu, það er í lok forrit minn. Og þeir eru líka að sýna sig í grænu. Það er bara þannig CS50 Ide er af cluing þér í því að það er ekki uppspretta merkjamál. Það er keyrsluskrá, a runnable forrit sem þú getur í raun að keyra með því að gera punktur rista, og þá er það nafn. Nú láta mig fara á undan og fjarlægja þetta RM halló, Enter, fjarlægja reglulega skrá halló, já. Og nú ef ég tegund LS, við erum aftur að hello.c. Reyndu ekki að eyða þinn raunveruleg uppspretta merkjamál. Jafnvel þó að það eru eiginleikar byggt inn CS50 IDE hvar þú getur farið í gegnum endurskoðun ferlinum og til baka í tíma ef þú óvart eyða eitthvað, gera að hafa í huga eins og á þessum áminningum já eða nei, af því sem þú vilt í raun að gera. Og ef ég fer upp á toppinn vinstri hönd horn hér, allt sem eftir er hello.c. Svo er bunches af þarna aðrar skipanir sem þú getur keyrt í heimi Linux, einn sem er, aftur, gera. Og við erum að fara að gera áætlun mín nú sem hér segir. Í stað þess að gera Clang, í stað þess að gera clang-o, Ég ætla að einfaldlega bókstaflega tegund, gera halló. Og nú eftir, er ég Ekki slá gera hello.c. Ég er að skrifa gera halló. Og þetta forrit Gera að koma með CS50 IDE og fleira yfirleitt með Linux, er forrit sem er að fara að gera forrit sem heitir Hello. Og það er að fara að gera ráð fyrir, samkvæmt venju, að ef þetta forrit er hægt að gera, það er að fara að vera úr uppsprettu merkjamál skrá endar í punktur c, hello.c. Þannig að ef ég högg Sláðu inn núna, eftir að stjórn sem fær framkvæma er í raun jafnvel lengur áður en áður. Og það er vegna þess að við höfum forstillt CS50 IDE til að hafa sumir viðbótar-lögun innbyggður í það við þurfum ekki bara enn, en fljótlega verður. En lykill hlutur til gera sér grein fyrir er nú hef ég Hello program. Ef ég tegund LS aftur, ég hafa halló program. Og ég get keyrt það með punktur rista a.out, nei, vegna þess að allt lið af þessum Æfingin var punktur rista halló. Og nú hef ég minn Hello World program. Svo áfram, við erum næstum alltaf bara að fara að safna saman áætlanir okkar using the stjórn gera. Og þá erum við að fara að keyra þá með punktur rista, og nafn forritsins. En grein fyrir hvað gera er að gera fyrir þú, er það er sjálft ekki þýðanda. Það er bara þægindi program sem veit hvernig á að kveikja á þýðanda að keyra þannig að þú sjálfur getur notað það. Hvað aðrar skipanir eru í Linux, og síðan CS50 IDE? Við munum fljótlega sjá að það er CD stjórn, Breyta Directory. Þetta gerir þér innan stjórn lína tengi að halda áfram, og aftur, og opna mismunandi möppur án þess að nota músina. LS við sáum, sem stendur fyrir listanum skrár í núverandi möppu. Gera Dir, getur þú sennilega byrja að álykta hvað þetta mun þýða now-- gera skrá, ef þú vilt búa til möppu. RM til að fjarlægja, RM Dir til fjarlægja directory-- og þessir, aftur, eru stjórn lína jafngildi um hvað þú gæti gert í CS50 IDE með músinni. En þú munt fljótlega finna að stundum er það bara mikið hraðar að gera hluti með lyklaborð, og að lokum mikið öflugri. En það er erfitt að halda því fram að eitthvað sem við höfum verið að gera hingað til er allt sem öflugur, þegar allt við höfum verið að segja er, halló heimur. Og í raun, ég hardcoded er orð halló heiminum í áætlun mína. Það er engin kraftur enn. Scratch var stærðargráðu meira áhugavert í síðustu viku. Og svo skulum fá það. Við skulum taka skref í átt að því að leið sum af þessum aðgerðum. Svo ekki eini hjartarskinn C koma með printf, og bunches af öðrum aðgerðum sum sem við munum sjá með tímanum, er það ekki gera það svo auðvelt rétt út um hliðið í að fá notandi inntak. Í raun einn af veikleikum af tungumálum eins og C, og jafnvel Java og enn aðrir, er að það er ekki gera það auðvelt að bara fá hlutina eins heiltölur frá notendum, eða strengir, orðum, og setningar, hvað þá hluti eins fleytitölum eða rauntölur með aukastafa, og í raun langur tölur, eins og við munum sjá fljótlega. Þannig að þetta listi yfir aðgerðir hér, þessir eru eins og önnur verk Scratch púsluspil sem við höfum fyrirfram uppsett í CS50 IDE sem við munum nota í nokkrar vikur sem þjálfun hjól toga og loksins taka þá burt og útlit undir hetta, ef til vill, á hvernig þessir hlutir eru til framkvæmda. En til að gera þetta, við skulum reyndar skrifa forrit. Leyfðu mér að fara á undan núna. Og ég ætla að búa til nýja skrá með því að smella á þennan litla plús, og smella nýja skrá. Ég ætla að vista þetta næst einn sem, við skulum segja, string.c, vegna þess að ég vil spila með strengi. Og band í C er bara röð af stöfum. Svo nú skulum fara á undan og gera eftirfarandi. Fela staðall IO.h-- og það kemur í ljós staðlaða IO, IO þýðir bara inntak og úttak. Svo kemur í ljós að þessi lína hér er hvað er nálægum okkur að nota printf. Printf, auðvitað, framleiðir framleiðsla. Svo í því skyni að nota printf, snýr það út að þú þarft að hafa þessa línu af kóða efst á skránni. Og við munum koma aftur til það sem raunverulega þýðir fyrir löngu. Það kemur í ljós að í allir C program ég skrifa, Ég hef fengið að byrja það með númer sem lítur svona út. Og þú munt taka CS50 IDE, og annað samþætt þróun umhverfi eins og það, eru að fara að reyna sem best þeir geta til að ljúka hugsun þína. Í raun, í smá stund síðan ef ég losa það sem ég gerði bara, högg ég inn. Ég lenti þá opinn krullað borsveif, Enter aftur. Og það lauk hugsun mína. Það gaf mér nýja línu, inndregin ekki síður fyrir gott stylistic ástæðum sem við munum sjá. Og þá er það gaf mér sjálfkrafa sem hrokkið Brace til að klára hugsun mína. Nú, er það ekki alltaf giska á hvað þú vilt gera. En í stórum hluta, það virkar spara þér nokkrar mínútum. Svo smá stund síðan, hljóp við þessa program-- halló, heimur, og síðan safna saman því, og þá hljóp það. En það er engin kraftur hér. Hvað ef við vildum gera eitthvað öðruvísi? Jæja, hvað ef ég vildi í raun og veru fá band frá notanda? Ég ætla að nota ráðgáta stykki heitir einmitt that-- fá band. Kemur í ljós í C að þegar þú vilt ekki að veita inntak á ráðgáta stykki, eða meira almennilega að virka, þú bókstaflega bara gera opinn sviga, nálægt svigi. Svo það er eins og það er nei hvítur kassi að slá inn. The segjum blokk áður hafði smá hvítur kassi. Við höfum ekki þessi hvítur kassi núna. En þegar ég kalla fá band, ég langar að setja niðurstöðuna einhvers staðar. Svo mjög algeng fyrirmynd í C er að hringja í aðgerð, eins og fá band hér, og þá geyma skilagildi hennar. Það er afleiðing af hennar átak í eitthvað. Og hvað er reisa í forritun, hvort sem er í grunni eða nú C, sem við Hægt er að nota til að raunverulega geyma eitthvað? Kallað það breyta, ekki satt? Og í grunni, eigum við ekki raunverulega sama hvað var að gerast í breytum. En í þessu tilfelli, gera við í raun. Ég ætla að segja streng. Og þá gæti ég hringt þetta eitthvað sem ég vil. Ég ætla að kalla það nafn, fær fá band. Og nú jafnvel ef þú ert smá að þessu, eftir að ég skortir sumum smáatriðum. Ég er að gleyma hálf-hreinsun. Ég þarf að klára þessa hugsun. Þannig að ég ætla að færa bendilinn minn, og högg semikomma þar. Og hvað hef ég gert bara? Í þessari línu af kóða, númer 5 í augnablikinu, Ég ætla að hringja fá band og engin inntak. Þannig að það er engin smá hvítt kassi eins og Save blokk hefur. Ég ætla bara að segja, hey, tölva, fá mér band. Merkið er í raun ekki jafnaðarmerki, í sjálfu sér. Það er verkefni rekstraraðila, sem þýðir, hey, tölva, færa verðmæti frá hægri yfir til vinstri. Og í vinstri, ég hef eftirfarandi. Hey, tölva, gefa mér string-- röð af stöfum. Og kalla þessi strengur nafn. Og ég er ekki einu sinni að kalla það nafn. Ég gæti kalla það, venjulega, eitthvað eins og S, líkt við notuðum i til hringja breytunni i. En nú þarf ég að gera eitthvað við það. Það væri ansi heimskur til reyna að setja saman þennan kóða, keyra þetta forrit, jafnvel þótt Ég fæ streng, vegna þess að það er enn bara að fara að segja halló heiminn. En hvað ef ég vil breyta þessu. Hvers vegna get ég ekki gera þetta? Prósent s, komma s. Og þetta er svolítið dulinn enn. Svo láta mig gera breytur mína skýrari. Leyfðu mér að nefna þessa breytu nafninu. Og við skulum sjá hvort við getum ekki stríða sundur hvað er að gerast hér. Svo á línu fimm, ég er að fá band. Og ég er að geyma þessi band, hvað notandinn hefur slegið í á lyklaborðinu hans, í breytu sem heitir Name. Og það kemur í ljós að printf er ekki bara taka eitt viðfang í tvöfaldur vitna, eitt inntak í gæsalöppum. Það getur tekið tvö eða þrjú, eða meira, svo að seinni eða þriðja eða fjórða, eru öll nöfn á breytum, eða sérstaklega gildi, sem þú vilt að stinga inn, virk, að strengur innan gæsalappa. Með öðrum orðum, hvað væri athugavert við þetta? Ef ég sagði bara halló nafn, sviga n, bjargaði skrá minn, unnin númerið mitt, og hljóp þetta, hvað myndi gerast? Það er bara að fara að segja, halló nafn, bókstaflega N-A-M-E, sem er eins konar heimskur vegna þess að það er ekkert annað í heiminum. Svo nokkuð innan gæsalappa er hvað bókstaflega fær prentuð. Þannig að ef ég vil hafa a tákn þar, Ég þarf reyndar að nota sumir sérstakur setningafræði. Og það kemur í ljós hvort þú lesið skjöl fyrir printf virka, það mun segja þér að ef þú notar prósent s, þú getur komið í stað gildi sem hér segir. Eftir Skilaboð eftir það tommumerki, þú einfaldlega skrifa nafnið á breyta sem þú vilt að stinga í í því formi númer, eða snið specifier, prósent s fyrir strengi. Og nú ef ég hef vistað skrána mína, Ég fer aftur niður í flugstöðinni minn. Og ég slá Make String, vegna þess, aftur, nafn þessa skrá sem ég valdi en er string.c. Þannig að ég ætla að segja Gera band, inn. Oh my góðvild, líta á alla mistök sem við höfum gert nú þegar. Og þetta is-- hvað, þetta er virkilega eins og sex, sjö lína program? Svo er þetta þar sem það getur mjög fljótt fá yfirþyrmandi. Þetta endastöðvar hefur nú bara regurgitated a gríðarstór tala af villa skilaboð. Víst, ég hef ekki meiri villa skilaboð en ég hef línur af kóða. Svo hvað er að gerast? Jæja, bestu leiðina að gera hvenær þú ekki lenda yfirgnæfandi Listi af villum eins og þessi, er fletta til baka, líta á stjórn þú hleypur bara, sem í mínu tilfelli er að gera band. Horfðu á hvað gera gerðum, og það er það langur Clang stjórn, ekkert stórmál þar. En rauður er slæmt. Grænn er að reyna að vera blíður og hjálpsamur. En það er samt slæmt, í þessu tilfelli. En hvar er það slæmt? String.c, lína fimm, eðli fimm. Svo er þetta bara algengt samningur. Eitthvað ristill eitthvað þýðir lína númer og eðli númer. Villa, notkun óskilgreinda Auðkenni band. Áttirðu staðall í? Svo, því miður, Clang er að reyna að vera hjálpsamur. En það er rangt, í þessu tilfelli. Nei, Clang, ég ætlaði ekki staðlað IO. Ég ætlaði að á línu eitt, já. En lína fimm er þetta einn hér. Og Clang ekki skil S-T-R-I-N-G. Það er óskilgreinda kennimerki, a Bæta hún bara hefur aldrei séð áður. Og það er vegna þess C, tungumálið við erum að skrifa kóðann í núna, hefur ekki breytur kallast strengi. Það er ekki sjálfgefið, stuðning eitthvað sem kallast streng. Það er CS50 stykki af hrognamál, en mjög venjulegur. En ég get lagað þetta eins og hér segir. Ef ég bæta við einni línu af kóða til the toppur af þessari áætlun, eru CS50.h, sem er annar skrá einhvers staðar inni CS50 IDE, einhvers staðar á harða diskinum, svo að segja, Ubuntu stýrikerfi sem ég er að keyra, það er skrá sem er að fara að kenna rekstri Kerfið hvað band er bara eins og staðall io.h er skrá í stýrikerfinu sem er að fara að kenna henni hvað printf er. Reyndar, við hefðum fengið mjög svipuð skilaboð ef IO hafði viðurkenndi staðal Io.h og reyndi að nota printf. Þannig að ég ætla að fara á undan og bara Taktu stjórn L til að hreinsa skjáinn minn. Eða þú getur slegið skýr og það verður bara hreinsa endastöðvar. En þú getur samt fletta aftur í tímann. Og ég ætla að endursýning Gera String. Yfir fingur minn í þetta sinn, Enter. Ó Guð minn, vann það. það sýnir mig langan dulinn skipun það er það sem Gaktu mynda um Clang, en engin villuskilaboð. Svo átta sig, jafnvel þótt þú gætir fengið alveg óvart með Fjöldi villuskilaboð, það bara gæti verið þetta pirrandi Cascading áhrif, þar Clang ekki skilja eitt, sem þýðir það þá skilur ekki næsta orð, eða næsta lína. Og svo chokes það bara á kóðann þinn. En festa gæti verið einfalt. Og svo alltaf einblína á mjög fyrstur lína af framleiðslu. Og ef þú ert ekki skilja það, bara líta fyrir leitarorð sem gæti verið vísbendingar, og lína númer, og eðli, þar sem mistök gæti verið. Nú láta mig fara á undan og sláðu punktur rista, band, inn. Hm, það er ekki að segja halló neitt. Hvers vegna? Jæja, muna, hvar er það í gangi? Það er líklega fastur í augnablikinu í lykkju, ef þú vilt, á línu sex, því fá band við hönnun, skrifað af CS50 starfsfólk, er bókstaflega ætlað að bara sitja þar að bíða, og bíða, og bíða streng. Allt er átt við með því að band er mannlegt inntak. Svo þú veist hvað? Leyfðu mér að fara á undan. Og bara á hegðun, láttu mig skrifa nafnið mitt, Davíð, inn. Nú hef ég meira dynamic forrit. Það sagði, halló David. Ef ég fer á undan og keyra þetta aftur, láta mig reyna að segja Zamila nafn, inn. Og nú höfum við öflugt forrit. Ég hef ekki erfitt dulmáli heiminn. Ég hef ekki erfitt dulmáli nafn, eða David, eða Zamila. Nú er það miklu meira eins og áætlanir við vitum, þar sem ef það tekur inntak, það framleiðir aðeins öðruvísi framleiðsla. Nú, þetta er ekki sú besta notandi reynsla eða UX. Ég hlaupa the program. Ég veit ekki hvað ég á að gera, nema ég lít reyndar á eða muna kóðann. Svo skulum gera notanda upplifa a lítill betri með einföldustu hluti. Leyfðu mér að fara aftur í þetta program, og einfaldlega segja printf. Og láta mig fara á undan og segja nafn, ristli, og rúm, og þá hálf-hreinsun. Og bara fyrir spörk, engin bakslag n. Og það er vísvitandi, vegna þess að ég vil ekki hvetja til að fara í næstu línu. Ég vil, í stað þess, að gera þetta, gera streng að endurþýða númerið mitt inn nýja vél númer punktur rista band. Ah, þetta er miklu fallegri. Nú veit ég reyndar hvað tölva vill að ég geri, að gefa honum nafn. Þannig að ég ætla að fara á undan og sláðu í Rob, inn, og halló, Rob. Svo, gera sér grein fyrir, að þetta er enn, í lok dagsins, aðeins níu lína forrit. En við höfum tekið þessar barn stíga. Við skrifaði eina línu sem við voru kunnugir, printf, halló heimur. Þá erum við undid smá af því. Og við notuðum í raun fá band. Og við kastað þessi gildi í breytu. Og svo fórum við á undan og bæta það frekar með þriðju línu. Og þetta endurtekningu ferli skrifa hugbúnað er sannarlega lykillinn. Í CS50, og í lífinu almennt, þú ættir almennt ekki setjast niður, hafa forrit í huga, og reyna að skrifa allt fjandinn hlutur í einu. Það mun óhjákvæmilega leiða í leiðinni meira villur en við sjálf sást hér. Jafnvel ég, til þessa dags, stöðugt gera aðrar heimskur mistök, eru í raun erfiðara mistök sem eru erfiðara að reikna út. En þú verður að gera fleiri mistök meira línur af kóða sem þú skrifar allt í einu. Og svo þetta starf af, skrifa smá kóða að þú ert ánægð með, safna saman það, keyra það, prófa það almennt, þá fara skráin svo bara eins og við haldið layering og layering síðustu viku, byggja frá einhverju mjög einfalt að eitthvað flóknari, gera það sama hér. Ekki setjast niður og reyna að skrifa heilt vandamál. Raunverulega taka þessi barn stíga. Nú eru strengir ekki allir að gagni við sig. Við myndum reyndar helst eins og að hafa eitthvað annað í tól okkar. Svo skulum gera reyndar einmitt það. Leyfðu mér að fara á undan núna og svipa upp aðeins öðruvísi program. Og við munum kalla þetta int.c fyrir heiltölu. Ég ætla að sama skapi eru CS550.h. Ég ætla að fela staðlaða IO. Og það er að fara að vera nokkuð algeng í þessum fyrstu dögum bekknum. Og ég ætla að tilbúin sjálfur með meginvirkni. Og nú í stað þess að fá band, við skulum fara á undan og fá int. Við skulum kalla það ég, og kalla það að fá int, loka parens, hálf-hreinsun. Og nú skulum gera eitthvað með það, printf. Við skulum segja eitthvað eins halló, sviga n, komma i. Þannig að ég er nokkuð mikið herma það sem ég gerði bara smá stund síðan. Ég er með tákn hér. Ég hef komma ég hér, vegna þess að ég vil að stinga i inn í þessi tákn. Svo skulum fara á undan og reyna gerð þessarar áætlunar. Skráin heitir int.c. Þannig að ég ætla að segja, gera int, inn. Ó Guð minn, en ekkert stórmál, ekki satt? Það er rangt. Það er nokkur dæmi um setningarleg mistök hér svo að forritið getur ekki vera saman inni int.c, línu sjö, eðli 27, villa snið tilgreinir tegund bleikju stjörnu, hvað sem er. En rök gerð er int. Svo hér líka, við erum ekki að fara to-- jafnvel þó í dag er mikið af efni, við erum að fara að yfirbuga þig með algerlega sérhver lögun af C, og forritun almennt, í bara þessum fyrstu vikum. Þannig að það er oft að fara að vera hrognamál sem þú ert ekki kunnuglegur. Og í raun, bleikju stjarna er eitthvað við erum að fara að koma aftur til í viku eða einu tveimur er. En nú, við skulum sjá hvort við getum flokka orð sem ég þekki. Formats-- svo heyrðum við snið specifier, sniði kóða áður. Það er kunnuglegt. Type-- en rök hefur int. Bíddu, ég er int. Kannski prósent s raun hefur einhverja skilgreinda merkingu. Og reyndar er það. Heiltala, ef þú vilt printf að skipta henni, þú ert í raun að nota öðruvísi sniði specifier. Og þú myndir ekki vita þetta nema einhver sagt þér, eða þú hefðir gert það áður. En prósent i er það er hægt að almennt eru notaðar í printf fyrir plugging í heiltölu. Þú getur líka notað prósent D fyrir aukastaf heiltölu. En ég er gott og einfalt hér. Þannig að við munum fara með það. Nú láta mig fara á undan og endursýning gera int, Enter. Það er gott, engar villur. Dot rista int-- lagi, slæmur reynslu notenda, vegna þess að ég hef ekki sagt mig hvað skal gera. En það er allt í lagi. Ég er smitandi á fljótlegan hátt. Og nú langar mig að fara á undan og slá í Davíð, OK, Zamila, Rob. OK, þannig að þetta er gott. Í þetta sinn, ég er að nota aðgerð, ráðgáta stykki, sem heitir Fá Int. Og það kemur out-- og við munum sjá þessa síðar í term-- CS50 starfsfólk hefur innleitt fá band á þann hátt að það mun aðeins líkamlega fá band fyrir þig. Það hefur innleitt get 'int í þannig að það verður bara fá heiltölu fyrir þig. Og ef þú, manna, ekki vinna ekki, það er bókstaflega bara að fara að segja reyna aftur, reyna aftur, reyna aftur, bókstaflega sitja þar lykkja, þar þú skuldbinda með einhverjum töfrum númer, eins og 50, og halló 50. Eða ef við keyra þetta aftur og tegund í 42, halló 42. Og svo the fá INT virka inni í því ráðgáta stykki er nóg rökfræði, nógu hugsun, að reikna út, hvað er orð? Og hvað er tala? Aðeins samþykkja, að lokum, tölur. Svo kemur í ljós að þetta er ekki allt sem svipmikill. hingað til. Svo, yay, síðast þegar við fór ansi hratt í framkvæmdarreglunum leiki og fjör, og listaverkum í grunni. Og hér erum við að innihald með Hello World, og halló 50. Það er ekki allt sem hvetjandi. Og reyndar þessir fyrstu dæmi mun taka nokkurn tíma að pallinum upp í eftirvæntingu. En við höfum svo miklu meira stjórna nú, í raun. Og við erum að fara að mjög fljótt að byrja layering ofan á þessa undirstöðu frumform. En fyrst skulum skilja hvað takmarkanir eru. Í raun einn af þeim hlutum Scratch ekki auðveldlega skulum gera er í raun að líta undir hetta, og skilja hvað tölva er, hvað það getur gert, og hvað takmarkanir hennar eru. Og reyndar það skortur á skilningur, hugsanlega, langtíma getur leitt til eigið mistakes-- skrifa okkar galla, skrifa óörugg hugbúnað sem fær tölvusnápur á einhvern hátt. Svo skulum taka nokkur skref í átt að skilja þetta svolítið betur eftir leið, segja, eftirfarandi dæmi. Ég ætla að fara á undan og framkvæma raunverulegur fljótur forrit sem heitir Adder. Eins og við skulum bæta nokkrar tölur saman. Og ég ætla að fara að kóða sumum hornum hér, og bara að afrita og líma þar sem ég var áður, bara svo við getum fengið að fara fyrr. Svo nú hef ég fengið undirstöðu upphaf af a program sem heitir Adder. Og við skulum fara á undan og gera þetta. Ég ætla að fara á undan og segjum intx fær fá int. Og þú veist hvað? Við skulum gera betri reynslu notenda. Svo skulum bara segja x er, og í raun hvetja notandann til að gefa okkur x. Og þá láta mig fara á undan og segja, printf hvernig óður y er, í þetta sinn von tvö gildi frá notanda. Og þá skulum fara bara á undan og segja, printf, summan af x og y eru. Og nú vil ég ekki að gera prósent s. Ég vil gera prósent i, sviga n, og þá stinga í summan gildi. Svo hvernig get ég farið að gera þetta? Veistu hvað? Ég veit hvernig á að nota breytur. Leyfðu mér að lýsa bara nýjan, Int z. Og ég ætla að taka giska hér. Ef það eru samasemmerki í þessu tungumál, kannski ég get bara gert x plús Y, svo lengi sem ég enda mitt hélt með hálf-hreinsun? Nú get ég farið aftur hingað niður, stinga í z, klára þessa hugsun með hálf-hreinsun. Og við skulum sjá nú, ef þessi röð af lines-- x er fá int. Y er að fá int. Bæta x og y, geyma verðmæti í z-- Svo aftur, muna jafnan merki er ekki jöfn. Það er verkefni frá hægri til vinstri. Og við skulum prenta út að summa af X og Y er ekki bókstaflega z, En hvað er inni í z. Svo skulum gera Adder - Nice, engin mistök í þetta sinn. Punktur rista Adder, slá, x er að fara að vera 1. Y er að fara að vera 2. Og summan af x og y eru 3. Svo er það allt í lagi og gott. Svo þú myndi ímynda sér að stærðfræði ætti að vinna í áætlun eins og þetta. En þú veist hvað? Er þetta breytu, lína 12, jafnvel nauðsynlegt? Þú þarft ekki að komast í vana á bara að geyma hluti í breytum bara vegna þess að þú getur. Og í raun, það er yfirleitt talið slæmt hönnun ef þú ert að búa til breytu, sem heitir z í þessu tilfelli, geyma eitthvað í það, og þá strax að nota það, en aldrei aftur. Hvers vegna gefa eitthvað að nafn eins z ef þú ert bókstaflega að fara að nota það Málið aðeins einu sinni, og svo aðlægan hvar þú bjóst það í fyrsta sæti, svo nálægt í skilmálar af línum af kóða? Svo þú veist hvað? Það kemur í ljós að C er nokkuð sveigjanleg. Ef ég vil í raun og veru að stinga í gildi hér, Ég þarf ekki að lýsa nýja breytu. Ég gæti bara stinga í x plús Y, vegna þess að C skilur tölur og stærðfræði rekstraraðila. Svo ég get einfaldlega sagt, að gera þetta stærðfræði, x plús Y, hvað sem gildin eru, stinga leiðir heiltala í strengsins. Þannig að þetta gæti verið, þó Aðeins ein lína styttri, betri hönnun, betri forrit, vegna þess að það er minna númer, því minna fyrir mig að skilja. Og það er líka bara hreinni, að því marki sem við erum ekki kynna ný orð, ný tákn, eins og z, jafnvel þótt þeir í raun ekki þjóna mikið af ákveðnum tilgangi. Því miður, stærðfræði er ekki allt að áreiðanlegar stundum. Við skulum fara á undan og gera þetta. Ég ætla að fara á undan núna og gera eftirfarandi. Við skulum gera printf, prósent i, auk prósent Ég skal vera prósent i, sviga n. Og ég ætla að gera this-- xyx plús y. Þannig að ég ætla bara að fara að umrita þetta örlítið öðruvísi hér. Leyfðu mér að gera bara fljótur geðheilsu stöðva. Aftur, við skulum ekki fá á undan okkur. Gera adder, punktur rista naðra. x er 1, y er 2, 1 plús 2 er 3. Svo er það gott. En við skulum flækt þetta núna dálítið, og búa til nýja skrá. Ég ætla að hringja í þetta einn, segja, ints, plural fyrir heiltölur. Leyfðu mér að byrja þar sem ég var í smá stund síðan. En nú skulum gera nokkrar aðrar línur. Leyfðu mér að fara á undan og gera eftirfarandi, printf, prósent i, mínus prósent i, er prósent i, komma x, komma Yx mínus y. Þannig að ég ætla að gera örlítið öðruvísi stærðfræði þar. Skulum gera annað. Svo prósent i sinnum prósent Ég er prósent i, sviga n. Við skulum stinga í X og Y og X sinnum Y. Við munum nota Stjörnumerki á tölvan að tímum. Þú notar ekki x. x er breytu nafn hér. Þú notar stjörnuna fyrir margföldun. Skulum gera eitt. Printf prósent I, skipt eftir prósent i, er prósent i, sviga n. XY deilt með y-- svo þú notað skástrikið í C að gera skiptingu. Og við skulum gera eitt annað. Afgangurinn af prósent i, skipt eftir prósent i, er prósent i. xy-- og nú afgangurinn er það sem er afgangs. Þegar þú reynir að deila a nefnarann ​​í teljaranum, hversu mikið er afgangs sem þú getur ekki skipta út? Þannig að það er í raun ekki, endilega, tákn við höfum notað í grunnskóla fyrir þetta. En það í C. Þú getur segja x leifastofn Y, þar sem þetta prósentumerki í þessum context-- confusingly þegar þú ert inni af gæsalöppum, inni á printf, prósent er notað sem sniði specifier. Þegar þú notar prósent utan að í stærðfræðitákni, það er leifastofn rekstraraðila fyrir mát arithmetic-- fyrir tilgangi okkar hér, bara þýðir, hvað er Afgangurinn af x deilt með y? Svo x deilt með y er x skástrik y. Hvað er afgangurinn af x deilt með y? Það er x mod y, sem forritari myndi segja. Svo ef ég gerði engin mistök hér, láttu mig fara á undan og gera ints, fleirtölu, gott, og punktur rista ints. Og við skulum fara á undan og gera, við skulum segja, 1, 10. Allt í lagi, 1 plús 10 er 11, athuga. 1 mínus 10 er neikvæð 9, athuga. 1 sinnum 10 er 10, athuga. 1 deilt með 10 is-- OK, við munum sleppa því einn. Afgangurinn af 1 deilt með 10 er 1. Það er rétt. En það er padda hér. Þannig sá sem ég setti minn afhenda, ekki rétt. Ég meina, það er nálægt 0. 1 deilt með 10, þú veist, ef við erum skera nokkrar horn, viss, það er núll. En það ætti í raun að vera 1/10, 0,1 eða 0,10, 0,1000, eða svo framvegis. Það ætti í raun ekki að vera núll. Jæja, það kemur í ljós að tölvan er gera bókstaflega það sem við sögðum henni að gera. Við erum að gera stærðfræðina svona x deilt með y. Og bæði x og y, á línum af kóða fyrr, eru heiltölur. Þar að auki, á línu 15, við erum segja printf, hey, printf stinga í heiltala, stinga í heiltala, stinga í integer-- sérstaklega x, og þá er Y, og þá er x deilt með y. x og y eru ints. Við erum góð þar. En hvað er x deilt með x? x deilt með y ætti að vera, stærðfræðilega, 1/10, eða 0,1, sem er rauntala, rauntala hafa, hugsanlega, Komma. Það er ekki heil tala. En hvað er næst heiltala að 1/10, eða 0.1? Já, það er góður af núll. 0.1 er svona mikið. Og 1 er þetta mikið. Svo 1/10 er nær 0 en það er til einn. Og svo hvað C er að gera fyrir us-- konar vegna þess að við sagt það to-- er stýft að tölu. Það tekur gildi, sem aftur er átti að vera eitthvað eins og 0.1000, 0 og svo framvegis. Og það er stýft allt eftir kommu þannig að þetta allt efni, vegna þess að það er ekki passa í hugmyndinni um heiltala, sem er bara tala eins og neikvætt 1, 0, 1, upp og niður, kastar það burt allt eftir kommu vegna þess að þú getur ekki passa Komma í heiltölu samkvæmt skilgreiningu. Svo svarið hér er núll. Svo hvernig gera við lagað þetta? Við þurfum aðra lausn allt saman. Og við getum gert þetta, eins og hér segir. Leyfðu mér að fara á undan og búa til nýja skrá, þetta heitir floats.c. Og vista það hér í Sama skrá, float.c. Og láta mig fara á undan og afrita sumir af þeim kóða frá fyrr. En í stað þess að fá int, við skulum gera þetta. Gefðu mér fleytitölu gildi heitir x. þar sem fleytitölu gildi er bara bókstaflega eitthvað með fleytitölu. Það er hægt að færa til vinstri, til hægri. Það er rauntala. Og láta mig hringja ekki fá int, en fá fljóta, sem einnig var meðal matseðlinum af valkostum í C250 safninu. Við skulum breyta y til að fljóta. Svo verður þetta fá fljóta. Og nú, við viljum ekki að stinga í ints. Það kemur í ljós að við þurfum að nota prósent F fyrir fljóta, prósent F fyrir fljóta, og nú vista það. Og nú, krossleggja fingur, gera fljóta, gott, punktur rista fljóta. x er að fara að vera einn 1. Y Er að fara að vera 10 aftur. Og gott, OK mín viðbót er rétt. Ég var að vonast til að fá meiri, en ég gleymdi að skrifa það. Svo skulum við fara og laga þessa rökrétt villa. Við skulum fara á undan og grípa eftirfarandi. Við verðum bara að gera smá afrita og líma. Og ég ætla að segja mínus. Og ég ætla að segja sinnum. Og ég ætla að segja skipt. Og ég ætla ekki að gera modulo, sem er ekki eins germane hér, deilt með f, og oft plus-- OK, við skulum gera þetta aftur. Gera fljóta, punktur rista fljóta, og 1, 10, and-- gott, nei, OK. Þannig að ég er hálfviti. Svo er þetta mjög algengt í tölvunarfræði að gera heimskur mistök eins og þetta. Fyrir kennslufræðilegum tilgangi, það sem ég vildi virkilega að gera var breytt vísindi hér að plús, mínus, að stundum, og að skipta, eins og þú vonandi eftir á þessari æfingu. Svo nú skulum koma aftur saman á þessu program, gera punktur rista fljóta. Og í þriðja sinn, við skulum sjá hvort það uppfyllir væntingar mínar. 1, 10, slá, já, OK, 1.000, deilt með 10.000, er 0,100000. Og það kemur í ljós að við getum stjórnað hversu margar Tölurnar eru eftir þeim aukastöfum. Við munum raun. Við munum koma aftur að því. En nú, í raun, stærðfræði er rétt. Svo aftur, hvað er takeaway hér? Það kemur í ljós að í C, eru ekki aðeins bara strings-- og, í raun, Það eru í raun ekki, vegna þess að við bæta þeim við CS50 bókasafn. En það eru ekki bara ints. Það eru einnig flýtur. Og það kemur í ljós fullt af öðrum gögnum tegundir líka, að við munum nota fyrir löngu. Skrúfjárn út ef þú vilt einn eðli, ekki a band af stöfum, þú getur notað bara bleikju. Kemur í ljós að ef þú vilt bool, a Boolean gildi, satt eða bara rangar, takk fyrir CS50 bókasafn, höfum við bætt C í bool gögn tegund eins og heilbrigður. En það er einnig til staðar í mörg önnur tungumál eins og heilbrigður. Og það kemur í ljós að stundum þarf stærri tölur þá koma sjálfgefið með ints og flotum. Og í raun, tvöfaldur er fjöldi sem notar ekki 32 bita, en 64 bita. Og lengi lengi er tala sem notar ekki 32, bitar en 64 bitar, hver um sig, fyrir fleytitölu gildi og heiltölur, í sömu röð. Svo skulum reyndar nú sjá þetta í aðgerð. Ég ætla að fara á undan hér og svipa upp eitt annað forrit. Hér ætla ég að fara á undan og ekki eru cs50.h. Og láta mig fara, eru stöðluð IO.h. Og þú munt taka eitthvað angurvær er að gerast hér. Það er ekki lit erfðaskrá hlutina í á sama hátt og það gerði áður. Og það kemur í ljós, það er vegna þess að ég hafa ekki gefið Málið skráarheiti. Ég ætla að hringja í þetta einn sizeof.c, og högg Vista. Og taka eftir hvað gerist minn mjög hvítt númer gegn því svarta bakgrunn. Nú, að minnsta kosti er það sumir fjólublátt þar. Og það er setningafræði hápunktur. Það er vegna þess, einfaldlega, hef ég sagði IDE hvaða tegund af skrá það er með því að gefa það a nafn, og sérstaklega skrá eftirnafn. Nú, við skulum fara á undan og gera þetta. Ég ætla að fara á undan og mjög einfaldlega prenta út following-- bool er prósent LU. Við munum koma aftur til sem í bara smá stund. Og þá er ég að fara að prenta stærð bool. Og nú, bara til að spara sjálfur nokkurn tíma, ég er að fara að gera í heild fullt af þeim í einu. Og, sérstaklega, ég ætla að breyta því í bleikju og bleikju. Þetta eitt, ég ætla að breyta að tvöfalda og tvöfalda. Þetta eitt, ég ætla að breyta að flotholt og fljóta. Þetta eitt, ég ætla að breyting á int og int. Og þetta, ég ætla til að skipta yfir lengi lengi. Og það er enn að taka löngu, lengi lengi. Og þá loks, ég gaf sjálfur einn of margir, band. Það kemur í ljós að í C, það er sérstaka rekstraraðili heitir Stærð sem er bókstaflega að fara að, þegar hlaupa, segja okkur stærð hver af þessum breytum. Og þetta er leið, nú, við getum tengst baka til umræðu í síðustu viku gagna og framsetning. Leyfðu mér að fara á undan og taka saman Stærð punktur slash stærð. Og við skulum sjá. Það kemur í ljós að í C, sérstaklega á CS50 IDE, sérstaklega á stýrikerfi Ubuntu, sem er 64-bita stýrikerfi kerfi í þessu tilfelli, a bool er að fara að nota eitt bæti af plássi. Það er hvernig stærð er mæld, ekki í bita, en í bæti. Og muna að eitt bæti er átta bita. Svo bool, jafnvel þó að þú tæknilega þarf aðeins 0 eða 1, það er lítið eyðslusamur hvernig við höfum innleitt hana. Það er í raun að fara að nota heild byte-- svo allir núll, eru kannski allt sjálfur, eða eitthvað svoleiðis, eða bara einn 1 meðal átta bitum. A bleikju, á meðan, er notað fyrir staf eins og ASCII staf á síðustu viku, er að fara að vera einn staf. Og það synchs upp með hugmynd okkar það að vera ekki meira en 256 bits-- frekar, synchs upp með það að vera ekki lengur en 8 bitar, sem gefur okkur eins og margir eins 256 gildum. A tvöfaldur er að fara að vera 8 bytes eða 64 bita. A fljóta er 4. Int er 4. A langur, langur er 8. Og band er 8. En ekki hafa áhyggjur óður í það. Við erum að fara að afhýða aftur þetta lag. Það kemur í ljós, strengir getur vera lengri en 8 bæti. Og reyndar höfum við skrifað strengir þegar, halló heimur, lengur en 8 bæti. En við munum koma aftur til sem í bara smá stund. En taka burt hér er eftirfarandi. Sérhver tölva hefur aðeins endanlegt magn af minni og pláss. Þú getur aðeins geymt svo margir skrár á Mac eða PC. Þú getur aðeins geymt svo mörg forrit í RAM í gangi í einu, endilega, jafnvel með sýndarminni, því þú hefur endanlegt magn af RAM. Og bara til að picture-- ef þú hefur aldrei opnað fartölvuna eða panta auka minni fyrir tölvu, þú gæti ekki vita að inni á tölvunni þinni er eitthvað sem lítur svolítið eins og þetta. Svo er þetta bara algengt fyrirtæki sem heitir Crucial sem gerir RAM fyrir tölvur. Og RAM er þar forrit lifa á meðan þeir eru að keyra. Svo á hverjum Mac eða PC, þegar þú tvöfaldur smelltu á áætlun, og það opnar upp, og það opnar einhverja Word skjal eða eitthvað svoleiðis, það geymir það tímabundið í RAM, því RAM er hraðar en harða diskinn þinn eða storkuhamur þinn diskur. Svo það er bara hvar forrit fara að lifa þegar þeir eru að keyra, eða þegar skrár eru notuð. Svo þú ert hluti sem líta svona inni á fartölvu, eða örlítið stærri hluti inni skjáborðinu þínu. En lykillinn er að þú verður aðeins tímabundið fjöldi af þessum hlutum. Og það er bara endanlegt magn af vélbúnaður situr á þessum borðinu rétt hér. Svo, vissulega, við getum ekki geymt óendanlega langur tölur. Og enn, ef þú hugsa til baka til grunnskóla, hversu margir tölustafir getur þú þarft að hægri á kommu? Fyrir þessi efni, hversu margir tölustafir getur þú þarft að vinstri á kommu? Really, óendanlega margar. Nú, við mennirnir gætu aðeins vita hvernig á að bera milljónir, og milljarða, trilljón, og billjarða og quintillion. Og ég er að þrýsta á takmörk mín understanding-- eða my-- ég skil tölur, en minn framburður tölum. En þeir geta fengið óendanlega stór með óendanlega margir Tölunum vinstra megin eða til hægri kommu. En tölvur hafa aðeins endanlegt magn af minni, endanlegt fjöldi smára, a tímabundið fjöldi ljósaperur inni. Svo gerist það þegar þú keyrir út af plássi? Með öðrum orðum, ef þú hugsa til baka til síðustu viku þegar við ræddum um tölur sig vera fulltrúa í tvöfaldur, ráð fyrir að við höfum fengið þetta 8-bita gildi hér. Og við höfum sjö 1 og einn 0. Og geri ráð fyrir að við viljum til að bæta 1 til þetta gildi. Þetta er mjög stór tala núna. Þetta er 254, ef ég man stærðfræði frá síðustu viku til hægri. En hvað ef ég breyti sem lengst til hægri 0 til 1? Í heil tala, af Auðvitað verður átta 1 er. Þannig að við erum enn góðar. Og það líklega táknar 255, þó að allt eftir samhengi það gæti í raun tákna neikvæð tala. En meira um það seinna. Þetta er eins og það er um eins hátt og ég get treyst. Nú, það er aðeins 8 bita. Og Mac minn, örugglega, er leið meira en 8 bitar af minni. En það þýðir að hafa endanlegt. Svo sömu rök gildir, jafnvel þótt við hafa meira af þessum sjálfur á skjánum. En hvað gerist ef þú ert geyma þetta númer, 255, og þú vilt að telja 1 bita hærri? Þú vilt fara úr 255 í 256. Vandamálið er auðvitað, er að ef þú byrja að telja á núlli eins og í síðustu viku, þú getur ekki treyst eins hátt eins 256, hvað þá 257, hvað þá 258, m því hvað gerist þegar þú bætir við 1? Ef þú gerir gamla grunnskóla nálgun, þú setja 1 hér, og þá er 1 plús 1 2, en það er í raun núll, bera þig 1, bera 1, bera 1. Öllum þessum hlutum, þessi 1 er, fara á núll. Og þú vindur upp, já, eins og einhver benti á 1 á vinstri hönd. En allt sem þú getur í raun sjá og passa í minni er bara átta 0, sem er að segja á einhverjum tímapunkti ef þú, tölvu, reyndi að telja nógu hátt upp, ert þú að fara að vefja í kring, það virðist, núlli, eða kannski jafnvel neikvæð tölur, sem eru jafnvel lægri en núll. Og við getum konar sjá þetta. Leyfðu mér að fara á undan og skrifa a raunverulegur fljótur program hér. Leyfðu mér að fara á undan og skrifa forrit sem heitir Yfirfall. Fela CS50.h, ma staðall IO.h-- ó, Ég missti í raun setningafræði auðkenning mín. Svo skulum spara þetta sem overflow.c. Og nú int helstu void-- og áður en langt, munum við koma aftur til að útskýra hvers vegna við höldum að skrifa int helstu ógilt. En nú, við skulum gera bara það, að taka það sem sjálfsagðan hlut. Við skulum gefa mér int, og frumstilla hana 0. Við skulum þá gera int ég fá zero-- reyndar, við skulum gera óendanlega lykkju og sjá hvað gerist. En satt, þá skulum prenta út n er prósent i, sviga n, stinga í n. En nú, við skulum gera n fær n plús 1. Svo í öðrum orðum, á hverju endurtekning þessarar óendanlega lykkju, við skulum taka gildi n er, og bæta 1 við það, og þá geyma niðurstöðu aftur í n á vinstri. Og í raun, við höfum séð setningafræði örlítið eins og þetta, í stuttu máli. A kaldur bragð er staðinn skrifa allt þetta út, þú getur í raun segja að n plús jafngildir 1. Eða ef þú vilt virkilega að vera fínt, þú getur sagt n plús plús hálf-hreinsun. En þessir síðarnefndu tveir eru bara hvað við myndum kalla nokkur dæmi um setningarleg sykur í fyrsta hlutur. The fyrstur hlutur er skýr, algerlega fínn, algerlega rétt. En þetta er algengara, ég segi. Þannig að við munum gera þetta fyrir réttlátur a augnablik. Við skulum gera nú flæða, sem hljómar frekar líkur, punktur rista flæða. Við skulum sjá, n er að fá ansi stór. En við skulum hugsa, hversu stór getur n að fá? n er int. Við sáum áðan með stærð dæmi sem int er fjögur bæti. Við vitum frá síðustu viku, fjögur bæti er 32 bita, vegna 8 sinnum 4, sem er 32. Það er að fara að vera 4 milljarðar króna. Og við erum upp til 800.000. Þetta er að fara að taka að eilífu til telja eins hátt og ég mögulega get. Þannig að ég ætla að fara á undan, Eins og þú might áður en langt, og lemja Control C-- hreinskilnislega, Control C, a einhver fjöldi, þar Control C yfirleitt þýðir að hætta. Því miður, vegna þess að þetta er í gangi í skýinu, Stundum er ský spúandi svo mikið efni, svo mikið framleiðsla, það er að fara að taka smá stund fyrir hjálpina mína til að komast að ský. Svo jafnvel þótt ég lenti Control C nokkrar sekúndur síðan, þetta er örugglega hlið Áhrif óendanlega lykkju. Og svo í slíkum tilvikum, við erum að fara að yfirgefa það vera. Og við erum að fara að bæta við öðru endastöðvar hérna með plús, sem er auðvitað ekki svona, þar sem það er enn að hugsa. Og við skulum fara á undan og vera svolítið meira sanngjarnt. Ég ætla að fara á undan og gera Þetta bara endanlegum oft. Við skulum nota fyrir lykkju, sem ég vísaði til áðan. Gerum þetta. Gefðu mér annan breytilegan int i fær 0. Ég er minna en, segjum, 64 ég ++. Og nú langar mig að fara á undan og prenta út n er prósent i, komma n. Og þá n- þetta er samt að fara að taka að eilífu. Gerum þetta. n fær n sinnum 2. Eða við gætum verið fínt og gera oft jafngildir 2. En við skulum bara segja n jafngildir sjálft, sinnum 2. Með öðrum orðum, í þessu Ný útgáfa af forritinu, Ég vil ekki að bíða að eilífu frá eins 800.000 4 milljarða. Við skulum bara fá þetta aftur með. Við skulum tvöfalda reyndar n í hvert skipti. Sem muna, tvöföldun er andstæða hafa, að sjálfsögðu. En þar síðustu viku sem við höfum eitthvað aftur og aftur, og aftur, frábær fljótur, Tvöföldun mun vafalaust fá okkur frá 1 til stærsta mögulegt gildi sem við getum treyst til með int. Svo skulum gera einmitt þetta. Og við munum koma aftur til þetta áður en langur. En þetta, aftur, er bara eins og að endurtaka blokk í grunni. Og þú munt nota þetta fyrir löngu. Þetta þýðir bara telja frá núlli upp til, en ekki jafn, 64. Og á hverri ítrun þetta lykkja, bara halda incrementing i. Svo ég ++ - og þetta almenna reisa á línu 7 er bara frábær algeng leið endurtaka nokkrar línur af númer, sumir tala af sinnum. Hvaða línur af kóða? Þessar hrokkið axlabönd, eins og þú kann að hafa tína ax frá nú, þýðir, að gera eftirfarandi. Það er í eins grunni, þegar það hefur gulu blokkir og aðrir litir sem eins konar faðma eða knúsa aðrar blokkir. Það er það sem þessi hrokkið axlabönd eru að gera hér. Þannig að ef ég fékk setningafræði minn right-- þig Hægt er að sjá gulrót tákn í C hætti það er hversu oft ég var að reyna að leysa þetta vandamál. Svo skulum losna við þessi einu að öllu leyti, og loka þessi gluggi. Og við munum nota nýjan. Gera flæða, punktur rista flæða, Enter, allt í lagi, það lítur illa í fyrstu. En við skulum fletta aftur í tímann, vegna þess að ég gerði þetta 64 sinnum. Og taka í fyrsta skipti, n er 1. Í öðru lagi tími, n er 2, þá 4, síðan 8, þá 16. Og það virðist að um leið og Ég fæ að u.þ.b. 1 milljarður, ef ég tvöfalda hana aftur, það ætti að gefa mér 2 milljörðum. En það kemur í ljós, það er rétt á cusp. Og svo það yfirfullt raun int frá 1 milljarði að u.þ.b. neikvæð 2 milljarða, vegna heiltala, ólíkt tölurnar við voru gefnu síðustu viku, getur verið bæði jákvæð og neikvæð í raun og í tölvu. Og svo að minnsta kosti eitt af þeim bitar er í raun stolið. Svo við í raun aðeins hafa 31 bita, eða 2 milljarða möguleg gildi. En nú, takeaway er alveg einfaldlega eru hverjar þessar tölur og hvað stærðfræði er, eitthvað slæmt gerist á endanum, því að lokum að þú ert að reyna að permute bita eitt of mörgum sinnum. Og þú ferð í raun frá öllum 1 er að kannski allt 0 er, eða kannski bara einhver önnur mynstur sem það greinilega, allt eftir samhengi, má túlka sem neikvæð tala. Og svo það virðist hæsta I geta treyst í þessu tiltekna forriti er aðeins um það bil 1 milljarður. En það er algjör lausn hér. Veistu hvað? Leyfðu mér að skipta úr int til lengi lengi. Og láta mig fara á undan hér og say-- ég ætla að hafa að breyta þessu til óundirritaður lengi. Eða, við skulum sjá, ég man aldrei sjálfur. Við skulum fara á undan og gera flæða. Nei, það er ekki það, LLD, þakka þér. Svo stundum Clang getur verið gagnlegt. Ég vissi ekki að muna hvað snið specifier var fyrir lengi lengi. En reyndar, Clang sagði mér. Grænn er einhvers konar gott, þýðir samt að þú gerðir mistök. Það er giska að ég ætlaði LLD. Svo láta mig taka það ráð, langur langur heiltala, vista það. Og láta mig endursýning það, punktur rista flæða, Enter. Og nú hvað er flott er þetta. Ef ég skruna aftur í tímann, byrjum við enn telja á sama place-- 1, 2, 4, 8, 16. Takið eftir, fáum við öll leið upp að 1 milljarð. En þá fáum við örugglega til 2 milljarða. Þá fáum við 4 milljarða, þá 8 milljarða, 17 milljarða. Og við fara hærra, og hærra, og hærra. Að lokum, þetta líka, hlé. Að lokum, með lengi lengi, sem er 64-bita gildi, ekki 32-bita gildi, ef þú telja of hár, þú settir 0. Og í þessu tilfelli, gerast við að endað með neikvæðri tölu. Svo er þetta vandamál. Og það kemur í ljós að þetta Vandamálið er ekki allt sem yfirnáttúrulegt. Jafnvel þó að ég hef vísvitandi völdum það með þessum mistökum, það kemur í ljós við sjáum það eins konar öllu kringum okkur, eða að minnsta kosti sumum af okkur að gera. Svo í Lego Star Wars, ef þú hefur einhvern tíma spilað leikinn, það kemur í ljós að þú getur farið í kring brjóta það upp í LEGO heiminum, og safna mynt, fyrst og fremst. Og ef þú hefur einhvern tíma spilað þessi leikur alltof mikill tími, eins og þetta ónefndum einstakling hér gerði, heildarfjölda af mynt sem þú getur safna er, það virðist, 4 milljarðar króna. Nú, með það er í raun ávöl. Svo LEGO var að reyna að halda hlutum notendavænt. Þeir vildu ekki gera það nákvæmlega 2 til 32 máttur, á síðustu viku. En 4 milljarða er ástæða. Það virðist, byggt á þessum upplýsingum, það LEGO, og fyrirtæki sem gerði þessa raunverulegt hugbúnað, ákvað að hámarksfjöldi mynt notandi getur safnast er reyndar 4 milljarða, vegna þess að þeir kusu í númerið þeirra að nota ekki lengi lengi, greinilega, en bara heiltala, óundirritaður heiltala, aðeins jákvæð heiltala sem max gildi er gróflega það. Jæja, hér er annað fyndið einn. Svo í leiknum Civilization, sem sumir af þú gætir verið kunnugt, með það kemur í ljós að árum síðan var padda í þessum leik þar ef þú spilað hlutverk um Gandhi í leiknum, í stað þess að hann sé mjög pacifist, í staðinn var ótrúlega, ótrúlega árásargjarn, í sumum tilvikum. Einkum þann hátt að Civilization verk er að ef þú, leikmaður, samþykkja lýðræði, þinn árásargirni skora fær decremented af tveimur, svo mínus mínus, og síðan mínus mínus. Svo þú draga 2 frá Raunveruleg iterating þitt. Því miður, ef iterating er upphaflega 1, og þú draga 2 frá henni eftir upptöku lýðræði sem Gandhi hér gæti hafa gert, vegna þess að hann var mjög passive-- 1 á mælikvarða árásargirni. En ef hann samþykkir lýðræði, þá hann fer frá 1 til neikvæðrar 1. Því miður, þeir voru nota óundirritaður tölur, sem þýðir að þeir sem fengu jafnvel neikvæð tölur eins og þeir voru jákvæðir. Og það kemur í ljós að jákvæð ígildi neikvæð 1, í dæmigerðum tölvuforrit, er 255. Svo ef Gandhi tekur lýðræði hefur og því árásargirni skora hans minnkað, það rúlla í raun í kringum til 255 og gerir hann mest árásargjarn eðli í leiknum. Svo þú getur google upp á þetta. Og það var reyndar að slysni forritun galla, en það er slegið nokkuð Þekkt síðan. Það er allt skemmtilegt og sætur. Meira ógnvekjandi er þegar raunverulegur Real World tæki, og ekki leikur, hafa þessar sömu galla. Í raun, bara ári síðan grein kom út um Boeing 787 Dreamliner. Og greinin fyrst litið les smá Bogagöng. En það sagði þetta, a hugbúnaður varnarleysi í Boeing Ný 787 Dreamliner þota hefur hugsanlega að valda flugmenn að missa stjórn á loftfarið, hugsanlega í miðju flugi, FAA embættismenn varaði flugfélög nýlega. Það var ákvörðun sem líkan 787 flugvél sem hefur verið knúið samfellt í 248 daga getur tapað öllum riðstraum, AC, rafmagn vegna þess að rafall stjórna einingar, GCUs, samtímis að fara í ekki öruggur háttur. Það er góður af að tapa mér. En orðsending fram, OK, nú fékk ég það, ástand stafaði af hugbúnaði gegn innri til rafall stjórn einingar sem mun flæða eftir 248 dagar samfellt völd. Við erum að gefa út þetta eftir að koma í veg tap af öllu AC rafmagns vald, sem gæti leitt í tapi stjórn flugvélarinnar. Svo, bókstaflega, það er einhver heiltala, eða samsvarandi gögn tegund, sem notuð eru í hugbúnaði í raun flugvél að ef þú halda flugvél þína á nógu lengi, sem virðist getur verið að ræða ef þú ert bara að keyra þá stöðugt og aldrei í sambandi flugvél þína, það virðist, eða láta rafhlöður þess að deyja, mun að lokum telja upp, og upp, og upp, og upp, og upp og upp. Og, eftir eðli, a endanlegt magn af minni mun flæða, veltingur aftur til núll eða nokkur neikvæð gildi, aukaverkun af, sem er frighteningly alvöru veruleika að flugvélin gæti þurft að endurræsa, á áhrifaríkan hátt, eða gæti fallið verri, eins og það flýgur. Svo þessar tegundir af málefnum eru enn með okkur, even-- þetta var 2015 grein, allt meira ógnvekjandi þegar þú ert ekki endilega skilja, meta eða sjá þeir konar villur. Svo kemur í ljós að það er eitt annað slæmt um gögn framsetning. Það kemur í ljós að jafnvel flýtur eru konar gölluð, því fljóta líka, Ég lagði eru 32 bita eða kannski 64 ef þú notar tvöfaldan. En það er samt tímabundið. Og aflinn er að ef þú getur setja óendanlega fjölda af tölum eftir kommu, það er engin leið að þú getur táknað allt mögulegt tölur sem við vorum kennt í grunnskóla getur verið í heiminum. A tölva, í raun, hefur að velja hlutmengi af þeim tölum til að tákna nákvæmlega. Nú, the tölva getur umferð kannski svolítið, og geta leyfa þér að u.þ.b. verslun allir tala þú gætir hugsanlega vilja. En bara innsæi, ef þér hafa endanlegt fjölda bita, þú getur aðeins permute þeim í svo mörgum takmörkunum háð vegu. Svo þú getur ekki hugsanlega nota endanlegan fjölda á uppröðun bita, mynstur núllum og sjálfur, til að tákna óendanlega Fjöldi tölum, sem bendir til þess að tölvur gætu mjög vel að vera að ljúga að okkur stundum. Í raun, við skulum gera þetta. Leyfðu mér að fara aftur í CS50 IDE. Leyfðu mér að fara á undan og búa til smá forrit kallaði ónákvæmni, til að sýna að tölvur eru reyndar ónákvæm. Og láta mig fara á undan og byrja með sumir af þeim kóða frá áður, og nú bara að gera eftirfarandi. Leyfðu mér að fara á undan og gera printf, prósent f sviga n, 1 deilt með 10. Með öðrum orðum, við skulum kafa í dýpra að 1/10, eins og 1 og deilt með 10. Víst, tölva getur táknað 1/10. Svo skulum fara á undan og gera ónákvæmni. Látum okkur sjá. Format tilgreinir tegund manna. En rök eru int. Hvað er í gangi? Ó, áhugavert, svo er það kennslustund lærður frá áður. Ég er að segja, hey, tölva sýna mér fljóta með prósent f. En ég ætla að gefa henni 2 ints. Svo kemur í ljós, get ég lagað þetta í nokkra vegu. Ég gæti bara snúið einn í 1.0, og 10 í 10,0, sem myndi reyndar hafa áhrif að breyta þá inn floats-- enn vonandi sama númer. Eða það kemur í ljós að það er eitthvað við munum sjá aftur áður en langur. Þú gætir kastað tölurnar. Þú getur, með þennan svigasegð tjáningu, getur þú sagt, hey, tölva, taka þetta 10, sem ég veit er int. En meðhöndla það, vinsamlegast, eins og það er fljóta. En þetta finnst óþarflega flókið. Að því er varðar okkar í dag, við skulum bara bókstaflega gera þá fleytitölum með kommu, eins og þetta. Leyfðu mér að fara á undan og endursýning, gera ónákvæmni, gott, punktur rista ónákvæmni, inn. OK, við erum að leita vel. 1 deilt með 10, í samræmi við minn Mac hér er reyndar 0,100000. Nú, ég var kennt í grunnskóla þar ætti að vera óendanlegur fjöldi af 0 áratugnum. Svo skulum að minnsta kosti reyna að sjá eitthvað af þeim. Það kemur í ljós að printf er lítið áhugamaður samt en við höfum verið að nota. Það kemur í ljós að þú þarft ekki að tilgreina bara prósent, f, eða bara prósent i. Þú getur í raun að tilgreina sumir stjórna möguleikar hér. Sérstaklega, ég er að fara að segja, hey, printf, í raun sýna mér 10 aukastafi stig. Svo það lítur svolítið undarlegt. En þú segir prósent, punktur, hversu mörg númer þú vilt sjá eftir kommu, og svo f fyrir íbúð, bara vegna þess að það er hvað skjöl segir. Leyfðu mér að fara á undan og vista það. Og eftir líka, ég er að fá þreyttur á retyping hlutina. Þannig að ég ætla bara að setja upp og niður arrow á takka mínum hér. Og ef ég halda hitting upp, þú getur séð allar skipanir sem ég gerði, eða rangt gert. Og ég ætla að fara á undan núna og reyndar ekki að nota það, greinilega. Gera ónákvæmni, punktur slash imprecision-- svo það sem ég var að kenna í GRADE SCHOOL tékka út. Jafnvel þótt ég prenta það til 10. aukastaf setur það reyndar er 0,10000. En þú veist hvað? Við skulum fá smá gráðugur. Við skulum segja, eins og sýnt mér 55 bendir á eftir aukastaf. Við skulum virkilega að taka þetta forrita út fyrir a snúningur. Leyfðu mér að endurgerð það með gera ónákvæmni, punktur rista, ónákvæmni. Og hér við fara. barnæsku var lygi. Apparently, 1 deilt með 10 er örugglega 0.100000000000000005551115123-- Hvað er í gangi? Jæja, það kemur í ljós, ef þú eins konar líta langt út í undirliggjandi framsetning af þessu númer, reyndar það er ekki nákvæmlega 1/10, eða 0,1 og óendanlega fjölda núllum. Nú, hvers vegna er það? Jæja, jafnvel þótt þetta sé einfalt númer til að okkur mönnum, 1 deilt með 10, það er enn einn af óendanlega mörgum tölur sem við gætum hugsað upp. En tölva getur einungis tákna endanlegum margir So tölur. Og svo, í raun, hvað tölvan er að sýna okkur er næst hennar samræmingu við fjölda Við viljum trúa er 1/10, eða í raun 0,10000 auglýsingu infinitum. Frekar, þó, þetta er eins nálægt og það er hægt að fá. Og reyndar, ef þú lítur undir hetta, eins og við erum hér með að leita 55 Tölunum eftir aukastaf, sjáum við í raun og veru að veruleika. Nú sem innskot, ef þú hefur alltaf séð movie-- flest ykkar líklega haven't-- en Superman 3 fyrir nokkrum árum, Richard Pryor í raun skuldsett þetta veruleika í fyrirtæki hans til að stela mikið þáttum og þáttum úr smáaurarnir, vegna þess að company-- sem ég man, það hefur verið while-- var í meginatriðum henda burt eitthvað sem passaði ekki í hugmyndinni um sent. En ef þú bætir upp öll þessi pínulítill, pínulítill, pínulítill tölur aftur, og aftur, og aftur, þú getur, eins og í máli hans, að gera gott magn af peningum. Það sama hugmynd var morðingi burt við nýleg, en samt nú eldri Myndin, sem heitir Office Space, þar sem krakkar í þeirri bíómynd, gerði það sama, ruglaður það upp alveg, endaði með því að of mikið peningar á bankareikning þeirra. Það var allt mjög grunsamlegt. En í lok dagsins, ónákvæmni er allt í kringum okkur. Og það líka, getur verið frighteningly málið. Það kemur í ljós að Superman 3 og Office Space hliðar, þar getur verið nokkur mjög raunveruleg world afleiðingar af raunveruleika ónákvæmar framsetning gagna að jafnvel við mennirnir til í dag ekki endilega skilja eins vel og við ætti, eða muna svo oft sem við ættum. Og reyndar Eftirfarandi myndband er frá a líta á sumir mjög raunverulegur veröld afleiðingar af hvað gerist ef þú líkar ekki ónákvæmni sem getur gerst í tölum framsetning. [Vídeó spilun] -Computers, Við höfum öll komið til að samþykkja sem oft pirrandi vandamál sem fara með them-- galla, veirur, og hugbúnaður galli, fyrir lítil verð að borga fyrir þægindi. En í Hátækni og hár hraði her og pláss program forrit, minnsti vandamálið getur eflast í hörmung. 4. júní 1996, vísindamenn undirbúið að ráðast unmanned Ariane 5 eldflaug. Það var vopnaður vísindalegar gervihnettir hannað til að koma nákvæmlega hvernig jarðar segulmagnaðir Hefur samskipti sviði með sól vindur. The eldflaugar var byggt fyrir Evrópu Space Agency, og lyfti burt frá verksmiðju sinni á strönd Franska Gvæjana. -á Um 37 sekúndur inn flug, þeir fyrst tók eitthvað var að fara úrskeiðis. Stútar voru segulnagli í leið þeir ættu í raun ekki. Around 40 sekúndur inn í flugið, greinilega ökutækið var í vandræðum. Og það er þegar þeir gerðu ákvörðun um að eyðileggja það. Öryggi svið liðsforingi, með gríðarlega hugaður, ýtt á hnappinn, blés upp eldflaugar, en það gæti verða hættulegir á öryggi almennings. -Þetta Var mær ferð á Ariane 5. Og eyðileggingu hennar tók setja vegna galla innbyggð í hugbúnaði eldflaug er. -The Vandamál á Ariane var að það væri að tala sem þarf 64 bita til að tjá. Og þeir vildu breyta það að 16-bita númer. Þeir gera ráð fyrir því að fjöldi var aldrei að fara að vera mjög stór, að flestir þeir tölunum í 64-bita númer voru zeroes. Þeir voru rangar. -The Vanhæfni einn hugbúnaður program til að samþykkja konar númer mynda af annar var á rót bilun. Hugbúnaðarþróun hafði orðið mjög kostnaðarsamt hluti af nýrri tækni. The Ariane eldflaugar hafa verið mjög vel, svo mikið af hugbúnaði búin að það var líka er notað í Ariane 5. -The Grunn vandamálið var að Ariane 5 var hraðari, flýta hraðar. Og the hugbúnaður hafði ekki grein fyrir því. -The Eyðileggingu á eldflaug var gríðarlegur fjárhagslega hörmung, allt vegna mínútu hugbúnaður villa. En þetta var ekki í fyrsta tími vefhegðunargögn vandamál hafði stríða nútíma eldflaugar tækni. -Í 1991, við upphaf á fyrsta Persaflóastríðinu, Patriot Missile upplifað svipaða konar af fjölda viðskipti vandamál. Og þar af leiðandi, 28 manns, 28 bandarískir hermenn, voru drepnir, og um 100 aðrir særðir, þegar Patriot, sem átti til að vernda gegn komandi scuds, mistókst að skjóta eldflaugum. -Þegar Írak ráðist Kúveit og Ameríku hóf Desert Storm í byrjun 1991, Patriot Missile rafhlöður voru á vettvangi til að vernda Saudi Arabíu og Ísrael frá Írak Scud eldflaugum árás. The Patriot er bandarískt miðlungs-svið yfirborð til loft kerfi, framleitt af Raytheon fyrirtækinu. -The Stærð Patriot interceptor sjálft er um það bil 20 fet að lengd. Og það vega um 2.000 pund. Og það ber warhead af um, Ég held að það sé um það bil 150 pund. Og Warhead sjálft er a hár sprengiefni, sem hefur brot kringum það. The hlíf á warhead er sem ætlað er að bregðast við eins og buckshot. -The Eldflaugar eru gerðar fjögur á íláti, og eru flutt af hálf kerru. -The Patriot gegn eldflaugum kerfi fer aftur að minnsta kosti 20 ár núna. Það var upphaflega hannað sem loftvarnir eldflaugum að skjóta niður óvini flugvélar. Í fyrsta Persaflóastríðinu, Þegar að stríð kom með, herinn vildi að nota það til að skjóta niður scuds, ekki flugvélar. Írak Air Force var ekki svo mikið vandamál. En herinn var áhyggjur scuds. Og svo þeir reyndu að uppfæra Patriot. -Intercepting Óvin eldflaugum ferðast á Mach 5 var að fara að vera krefjandi nóg. En þegar Patriot var hljóp í þjónustu, her var ekki kunnugt um að Írak breytingar sem gerðar scuds þeirra næstum ómögulegt að ná. -Hvað Gerðist er scuds sem voru að koma í voru óstöðug. Þeir voru wobbling. Ástæðan fyrir þessu var Írakar, í því skyni að fá 600 kílómetra út af 300 kílómetra svið eldflaugum, tók þyngd út að framan warhead. Þeir gerði Warhead léttari. Svo nú er Patriot að reyna að koma á Scud. Og mest af þeim tíma, Yfirgnæfandi meirihluti af the tími, það myndi bara fljúga með Scud. Þegar Patriot kerfisrekandi áttaði Patriot ungfrú markmiði sínu, þeir detonated warhead Patriot er til að forðast hugsanlegar mannfall ef það var leyft að falla til jarðar. -Það Var það sem flestir sáu, þessir stóru Fireballs í himininn, og misskilið sem rekur í Scud warheads. -Although Í nótt skies, Patriots virtist til að vera með góðum árangri eyðileggja Scuds á Dhahran, það gæti verið engin mistök um frammistöðu sína. Það, Patriot er ratsjá kerfi misst utan um komandi Scud, og aldrei hleypt vegna að hugbúnaður galli. Það var á Ísraelsmenn sem fyrst uppgötvað að því lengur sem kerfið var á, því meiri tími misræmi varð, vegna þess að klukku embed í tölvunni kerfisins. -Um Tveimur vikum áður en harmleikur í Dhahran, Ísraelar tilkynnt Defense Department að kerfið var að tapa tíma. Eftir um það bil átta klukkustundir eða gangi, þeir tekið eftir því að kerfið var að verða orðinn ónákvæmari. The Defense Department brást við með því segja öllum Patriot rafhlöður að ekki láta kerfin á í langan tíma. Þeir sögðu aldrei hvað löngu was-- átta klukkustundir, 10 klukkustundir, 1.000 klst. Enginn vissi. -The Patriot rafhlaða setti á kastalann á Dhahran og gölluð innri hennar Klukkan hafði verið á yfir 100 klst á nótt 25. febrúar. -Það Fylgst tími til nákvæmni um tíunda hluta úr sekúndu. Nú, tíundi úr sekúndu er áhugavert númer, vegna þess að það er ekki hægt að gefið upp í tvöfaldur nákvæmlega, sem þýðir að það er ekki gefið upp nákvæmlega í hvaða nútíma stafrænum tölvu. Það er erfitt að trúa. En nota þetta sem dæmi. Við skulum taka númer eitt þriðjung. Einn þriðji er ekki hægt að gefið upp í aukastaf nákvæmlega. Einn þriðji er 0,333 fara á fyrir óendanleika. Það er engin leið til að gera það með alger nákvæmni í aukastaf. Það er nákvæmlega eins konar vandamál sem gerðist í Patriot. Því lengur sem kerfið hljóp, sem verri tími villa varð. -Eftir 100 klukkustunda starfrækslu, sem villa í tíma var aðeins um þriðjungur úr sekúndu. En hvað varðar miða a eldflaugum ferðast á Mach 5, það leiddi til mælingar villa á yfir 600 metra. Það væri banvæn villa fyrir hermenn á hvað gerðist er Scud ræst var greind með viðvörunarkerfi gervihnöttum og þeir vissu að Scud var koma í almenna átt þeirra. Þeir vissu ekki hvar það var að koma. -Það Var nú upp á ratsjá hluti af the Patriot kerfisins verja Dhahran til að finna og halda utan um komandi eldflaugum óvinarins. -The Ratsjá var mjög klár. Það væri í raun að fylgjast með stöðu Scud, og þá spá hvar það líklega myndi vera næsta skipti sem ratsjá send púls út. Það var kallað svið hliðið. -Þá, Þegar Patriot ákveður nægur tími hefur samþykkt að fara aftur og athuga næsta staðsetningu fyrir þessa greind hlut, það fer aftur. Svo þegar það fór aftur til röng staður, sér það þá ekki hlut. Og það ákveður að það var engin hlut, það var falskur uppgötvun, og lækkar lagið. -The Komandi Scud hvarf frá ratsjá skjár. Og sekúndum síðar, það skellur inn í kastalann. The Scud drap 28, og var síðast einn rekinn á fyrsta Persaflóastríðinu. Tragically, sem uppfærð hugbúnaður kom á Dhahran daginn eftir. Hugbúnaðurinn galli hafði verið fastur, lokun einn kaflinn í órótt Saga Patriot eldflaugum. [Vídeó spilun] DAVID J. Malan: Svo er þetta allt að segja að þessi málefni flæða og ónákvæmni eru allt of raunverulegt. Svo hvernig did við hér? Við byrjuðum við bara að tala um printf. Aftur, þessi aðgerð sem prentar eitthvað á skjáinn, og við kynntum eftir nokkrar aðrar aðgerðir frá svokölluðum CS50 er bókasafn. Og við munum halda áfram að sjá þetta í tæka tíð. Og við, sérstaklega, notað fá band, og fá int, og nú einnig að fá fljóta, og enn aðrir enn munum við lenda og nota okkur fyrir löngu. En stundum, hafa við séð nú þegar þörf að geyma hvað þessir virka hönd aftur? Þeir afhenda okkur aftur a band, eða int eða fljóta. Og stundum þurfum við að setja það band, eða int, eða fljóta, einhvers staðar. Og til að geyma þá hluti, muna bara eins og í grunni, höfum við breytum. En ólíkt í grunni, í C við höfum raunverulegan tegundir af variables-- gögnum tegundir, fleiri generally-- meðal þeirra, a band, int, a fljóta, og þessir aðrir enn. Og svo þegar við lýsa breytur í C, við verðum að lýsa gagnatög okkar. Þetta er ekki eitthvað sem við munum þarft að gera síðar í önn eins og við umskipti til öðrum tungumálum. En nú þurfum við til fyrirfram fyrirfram, útskýra tölvuna hvaða tegund breytu við viljum það til að gefa okkur. Nú, á meðan, til að prenta þeir konar gagnatög, Við verðum að segja printf hvað ég á að búast við. Og við sáum prósent S fyrir strengi, og prósent ég fyrir heiltölur, og nokkrum öðrum nú þegar. Og þeir eru einfaldlega kröfur og fyrir sjónræna framsetningu af þeim upplýsingum. Og hver af þessum getur raunverulega vera parametrized eða klip á einhvern hátt, ef þú vilt frekari stjórn gerð framleiðsla sem þú færð. Og í raun, það kemur í ljós að ekki aðeins er það sviga n fyrir nýja línu. Það er eitthvað annað sem kallast sviga r fyrir a flytja aftur, sem er meira í ætt við gamla skólanum ritvél, og einnig Windows notuð í mörg ár. Það er skástrik t fyrir tabs. Skrúfjárn út, að ef þú vilt tommumerki inni streng, muna að við höfum notað tommumerki tvöfaldur tilvitnun á vinstri og hægri endar á strengi okkar svona langt. Það virðist að rugla hlutina. Ef þú vilt setja tvöfalda tilvitnun í the miðja af a string-- og örugglega, það er ruglingslegt að sjá. Og svo þú þarft að flýja, svo að tala, tvöfalda tilvitnun með eitthvað eins, bókstaflega, sviga tommumerki. Og það er nokkur annar enn. Og við munum sjá meira af þeim í raun notkun áður en langt. Svo skulum nú umskipti frá gögn og framsetningu, og tölur rekstraraðila, allt sem gaf okkur bygging blokkir sem að spila. En nú skulum í raun að gefa okkur restin af orðaforða sem við höfðum þegar í síðustu viku með grunni með því að taka a líta á sumir annar smíðar í C-- ekki þeim öllum. En hugmyndir sem við erum um að sjá í raun bara að leggja áherslu á þýðingu frá eitt tungumál, Scratch, til annars, C. Og með tímanum munum við taka upp fleiri verkfæri fyrir tól okkar, svo að segja, setningafræðilega. Og reyndar munt þú sjá að hugmyndirnar eru nú frekar kunnuglegt frá síðustu viku. Svo skulum gera þetta. Við skulum fara á undan og svipa upp forrit sem í raun notar nokkrar tjáning, a Boole-segð. Leyfðu mér að fara á undan hér og búa til nýja skrá. Ég kalla þetta condition.c. Leyfðu mér að fara á undan og fela í CS50 bókasafn. Og láta mig fara á undan og eru staðall io.h fyrir aðgerðir okkar, og printf, og fleira í sömu röð. Leyfðu mér að gefa mér að staðlaðan af int helstu ógilt, en skýring munum við koma aftur til í framtíðinni. Nú láta mig fara á undan og gefa sjálfur int gegnum þinn fá int. Þá láta mig fara á undan og gera þetta. Mig langar að segja ef ég er less-- skulum greina á milli jákvæð, neikvæð, eða núll gildi. Svo ef ég er minna en núll, láttu mig bara hafa þetta forrit einfaldlega að segja, neikvæð, sviga n, annað ef ég er hærri en núll. Nú er ég að sjálfsögðu að fara að segja printf jákvæð, sviga n. Og svo annað if-- ég gæti gert þetta. Ég gæti gert ef ég jafngildir 0. En ég myndi vera að gera á kosti ein mistök þegar. Muna að merkið er ekki jöfn, eins og við mennirnir vita það. En það er verkefni rekstraraðila. Og við viljum ekki að taka 0 á rétt og setja það í I á vinstri. Svo til að forðast þetta rugl, eða kannski misnotkun á samasemmerkinu, menn ákváðu fyrir nokkrum árum að í mörgum forritunarmálum þegar þú vilt að athuga fyrir jafnrétti milli vinstri og hægri, þú notar í raun jafngildir jafn. Svo þú högg samasemmerkinu tvisvar. Þegar þú vilt úthluta úr hægri til vinstri, nota þú einn jafnan tákn. Þannig að við gætum gert this-- annað ef ég jafngildir jafnt núlli. Ég gæti þá farið og opna hrokkið axlabönd mínum, og segja, printf 0, sviga n, gert. En muna hvernig þessir gafflar í veginum geta unnið. Og í raun, bara hugsa um rökfræði. Ég er tala. Það er heiltala, sérstaklega. Og það þýðir að það er að fara að vera minna en 0, eða hærri en 0, eða 0. Svo er það góður af þessu skyn sjálfgefið mál. Og svo við gætum bara eins Scratch, undanþágur með annað hvort, og bara segja annað. Rökrétt, ef þú er forritari veit að það er bara Þrír fötunum inn sem atburðarás getur fall-- fyrst, annar, eða þriðji í þessu case-- ekki nennir að bæta frekari nákvæmni og frekari rökfræði þar. Bara fara á undan með Sjálfgefið raunin hér á annað. Nú, við skulum fara á undan eftir vistun þetta, gera Skilyrði punktur rista conditions-- ekki mikill notandi tengi, vegna þess að ég ætla ekki vekur notandi, sem ég nefndi áðan. En það er allt í lagi. Við munum halda það einfalt. Við skulum reyna númerið 42. Og það er jákvætt. Við skulum reyna númerið neikvæð 42, neikvæð. Við skulum reyna gildið 0. Og reyndar það virkar. Nú, þú munt sjá með vandamál áður langur, prófanir things þrisvar sinnum, sennilega ekki nóg. Þú vilt sennilega að prófa nokkrar stærri tölur, sumir minni tölur, sum horn tilvikum, eins og við munum koma til að lýsa þeim. En nú er þetta frekar einfalt forrit. Og ég er nokkuð viss um, rökrétt, að það fellur í þremur tilvikum. Og reyndar jafnvel þó að við bara áherslu á hugsanlega galla af ónákvæmni og flæða í Staðreyndin þar sem margir af vandamálum CS50 er, við erum ekki að fara að hafa áhyggjur um, allan tímann, þessi mál af flæða og ónákvæmni, vegna þess að í raun, í C, það er í raun ekki allt sem auðvelt að forðast þá hluti. Ef þú vilt að telja upp stærri og stærri, og stærri, það kemur í ljós að það eru aðferðir sem þú Hægt er að nota, oft með þátttöku hluti sem kallast bókasöfn, söfn kóða, að annað fólk skrifaði að hægt er að nota, og önnur tungumál eins Java og aðrir, reyndar gera það mun auðveldara að telja jafnvel hærra. Svo það er í raun sumir af þessum hættum fall af tungumálinu sem þú notar. Og á næstu vikum munum við sjá hvernig hættuleg C í raun getur verið ef þú notar hana ekki rétt. En þaðan, og með Python, og JavaScript, verður við lag á nokkur vernd, og keyra færri þessa áhættu. Svo skulum gera a lítill fleiri áhugavert rökfræði í prógramminu. Svo láta mig fara á undan og búa til forrit sem heitir Logical bara svo ég geti spilað með nokkrum Raunveruleg rökfræði, logical.c. Ég ætla bara að afrita og líma sumir númer frá fyrr svo ég kem til baka að þessum fallegu útgangspunkt. Láttu mig þennan tíma að gera bleikju C. ég er að fara að gefa það a nafn C bara vegna þess að það er hefðbundin, fá staf frá notanda. Og við skulum láta eins og Ég ætla að innleiða hluta af því Rm program, the fjarlægja forrit áður beðið notanda til að fjarlægja skrá. Hvernig getum við gert þetta? Ég vil segja, ef C er jafnt jafngildir, vitna unquote, Y, þá ætla ég að gera ráð fyrir sem notandinn hefur valið já. Ég ætla bara að fara að prenta já. Ef það voru í raun að skrifa flutningur program, við gætum fjarlægja skrána með fleiri línur af kóða. En við munum halda það einfalt. Annars ef c jafngildir jafngildir n- og nú hér, ég ætla að segja, notandinn þarf að hafa ætlað nr. Og þá annað, þú veist hvað? Ég veit ekki hvað annað notandinn er að fara að slá. Þannig að ég ætla bara að fara að segja að það er villa, hvað hann eða hún slegið í raun. Svo hvað er að gerast hér? Það er grundvallarmunur á móti því sem ég hef gert í fortíðinni. Gæsalappa, gæsalappa, tvöfaldur vitna, og enn, einn vitna, einn vitna. Það kemur í ljós í C, að þegar þú vilt að skrifa band, þú notar gæsalappa, rétt eins og við höfum verið að nota allan þennan tíma með printf. En ef þú vilt að takast á við bara einn staf, svokallaða bleikju, þá þú notar í raun einn quotes. Þau ykkar sem hafa forritað áður, þú might ekki hafa þurfti að hafa áhyggjur af þessu greinarmun á tilteknum tungumálum. Í C, það skiptir máli. Og svo þegar ég fá bleikju og ég vil að bera saman þessi char með jafn jafngildir að nokkru stafnum eins og Y eða n, ég, reyndar þarf að hafa einn quotes. Nú, við skulum fara á undan og gera þetta. Við skulum fara á undan og gera rökrétt punktur rista rökrétt. Og nú er ég kvaðningu. Svo, væntanlega, betri reynslu notenda myndi reyndar segja mér hvað ég á að gera hér. En ég ætla að bara í blindni segja y fyrir já, OK, gott. Skulum keyra hana aftur, n fyrir nei, gott. Segjum eins og ákveðnar fólk sem ég þekki, húfur mínir Lock lykilinn er á allt of oft. Svo ég höfuðborg Y, slá, villa. OK, það er ekki nákvæmlega það sem ég er að búast við. Reyndar, the tölva er að gera bókstaflega hvað Ég sagði það að do-- athuga lágstafir y og lágstafir n. Þetta þýðir ekki að líða eins vel notandi reynsla, þó. Leyfðu mér að spyrja um og samþykkja annaðhvort lágstöfum eða efri ræða. Svo kemur í ljós, gætir þú vilt að segja eitthvað eins og í grunni, eins bókstaflega eða C jafngildir jafngildir fjármagns einn vitnað y. Skrúfjárn út, C hefur ekki þetta bókstaflega leitarorð eða. En það hjartarskinn hafa tvær lóðrétt bars. Þú þarft að halda inni Shift yfirleitt, ef þú ert að nota bandaríska lyklaborð, og högg lóðrétt bar Lykillinn að ofan aftur lykil. En þetta lóðrétt strik lóðrétt strik þýðir eða. Ef, hins vegar vildum við að segja og, eins og í grunni, við gætum gert merkið merkið. Það gerir ekkert rökrétt vit hér, vegna þess að maður gæti ekki hugsanlega hefur slegið bæði y og lágstafir Y og fjármagn Y sem á sama staf. Svo eða er það sem við ætlum hér. Svo ef ég geri þetta á báðum stöðum, eða c jafngildir jafngildir höfuðborg N, nú endursýning, gera rökrétt, endursýning rökrétt. Nú, ég get slegið y. Og ég get gert það aftur með höfuðborg Y, eða höfuðborg N. Og ég gæti bætt í til viðbótar samsetningar enn. Þannig að þetta er rökrétt Forritið svo miklu leyti sem nú Ég stöðva rökrétt að þetta gildi eða þetta gildi. Og ég þarf ekki að endilega, koma upp með tveimur fleiri IFS eða annars IFS. Ég get reyndar sameina nokkrar af tengjast rökfræði saman á þennan hátt. Þannig að þetta væri betra hannað en einfaldlega segja, ef C er jafnt lágstöfum y, prenta já, annars ef c jafngildir höfuðborg Y, prenta já, annars ef c jafngildir lower-- í öðrum orðum, þú þarft ekki að hafa fleiri og fleiri útibú. Þú getur sameinað nokkrar af andvirði Útibú rökrétt, eins og á þennan hátt. Svo skulum taka a líta á bara eitt Endanleg innihaldsefni, eitt endanlega reisa, sem C leyfir. Og við munum koma aftur í Framtíð öðrum enn. Og þá munum við gera með því að skoða á ekki rétt á code-- fá kóðann til work-- en hönnun af kóða, og planta þeim fræ snemma. Svo láta mig fara á undan og opna nýja skrá hér. Veistu hvað? Ég ætla að koma aftur að innleiða sama program, en nota aðra reisa. Svo láta mig fljótlega gefa mig Aðgangur að fela CS50.h fyrir CS50 bókasafn, staðall io.h fyrir printf. Gefðu mér int helstu ógilt mína. Og þá hérna, láttu mig fara á undan og gera þetta. Char c fær fá bleikju, rétt eins og áður. Og ég ætla að nota nýja reisa now-- skipta, á hvaða staf? Svo er rofi góður af eins og skipta lest lögin. Eða, í raun, það er góður af if annað, ef annað hvort, en skrifað nokkuð öðruvísi. A rofi lítur svona út. Þú ert rofi, og þá hvað eðli eða númer sem þú vilt horfa á, þá sumir hrokkið axlabönd eins og í Scratch, bara segja gera þetta efni. Og þá þú hefur mismunandi tilvikum. Þú notar ekki ef og annað. Þú notar bókstaflega orðið málið. Og þú myndir segja eitthvað eins og þetta. Þannig að um er að ræða lágstafir y, eða um er að ræða a fjármagns Y, fara á undan og prenta út já. Og þá brjótast út úr rofi. Það er það. Við erum búin. Annars ef svo má segja, lágstöfum n, eða höfuðborg N, þá fara á undan og prenta út nei, og þá brjóta. Else-- og svona er Sjálfgefið ræða indeed-- printf error-- og bara gott mál, þó rökrétt þetta brot er ekki nauðsynlegt vegna þess að við erum í lok af the rofi samt, Ég ætla nú að brjóta út af the rofi. Svo lítur þetta svolítið öðruvísi. En, rökrétt, það er reyndar jafngildi. Og hvers vegna vildi þú nota einn yfir öðrum? Stundum, bara persónulegt val, stundum fagurfræði, ef ég litið á þetta nú, það er eitthvað að segja fyrir sýnilegur þessum kóða. Ég meina, aldrei hugur sú staðreynd að þetta númerið er nýtt til margir af okkur í herberginu. En það er bara svona nokkuð. Þú sérð lágstafir Y, höfuðborg Y, lágstöfum n, höfuðborg N sjálfgefið, það stekkur bara svona út á þig á þann hátt að öllum líkindum, kannski fyrri dæmi við Skógrækt ríkisins, og lóðrétt bars, og aðrir eru IFS, gæti ekki hafa. Svo er þetta virkilega spurning um persónulegt val, í raun, eða sýnilegur, af kóða. En í skilmálar af virkni, láttu mig fara á undan og gera skipta, punktur rista skipta, og nú slá í lágstafir y, höfuðborg Y, lágstafir n, höfuðborg N, David, reyna aftur því það er ekki einn staf. Við skulum gera x, villa, eins og búist var við. Og, logically-- og þetta er eitthvað Ég myndi hvetja í general-- jafnvel þó að við erum aðeins að klóra í Yfirborð sumir af þessum eiginleikum. Og það gæti ekki verið augljóst þegar þú sjálfur setjast á lyklaborðinu, hvernig virkar þetta? Hvað myndi þetta gera? Hin fallega hlutur óður í having fartölvu, eða skrifborð, eða aðgang við tölvu með þýðanda, og með kóða ritstjóri eins og þetta, er þú getur næstum alltaf svarað þeim spurningar fyrir þig bara með því að reyna. Til dæmis, ef Retorísk Spurningin hendi voru, hvað gerist ef þú gleymir brjóta fullyrðingar þínar? Sem er í raun Mjög algengt hlutur til gera, vegna þess að það lítur ekki eins og þú raunverulega þörf þá. Þeir í raun ekki að ljúka við hélt eins sviga eða hrokkið Brace gerir. Við skulum fara á undan og endurþýða kóðann og sjá. Svo gera rofi, punktur rista skipta. Við skulum slá í neðri tilfelli Y, the toppur ræða, Enter. Svo ég gafst y. The program sagði já, nei, villa, eins og það var að skipta um skoðun hennar. En það var eins konar, vegna þess að það gerist með rofa er fyrsta málið sem Leikurinn þýðir í raun, hey tölvu, framkvæma allan kóðann undir honum. Og ef þú segir ekki brot, eða ekki segja hlé, eða ekki segja hlé, tölvan er að fara að blása gegnum allar þessar línur og framkvæma þær allar til það gerist að hrokkið Brace. Svo bremsur eru reyndar nauðsynlegt. En takeaway hér er, þegar í vafa, reyna eitthvað. Kannski vista númerið þitt fyrst, eða vista hana í auka skrá ef þú ert virkilega áhyggjur af Messías upp og þurfa að batna þá vinnu sem þú veist er að vinna. En að reyna það. Og ekki vera eins hrædd, ef til vill, um hvað tölva gæti gert, eða að þú gætir brjóta eitthvað. Þú getur alltaf snúa aftur að einhverju fyrri útgáfu. Svo skulum enda með því að leita á hönnun af kóða. Við höfum þessa getu nú að skrifa skilyrði og skrifa lykkjur, og breytur, og kalla aðgerðir. Svo, hreinskilnislega, við erum eins konar aftur á þar sem við vorum fyrir viku síðan með grunni, að vísu með minna sannfærandi texta umhverfi en grunni leyfir. En eftir hversu fljótt við höfum keypt að orðaforði, jafnvel ef það er að fara að taka smá tíma að sökkva í, þannig að við getum nú notað þennan orðaforða að skrifa meira áhugavert forrit. Og við skulum taka barn stíga til að, eins og hér segir. Leyfðu mér að fara á undan og búa til nýja skrá hér. Ég ætla að kalla þetta prototype.c og kynna í fyrsta skipti, getu að gera eigin starfsemi þína. Sumir af þú might hafa gert þetta með grunni, þannig að þú getur búið til þinn eigin sérsniðið blokkir í grunni, og þá draga þá inn í stað hvar þú vilt í C. Og í flestum forritun tungumál, getur þú gert nákvæmlega that-- gera eigin starfsemi þína, ef þeir ekki þegar til staðar. Svo, til dæmis, láta mig fara á undan og eru CS50.h, og fela í sér staðall io.h, int helstu ógilt. Og nú höfum við STAÐGENGILL tilbúinn til að fara. Ég halda prentun hlutum eins og nöfn fólks í dag. Og það finnst like-- myndi ekki vera gott ef það voru fall sem kallast prenta nafn? Ég þarf ekki að nota printf. Ég þarf ekki að muna allir sniði númerin. Af hverju ekki ég, eða hvers vegna ekki einhver frammi fyrir mér, búa til fall sem kallast prenta nafn, sem gefa nokkurn nafn, einfaldlega prenta það út? Með öðrum orðum, ef ég segi, hey, tölva, gefa mér streng með því að spyrja notandann um slíkt, um fá band virka CS50 er. Hey, tölva, setja þessi band í að breyta í vinstri hönd, og kalla það s. Og þá, hey tölvu, fara á undan og prenta að nafn manns, gert. Nú, það væri gaman, því þetta forrit, viðeigandi nafni, segir mér hvað það er ætlast til að gera með því að nöfnum þeim sem virka er. Leyfðu mér að fara og gera frumgerð, Enter. Og, því miður, þetta er ekki að fara að fljúga. Prototype.c, lína 7, eðli 5, villa, óbeina yfirlýsingu af virka prenta nafn er ógild C99, C99 þýðir útgáfu af C sem kom út árið 1999. Það er allt og sumt. Svo ég veit ekki hvað allt þetta þýðir enn. En ég kannast villa í rauðu. Það er nokkuð augljóst. Og það virðist sem við græna eðli hér, málið er með nafni prenta, opið svigi s, loka svigi, hálf-ristli. En óbeina yfirlýsingu um virka við gerðum sjá stuttlega fyrr. Þetta þýðir einfaldlega, að Clang veit ekki hvað ég meina. Ég hef notað orðaforða orð sem það er aldrei séð eða verið kennt áður. Og svo ég þarf að kenna það hvað þessi aðgerð þýðir. Þannig að ég ætla að fara á undan og gera það. Ég ætla að fara á undan og framkvæma mitt eigið fall sem heitir Print Name. Og ég ætla að segja, eins og hér segir, að það gerir þetta, printf, halló, prósent s, sviga n, nafn, hálf-hreinsun. Svo hvað gerði ég bara? Svo kemur í ljós, að framkvæma eigin virka, við eins konar láni sumir af sama uppbygging og helstu að við höfum bara verið tekið sem sjálfsögðum hlut, og ég veit bara að afrita og líma ansi mikið hvað Ég hef verið að skrifa í fortíðinni. En eftir mynstri hérna. Int, Main, Void, við munum stríða sundur Áður en langt hvað það raunverulega þýðir. En í dag, bara taka parallelism. Void, nafn prenta, band nafn, þannig að það er fjólublá leitarorð, sem við erum að fara að byrja hringja til baka gerð, nafn virka, og þá inntak. Svo, í raun getum við distill af þessu tagi eins og síðustu viku sem þetta er nafn eða reiknirit kóða við erum fara til write-- á reiknirit undirliggjandi kóðinn sem við erum að fara að skrifa. Þetta er inntak hennar. Þetta er framleiðsla hennar. Þessi aðgerð, prenta nafn, er sem ætlað er að taka band sem heitir nafn, eða hvað, sem inntak, og þá ógilt. Það þýðir ekki aftur neitt, eins fá band eða fá INT gerir. Svo það er að fara að skila mér eitthvað til baka. Það er bara að fara að hafa aukaverkun, svo að segja, af prentun nafn einstaklingsins. Svo eftir, lína 7, I getur hringt prenta nafn. Line 10, get ég skilgreint eða framkvæma prenta nafn. En, því miður, það er ekki nóg. Leyfðu mér að fara á undan og endurþýða þetta eftir vistun. Whoa, nú hef ég gert það verra, það virðist. Svo óbeina yfirlýsingu um virka prenta nafn er ógilt. Og aftur, það er fleiri villur. En eins og ég varaði fyrr, jafnvel ef þú færð óvart með, eða smá sorglegt að sjá svona marga villur, einblína á fyrsta í upphafi, vegna þess að það gæti bara hafa haft Cascading áhrif. Svo C, eða Clang nánar tiltekið, enn ekki viðurkenna prenta nafn. Og það er vegna þess Clang, við hönnun, er eins konar heimsk. Það gerir bara það sem þú segir það að gera. Og það er bara svo í röð þar sem þú segir það að gera. Ég hef skilgreint helstu á línu fjórum, eins og við höfum verið að gera ansi oft. Ég hef skilgreint prenta nafnið á línu 10. En ég er að reyna að nota prenta nafn á línu sjö. Það er of fljótt, er ekki til ennþá. Þannig að ég gæti verið sniðug, og vera eins, OK, þannig að við skulum bara spila með, og hreyfa prenta nafn upp hér, og koma aftur saman. Guð minn góður. Það virkaði. Það var eins einfalt eins og þessi. En rökfræði er einmitt það. Þú þarft að kenna Clang það er því að skilgreina aðgerðina fyrst. Þá er hægt að nota það. En hreinskilnislega, þetta finnst eins og hála brekku. Svo í hvert skipti sem ég keyrt í vanda, ég er bara að fara að varpa ljósi og afrita Ég skrifaði, skera það og líma það upp hér. Og vissulega, við gátum contrive sumum tilfellum þar ein aðgerð gæti þarf að hringja annað. Og þú bara getur ekki sett hverjum fall ofan hvert annað. Svo kemur í ljós að það er betri lausn. Við getum skilið þetta verið. Og hreinskilnislega, það er yfirleitt gott, og þægilegt, og góð hönnun að setja helstu fyrsta, vegna þess, aftur, Helstu bara eins og þegar grænn fáni smellt það er fall sem fær keyrð sjálfgefið. Svo þú might eins og heilbrigður að setja það efst á skránni þannig að þegar þú eða einhver annar maður lítur á skrá þú veist hvað er að gerast bara með því að lesa helstu fyrst. Svo kemur í ljós, getum við sagt Clang stanslaust, hey, Clang, á línu fjórum, Ég lofa að framkvæma fall sem heitir Print Nafnið sem tekur streng nefndi sem inntak, og skilar engu, ógilt. Og ég næ í kring til útfæra hana síðar. Hér kemur Main. Main nú á línu 9 er hægt að nota Print Nafn vegna Clang treystir því, að lokum, það verður fundur skilgreiningu um framkvæmd Prenta Nafn. Svo eftir vistun skrá minn, láta mig fara á undan og gera frumgerð, lítur vel út að þessu sinni. Punktur rista, frumgerð, láttu mig fara á undan og sláðu inn nafn. David, halló David, Zamila, halló Zamila, og reyndar nú virkar það. Svo efnið hér er að við höfum gerði sérsniðna virka, eins og siðvenja Scratch blokk við erum að kalla það. En ólíkt grunni þar sem þú getur bara búa hana til og byrja að nota það, Nú verðum við að vera lítið meira smámunasamur, og í raun þjálfa Clang að nota, eða til að búast við það. Nú, eins og innskot, hvers vegna allan þennan tíma hafa við verið bara í blindni á trú meðal CS50.h, og þar á meðal venjulegu io.h? Jæja, það kemur í ljós, meðal nokkrum öðrum hlutum, allt sem er í þeim punktur h skrár, sem gerast til vera skrá. Þeir eru haus skrár, svo að segja. Þeir eru enn skrifaður í C. En þeir eru öðruvísi tegund af skrá. Fyrir nú, getur þú nánast gert ráð fyrir að allt sem er inni CS50.h er einhver-liners eins og þetta, ekki fyrir aðgerðir sem kallast Print Nafn, en fyrir fá band, Fá Fljóta, og nokkrum öðrum. Og það eru svipaðar frumútgáfur, einn liners, inni af venjulegu io.h fyrir printf, sem nú er í eigin Print Nafn virka minn. Svo í öðrum orðum, þetta allan tímann sem við höfum bara verið blindni afrita og líma eru þetta, eru það, hvað er að gerast? Þeir eru bara svona vísbendingum að Clang um hvað aðgerðir eru reyndar, framkvæmda, bara annars staðar í mismunandi skrám annars staðar á kerfinu. Þannig að við höfum innleitt prenta nafn. Það hjartarskinn hafa þessa aukaverkun prentun eitthvað á skjánum. En það er í raun ekki rétta mér eitthvað til baka. Hvernig eigum við að fara um framkvæmd áætlun sem er rétta mér eitthvað til baka? Jæja, við skulum reyna þetta. Leyfðu mér að fara á undan og framkvæma skrá sem heitir return.c svo við getum sýnt fram á hvernig eitthvað eins fá band, eða fá Int, er í raun aftur eitthvað til baka til notandans. Við skulum fara á undan og skilgreina int helstu ógilt. Og aftur, í framtíðinni, munum við útskýra hvað það int og það tóm er í raun að gera. En í dag, munum við taka því sem sjálfsögðum hlut. Ég ætla að fara á undan og printf, fyrir góða reynslu notenda, x er. Og þá ætla ég að bíða eftir notandi að gefa mér x með Get int. Og þá ætla ég að fara á undan og prenta út x á torginu. Svo þegar þú hefur aðeins hljómborð, fólk almennt nota litla gulrót tákn á lyklaborðinu til að tákna að krafti af, eða veldisvísir af. Svo x veldi er til staðar i. Og nú ætla ég að gera þetta. Ég gæti bara do-- hvað er x veldi? x í öðru veldi er x sinnum x. Og við gerðum þetta sumar síðan þegar í dag. Þetta þýðir ekki að líða eins allt sem mikill árangur. Veistu hvað? Við skulum nýta sumir af þessi hugmynd frá síðasta tíma abstrakt. Væri ekki gott ef það er fall sem heitir veldi sem gerir nákvæmlega það? Það er enn, í lok af the dag, gerir það sama stærðfræði. En við skulum ágrip burt hugmyndinni um eitt númer margfaldað með annað, og bara gefa það a nafn, eins ferningur þetta gildi. Og, með öðrum orðum, í C, við skulum búa til fall kallað veldi sem gerir einmitt það. Það er að fara að vera kölluð veldi. Það er að fara að taka int. Og við munum vilja bara kalla það n, sjálfgefið. En við gætum kalla það eitthvað sem við viljum. Og allt sem það er að fara að gera, bókstaflega, er aftur afleiðing af n sinnum n. En vegna þess að það er aftur eitthvað, sem er leitarorðið í fjólublátt við höfum aldrei séð áður, ég, á línu 11, getur ekki bara sagt ógilt í þetta sinn. Ógild, í dæminu sem við sáum bara frekar nafni prenta, þýðir bara, gera eitthvað. En ekki afhenda ekki mér eitthvað til baka. Í þessu tilfelli, ég vil að skila n sinnum n, eða hvað sem er, að tala. Svo ég get ekki sagt, hey, tölva, Ég aftur ekkert, ógilt. Það er að fara að fara aftur, eftir eðli, int. Og svo er það allt sem er að gerast hér. Inntak veldi er að fara að vera int. Og svo að við getum notað það, það hefur til hafa nafn, N. Það er að fara að framleiðsla int sem þarf ekki nafn. Við getum skilið það til helstu, eða hver sem er nota mig til að muna þetta gildi ef við langar með eigin breytu sína. Og aftur, eina nýja leitarorð hér er aftur. Og ég ætla bara að gera smá stærðfræði. Ef ég vildi virkilega að vera óþörf, Ég gæti sagt INT vara fær n sinnum n. Og þá gæti ég sagt, aftur vöru. En, aftur, að lið mitt fyrr þetta bara ekki vera góður design-- eins, hvers vegna kynna nafn, tákn, eins og vöru, bara strax aftur það? Það er lítið hreinni, a lítill herða, svo að tala, bara til að segja aftur n sinnum n, losna við þessa línu öllu leyti. Og það er bara minna kóða til að lesa, minna tækifæri fyrir mistök. Og við skulum sjá hvort þetta reyndar virkar núna. Nú ætla ég að fara á undan og gera aftur. Uh-ó, óbeina yfirlýsingu um virka. Ég gerði þessi mistök áður, ekki máli. Láta mig slá bara, eða auðkenna og afrita, nákvæmlega sama virka frumgerð, eða undirskrift, á fallinu upp hér. Eða ég gæti farið alla aðgerðina. En það er svolítið latur. Þannig að við munum ekki gera það. Nú, láttu mig gera aftur aftur, punktur rista aftur. x er 2. x veldi er 4. x er 3. x veldi er 9. Og virka virðist nú að vera að vinna. Svo er það munurinn hér? Ég er með fall sem er kallað veldi, í þessu tilfelli, sem ég setti í inntak. Og ég fæ til baka framleiðsla. Og enn, áður, ef Ég opna önnur dæmi frá fyrr, þar sem var kallað prototype.c, Ég hafði prenta nafn, sem aftur ógilt, svo að segja, Eða það aftur ekkert, og Einfaldlega hafði aukaverkun. Svo hvað er að gerast hér? Jæja, íhuga aðgerð fá band fyrir aðeins augnablik. Við höfum verið að nota aðgerðina fá band með því móti. Við höfum haft fall að fá band, eins og ma CS50.h, eru stöðluð io.h, int, helstu, tóm. Og svo í hvert skipti sem ég hef kallaði fá band svona langt, Ég hef sagt eitthvað eins og, string s fær fá band, því Fá string-- við skulum kalla þessa get.c-- fá band sjálft skilar streng sem ég get þá nota, og segja, halló, komma, prósent s, sviga n, s. Svo er þetta sama dæmi, í raun, að við höfðum áður. Svo fá band skilar gildi. En smá stund síðan, prenta string ekki skila gildi. Það hefur einfaldlega aukaverkun. Þannig að þetta er grundvallarmunur. Við höfum séð öðruvísi tegundir aðgerðir nú, sem sum hver hafa skilað gildi, sum hver ekki. Svo kannski er það band, eða int, eða fljóta. Eða kannski er það bara tóm. Og munurinn er að þessar aðgerðir sem fá gögn og skila gildi eru í raun uppeldi eitthvað til baka að borðinu, svo að segja. Svo skulum fara á undan og líta á einn síðasta sett dæmi sem gefur tilfinningu, nú, hvernig við gætum reyndar ágrip betra, og betri, og betri, eða meira, og fleiri, og fleiri, í því skyni að skrifa, að lokum, betri kóða. Við skulum fara á undan, og í anda á grunni, gera eftirfarandi. Leyfðu mér að fara á undan og eru CS50.h og staðall IO.h. Leyfðu mér að fara á undan og gefa sjálfur int, helstu, ógilt. Og láta mig fara á undan, kalla þessa cough.c. Og láta mig fara á undan og bara eins grunni, prenta út hósta / n. Og ég vil gera þetta þrisvar sinnum. Þannig að ég ætla, að sjálfsögðu, bara að fara að afrita og líma þrisvar sinnum. Ég ætla nú að fara að gera hósti punktur rista hósta. Við skulum gefa mér smá meira pláss hér, Enter, hósti, hósta, hósta. Það er, augljóslega, nú þegar tækifæri til úrbóta. Ég hef afritað og límt nokkrum sinnum í dag. En það var bara þannig að ég gerði það ekki þarf að slá eins marga stafi. Ég breytti samt hvað þær línur af kóða eru. Þessar þrjár línur eru eins, sem finnst latur og örugglega er, og er sennilega ekki rétt nálgun. Svo með það efni getum við bætt þennan kóða? Við þurfum ekki að afrita og líma númer. Og reyndar hvenær sem þú finnur fyrir sjálfur að afrita og líma, og ekki einu sinni að breyta kóða, Líkurnar eru að það er betri leið. Og reyndar, það er. Leyfðu mér að fara á undan og gera fyrir lykkju, jafnvel þótt setningafræði gæti ekki koma náttúrulega enn. Gera þetta þrisvar sinnum, einfaldlega með því að gera following-- og ég gerst að vita þetta úr starfi. En við höfum fjölda af dæmum núna. Og þú munt sjá netinu fleiri tilvísanir enn. Þetta er setningafræði á línu 6, sem líkt grunni sem endurtekur blokk, endurtaka eftirfarandi þrisvar sinnum. Það er svolítið töfrandi nú. En þetta mun fá meira, og fleiri kunnugleg. Og það er að fara að endurtaka lína átta þrisvar sinnum, þannig að ef ég aftur saman úrbótarpróf hósti, punktur rista hósta, hósta, hósta, hósta. Það virkar samt á sama hátt. Svo er það allt í lagi og gott. En það er ekki mjög aflað. Það er fullkomlega rétt. En mér finnst eins og það gæti verið tækifæri, eins og í heimi Scratch, að eins konar byrjun að bæta nokkrum merkingarfræði hér svo að Ég er ekki bara sumir fyrir lykkju, og virka sem segir hósta, eða hefur hósta. Veistu hvað? Leyfðu mér að reyna að vera lítið kælir en það, og í raun skrifa fall sem hefur einhverja aukaverkanir, kalla það hósta. Og það tekur enga inntak og skilar ekki gildi sem framleiðsla. En þú veist hvað það þýðir? Það gerir this-- printf, vitna unquote, hósta. Og nú upp hér, ég er að fara að fara á undan og int, Ég fær núll, ég minna en 3, ég plús plús. Ég ætla að ekki að gera printf, sem er að öllum líkindum lágt framkvæmd smáatriði. Mér er alveg sama hvernig á að hósta. Ég vil bara að nota hósta virka. Og ég ætla bara að fara að hringja hósta. Nú, eftir á slag. Þegar þú hringja í aðgerð, ef þú ert ekki langar að gefa það inntak, algerlega í lagi. Bara gera opna svigi, nálægt svigi, og þú ert búinn. Þegar þú skilgreint fall, eða lýsa frumgerð fall er, ef þú veist fyrirfram að það er ekki að fara að taka neinar rök, segir ógilt í þeim sviga þar. Og það gerir viss um að þú mun ekki tilviljun misnota það. Leyfðu mér að fara á undan og gera hósta. Og, auðvitað, hef ég gert mistök. Dammit, það er að óbeina yfirlýsingu. En það er allt í lagi. Það er auðvelt festa. Ég þarf bara frumgerð ofar í minn skrá en ég er í raun að nota það. Svo nú láta mig gera hósti aftur, gott. Nú, það virkar. Gera hósta, hósta, hósta, hósta. Svo þú might hugsa að við erum í raun rúmlega verkfræði þetta vandamál. Og reyndar erum við. Þetta er ekki góð frambjóðandi af a program á því augnabliki fyrir Refactoring, og gera það sem er kallaði hierarchic niðurbrot, hvar þú tekið smá kóða, og þá þú konar þáttur það út, svo sem að Tjáið fleiri merkingarfræði til þeirra, og endurnýta það að lokum lengri tíma. En það er að byggja blokk í átt flóknari forrit að við munum byrja skrifa áður en langt sem gerir okkur kleift að hafa orðaforða sem að skrifa betri kóða. Og reyndar, við skulum sjá hvort við getur ekki alhæfa þetta frekar. Það virðist lítið halta að ég, helstu, þurfa að hafa áhyggjur af þessu fjári fyrir lykkju, og kallar hósta aftur og aftur. Hvers vegna get ég ekki sagt bara hósta, Vinsamlegast hósta þrisvar sinnum? Með öðrum orðum, af hverju get ég ekki bara gefa inntak að hósta og gera þetta? Af hverju get ég ekki bara sagt í Helstu hósti þrisvar sinnum. Og nú, þetta er eins konar töfrum. Það er mjög endurtekningu hér. Og það er reyndar barn skref. En bara getu til að segja um lína átta, hósta þrisvar sinnum, það er bara svo miklu læsilegri. Og plús, ég þarf ekki að vita eða sama hvernig hósti er hrint í framkvæmd. Og reyndar síðar í tíma og fyrir lokaverkefni, ef þú glíma verkefni með bekkjarfélagi eða tveir bekkjarfélagar þú munt skilja að þú ert að fara að að, eða vilja til að, skipta vinnu. Og þú ert að fara að vilja til að ákveða fyrirfram, hver er að fara að gera það, og, þar sem stykki? Og myndi það ekki vera gott ef þú, til dæmis, taka gjald af skrifa Main, gert. Og herbergisfélagi þinn, eða þínar félagi almennt, annast framkvæmd hósta. Og þessi skipting, þessir veggir abstrakt, eða lög af abstrakt ef þú verður, eru frábær öflugur, því sérstaklega fyrir stærri, flóknari forrit og kerfi, það gerir margar fólk til að byggja hlutir saman, og að lokum sauma starf sitt saman á þennan hátt. En, auðvitað, við þarft að nú laga hósta. Við þurfum að segja hósta að hey, þú veist hvað? Þú ert að fara að þurfa að taka input-- svo ekki tóm, en int og nú. Við skulum fara á undan og setja í hósti int. Ég fær núll. Ég er minna en hversu oft. Ég sagði þrjú áður. En það er ekki það sem ég vil. Ég vil hósta að vera almennt við styðja allir fjölda endurtekninga. Svo, reyndar er það n sem ég vil, hvað notandinn segir mér. Nú get ég farið á undan og segja prenta hósta. Og það er sama hvaða tala notandinn fer inn, Ég mun kunnugt er mörgum sinnum. Svo í lok dagsins, Forritið er eins. En eftir allt þetta efni gæti jafnvel verið í aðra skrá. Reyndar veit ég ekki minnsta stund hvernig printf er hrint í framkvæmd. Ég veit ekki í augnablikinu hvernig fá band, eða fá int, eða fá fljóta koma til framkvæmda. Og ég vil ekki að sjá þá á skjánum mínum. Eins og það er, ég er farin að einblína á áætlun mín, ekki þau virka. Og svo reyndar eins fljótt og þú byrja þátta kóða eins og þetta út, gætum við að fara jafnvel hósta að sérstakri skrá? Einhver annar gæti framkvæma það. Og þú og program orðið mjög fallegur, og mjög læsileg, að öllum líkindum, í raun fjórir lína program þarna. Svo skulum fara á undan núna og gera eitt breytingar. Takið eftir að frumgerð mín hefur til að breyta upp efst. Svo láta mig festa það svo Ég fæ ekki öskraði á. Gera hósta, láta mig hlaupa hósta einu sinni meira, enn að gera það sama. En nú, eftir að við höfum efni fyrir einn endanlegri útgáfu. Veistu hvað? Ég vil ekki bara hósta, endilega. Ég vil hafa eitthvað meira almennt. Svo þú veist hvað? Ég vil gera þetta. Ég vil hafa, líkt grunni gerir, er td blokk, en ekki bara Say Something sumir tala af sinnum. Ég vil það að segja mjög sérstakur band. Og því ég ekki vil það að segja bara hósta. Ég vil það að segja hvað strengur er liðinn í. Svo eftir, ég hef almennt þetta svo að nú segja líður eins gott nafn fyrir þetta, eins og grunni, tekur tvær breytur, ólíkt grunni. Einn er band. Einn er int. Og ég gæti skipt yfir þá. Ég bara svona eins og the hugmynd af segir band fyrst, og síðan hversu oft síðar. Void þýðir það samt ekki aftur neitt. Þetta eru bara Sjónræn hlið áhrif, eins og með [? Jordan,?] munnleg aukaverkun æpa. Það er samt eitthvað n sinnum, 0 til, en ekki jafnt n. Þetta þýðir n samtals sinnum. Og þá bara prenta út hvað sem strengur er. Þannig að ég hef í raun almenn þessi lína af kóða. Svo nú, hvernig get ég framkvæma hósti virka? Ég get gert ógilt hósta. Og ég get samt tekið á því hvernig Margir sinnum þú vilt að hósta. En þú veist hvað? Ég get nú punt að segja. Ég get hringt sagt með Bæta hósti, sem liggur í n. Og ef ég vil líka framkvæma, bara til gamans, að sneeze virka, Ég get sneeze sumir tala af sinnum. Og ég get haldið endurnýta n, því eftir að m í þessu samhengi eða umfang Aðeins er innan þessa aðgerð. Og n í þessu samhengi einungis er innan þessa aðgerð hér. Þannig að við munum koma aftur til þessi mál af umfangi. Og hér, ég ætla bara að fara að segja, Achoo, og þá er n sinnum, hálf-hreinsun. Og nú, ég þarf bara að taka lán þessir virka undirskriftir upp hér. Svo er hósti rétt. Void sneeze er rétt núna. Og ég samt bara þurfa að segja. Þannig að ég ætla að segja, segja band s, int n, hálf-hreinsun. Þannig að ég hef yfir-verkfræðingur er Heck út af þessu forriti. Og þetta er ekki endilega þetta er hvað þú ættir að gera þegar þú skrifar jafnvel einföldustu áætlunum. Taka eitthvað sem er augljóslega mjög einfalt, mjög stutt, og með tilvísun til-framkvæma það nota of mikið kóða. En þú munt í raun að sjá, og í tími líta aftur á þessum dæmum, og gera sér grein fyrir, ó, þá eru skref tókum við í raun og veru alhæfa, að þáttur eitthvað út, fyrr í lok dags númerið mitt er í raun nokkuð sanngjarnt. Vegna þess að ef ég vil að hósta þrjú sinnum þá hnerra þrisvar sinnum, Ég er einfaldlega að fara að endursýning þetta, program gera hósta, og hlaupa hósta. Og ég hef þrjár hósta og þrjár hnerri. Og svo er þetta einföld fyrirmynd, ef þú vilt, fyrir hvernig við gætum farið um reyndar framkvæmd áætlun. En við skulum bara sjá nú hvað það er við höfum verið að gera allan þennan tíma, og það sem sumir af endanlegri stykki eru að baki þessari einföldu skipun. Í lok dags, höfum við verið að nota Clang sem þýðanda okkar. Við höfum verið að skrifa heimildar númer, breyta henni um Clang inn kóða vél. Og við höfum verið að nota Gera bara til að auðvelda mínútum okkar svo að við þurfum ekki að muna þessir álagaþulurnar af Clang sjálft. En hvað er að gera í raun að gera? Og, aftur á móti, hvað er Clang raun að gera? Það kemur í ljós, þó að við höfum einfaldað umfjöllun í dag með því að segja, þú tekur frumkóða, gefa það eins Inntak þýðanda, sem gefur þér framleiðsla á vél númer, kemur í ljós að það er nokkrar mismunandi skrefum þarna inni. Og samantekt gerist að vera regnhlíf tíma fyrir a heild búnt af skrefum. En við skulum stríða bara þetta út mjög fljótt. Það kemur í ljós að við höfum verið að gera fleiri hlutir í hvert skipti sem ég keyra forrit, eða í hvert skipti sem ég safna saman forrit í dag. Svo vísar preprocessing til this-- neitt í C program, eins og við munum sjá aftur og aftur, sem byrjar með þessu kjötkássa tákn, eða hashtag tákn hér, þýðir það er Preprocessor tilskipun. Það þýðir, í þessu tilfelli, hey tölva, gera eitthvað með þessa skrá áður en þú saman í raun eigin kóða mína. Í þessu tilviki, kjötkássa fela í sér er, í raun, C er leið til að segja, hey tölva, fara að fá innihald af CS50.h og líma þær hér. Hey tölva, fara fá Innihald venjulegu io.h, hvar sem er á harður ökuferð, líma það hér. Svo þessir hlutir gerast fyrst á forvinnu. Og Clang gerir þetta allt fyrir okkur. Og það gerir það svo fjári hratt, þú ekki einu sinni sjá fjóra mismunandi hluti gerast. En það er fyrst slík skref. Hvað gerist í raun og veru næst? Jæja, næsta opinber skref er að setja saman. Og það kemur í ljós að setja saman áætlun tæknilega þýðir að fara frá Kóðinn er efni sem við höfum verið að skrifa í dag, að eitthvað kallað samkoma kóða, eitthvað sem lítur svolítið öðruvísi. Og í raun, getum við séð þetta alvöru hratt. Leyfðu mér að fara í raun í IDE mína. Leyfðu mér að fara á undan og opna hello.c, sem er fyrsta forritið sem við hófst í dag. Og láta mig fara á undan og keyra Clang A öðruvísi lítið, Clang-s, hello.c, sem er reyndar að fara að gefa mér aðra skrá hello.s. Og við munum líklega aldrei aftur sjá þessa tegund af kóða. Ef þú taka a lægri kerfi bekknum eins CS61, þú munt sjá mikið meira af þessu tagi kóða. En þetta er smalamál. Þetta er X86 smalamál að CPU sem er undirliggjandi CS50 IDE skilur í raun. Og dulinn eins og það er útlit, það er eitthvað tölvan skilur nokkuð vel. Sub q, þetta er frádrátt. Það er hreyfingar. Það er að hringja í virka hér, x Oring, hreyfing, bæta við, pop, a aftur. Svo er það einhver mjög lágt leiðbeiningar stigi sem örgjörva skilja að Ég kennd við áðan. Það er það sem Intel Inside. Það eru mynstur núll og sjálfur að kort að þessum arcanely orðuð, en nokkuð vel heitir, leiðbeiningar, svo að segja. Það er það sem gerist þegar þú saman númerið þitt. Þú færð samkoma Tungumál út af því, sem þýðir að þriðja skrefið er að setja saman sem samkoma kóða inn, að lokum, vél code-- núll og sjálfur, ekki texti sem við sáum bara smá stund síðan. Svo pre-vinnslu þýðir það að finna og skipta, og nokkur önnur atriði. Samantekt tekur uppspretta númer frá C, kóðinn sem við skrifuðum, að samkoma númer sem við leit bara á. Samsetningu tekur þessi samkoma kóða til zeroes og sjálfur að CPU raunverulega vilja skil í lok dags. Og tengja er síðasta skrefið sem gerist fyrir us-- aftur, svo hratt að við gerum ekki einu sinni notice-- sem segir, hey tölva, taka allar á núll og sjálfur að leiddi af gerð kóða Davíðs, og Helsta hlutverk hans í þessu tilfelli. Og hey tölva, fara að fá allar núllum og sjálfur að CS50 starfsfólk skrifaði inni CS50 bókasafn. Blandið þeim með David er. Og hey tölva, fara að fá allar núll og þau sem einhver skrifaði annar ár síðan fyrir printf. Og bæta þeim inn í heild hlutur, þannig að við höfum fékk núll mínum og sjálfur, sem núll CS50 starfsfólk er og sjálfur, printf núll og sjálfur, og eitthvað annað sem við erum að nota. Þeir allir fá blandaðar saman í eitt forrit sem heitir, í þessu tilfelli, halló. Svo héðan í frá munum við bara nota orðið gerð. Og við munum taka sem sjálfsögðum hlut, að þegar við segjum, saman program, það þýðir, hey do the pre-vinnslu, samsetningu, og tengja. En það er í raun einhver safaríkur efni fara á það undir hetta. Og sérstaklega ef þú fá forvitinn nokkurn tíma, þú getur byrjað að poking í kring á þessu lægra stigi. En nú, átta sig á að meðal Takeaways fyrir í dag eru einfaldlega að byrjunin á ferli, að fá sætt sig við eitthvað eins og halló heimur. Reyndar, flest af því sem við gerðum í dag vissulega mun ekki sökkva í frábær fljótur. Og það mun taka nokkrar tími, og sumir æfa. Og líkurnar eru, þú verður að raða af vilja högg lyklaborðinu eða æpa á skjánum. Og allt sem er í lagi. Þó, kannski ekki reyna að gera það á safninu svo mikið. Og að lokum, þú munt að geta þó, til að byrja sjá mynstur, bæði í góðri kóða sem þú hefur skrifað og í mistökum sem þú hefur gert. Og mikið eins og ferli verða TF eða CA er eins, þú munt byrja að fá betri og betri á að sjá þá mynstur, og bara leysa þinn eigin vandamál endanum. Í millitíðinni, það verður nóg okkur að lána þér stuðning, og fá þér í gegnum þetta. Og í skrifa-ups fyrir öll þau vandamál sem verður þú leidd í gegnum allar af skipununum sem ég veit vissulega frá a einhver fjöldi af æfa núna, en gæti hafa flogið yfir höfuð manns fyrir nú. Og það er algerlega fínt. En, að lokum, þú ert að fara að byrja að sjá mynstur koma. Og þegar þú færð framhjá öllum sem heimskur upplýsingar, eins og sviga, og hrokkið axlabönd, og hálf-tvípunkta, og efni, hreinskilnislega, það er alls ekki vitsmunalega áhugavert. Og það er ekki markmiðið tekur einhver inngangs bekknum. Það er þeim hugmyndum sem eru að fara að máli. Það er lykkjur, og skilyrði, og virka, og kröftugar en abstrakt, og þátta af kóða, og góð hönnun og gott stíl, og að lokum nákvæmni á númerið þitt, það er á endanum fara að máli mest. Svo í næstu viku munum við taka þetta hugmyndir sem við sáum fyrst í grunni og hafa nú þýtt í C. Og við munum byrja að kynna fyrsta af Real World Auðvitað er lén. Við munum leggja áherslu á heiminn af öryggi, og nánar tiltekið dulmál, listin að spæna upplýsingar. Og meðal fyrstu vandamál sem þú sjálfur vilja fá að skrifa út spila með nokkrum af setningafræði og leysa sumir rökrétt vandamál, að lokum áður en langt, er að í raun Scramble eða dulkóða, og að lokum hallmæla upplýsingar. Og allt sem við höfum gert í dag, mun frekar lágt stigi, er bara að fara að leyfa okkur að taka einn og einn, og eitt skref að ofan til skrifa mest áhugavert kóðann ennþá. Svo meira á því í næstu viku. [Vídeó spilun] -Hvað Getur þú sagt mér um í síðasta skipti sem þú sást hann? -Hvað Get ég sagt, virkilega? Ég meina, það var eins og allir aðrir pre-framleiðsla æfingu, nema það var eitthvað sagði á mjög lok, sem fastur við mig. -Þetta Var CS50. -Það Er a skera allir, mikill starf á æfingu. hádegismatur -Það er? -Já, Þú og ég get grípa samloku í bita. Leyfðu mér bara debrief með David mjög fljótt. Davíð? Davíð? [END spilun]