[Tónlist spila] DAVID J Malan: Allt í lagi, velkomin aftur til CS50. Þetta er upphaf viku tvö. Orð frá einum af okkar vinir á háskólasvæðinu - ef þú hefur áhuga, hugsanlega, annaðhvort nú eða í sumum framtíð tíma jafnvel, þegar öruggari, kennslu miðja nemendur skólans svolítið eitthvað um tölvunarfræði, gera höfuð til að vefslóð. Þeir eru einkum þörf núna af kennara, sérstaklega ef þú hefur fengum útsetningu tölvunarfræði. Svo muna að síðasta sinn, kynnti við nokkrar gerðir gagna í C, og þú gætir hafa byrjað að fá þinn hendur óhreinum með þessum svona langt í vanda sett einn. Og við átti bleikju. Svo í nokkuð tæknilegur skilmálar, hvað er bleikju eins og þú veist það í dag? Svo er það eðli, en við skulum vera nákvæmari nú. Hvað er átt við með eðli eða einstaklingur bleikju? A non-tölulega eðli - svo ekki endilega. Það kemur í ljós að jafnvel tölur, jafnvel greinarmerki og bréf eru fulltrúa með þessum gögnum nefnast sem bleikju. Svo það er ekki endilega stafrófsröð. Já? Svo er það ASCII staf. Svo ef þú heldur aftur til viku núll, þegar við höfðum bæti okkar sjálfboðaliða koma upp og annað hvort halda höndum þeirra upp eða ekki allir, fulltrúa þeir bita. En sameiginlega sem hópur af átta, þeir fulltrúa bæti. Og við kynntum hugmyndina um ASCII á þeim fyrirlestur, sem er einfaldlega kortleggja milli tölur og bókstafi. Og ASCII notar, eins og þessir menn gefið í skyn, átta bitar að tákna staf. Svo Samkvæmt því, ef átta bitar geta hver taka á einn af tveimur gildum - núll eða einn - Það þýðir að það voru tveir möguleikar fyrir þennan mann - núll eða einn - Tveir fyrir þennan mann, tveir fyrir þetta maður, tveir fyrir þessu. Svo samtals tveimur tímum tvisvar sinnum tvisvar sinnum tveir sinnum tveir - svo tveir áttunda í aðaleinkunn. Þannig að það er Stafafjöldi 256 mögulegt að þú getur tákna með átta bita. Nú, þeir sem tala Asian tungumál gætir vita að það er meira stafir í heiminum en bara Eins og Bs og Cs og Ds. Og reyndar, ASCII ekki nægja fyrir mikið af tungumálum í heiminum. En meira um það seinna. Fyrir nú, ég veit að í C ef þú vilt að tákna staf, a stykki af greinarmerki, eða bara eitthvað eðli í náttúrunni, notum við bleikju. Og það er eitt bæti eða átta bita. Hvað um int? Ja, int er heiltala. Hversu margir bitar, ef þú manst, var heiltala yfirleitt? Einhver muna? Svo það er yfirleitt 32. Það veltur raunverulega á tölvunni sem þú ert að nota. En í tækinu, og í fullt af tölvur, það er 32 bita eða fjögur bæti - átta sinnum fjórir. Og ints eru bara notuð til að geyma tölur, annaðhvort neikvæð, jákvæð eða núll. Og ef þú hefur fengið 32 bita og þú aðeins sama um jákvæðar tölur, getur einhver Ballpark hvernig margir mögulegur heiltölur a tölva getur táknað frá núll á allt? Svo það væri tveir til 32, sem er u.þ.b. fjóra milljarða. Svo þessi völd tveir eru að fara að vera algengt þema í tölvunarfræði. Eins og við munum sjá, þá eru þeir alveg þægilegt að vinna með jafnvel ef það er ekki alveg auðvelt að gera stærðfræði í höfuðið manns. Þannig að við munum segja u.þ.b. fjóra milljarða. Nú, fyrir löngu - þú getur konar giska. Það er lengri en int. Hversu margir bitar? Svo 64 bita eða átta bytes. Þetta þýðir bara að þú getur táknað jafnvel stærri tölur, stærri jákvæð eða stærri neikvæðar tölur. Og hvernig óður fljóta? Það er fljótandi lið verðmæti 32 bita. Þetta er bara alvöru tala, eitthvað með kommu. En ef þú þarft í staðinn fleiri stöðum eftir kommu eða þú vilt tákna stærri fjölda með nokkrum brot eftir það er hægt að nota í tvöfaldur, sem er 64 bita. En það er áhugavert takeaway hér. Svo ef ints takmarkast við 32 bita og jafnvel löngu LONGS eru takmörkuð af 64 bitar, þessi tegund af bidur spurningin, hvað ef þú vilt í raun að telja hærri en 4 milljarða á int? Jæja, þú notar bara lengi lengi. En hvað ef þú vilt að telja hærra en tveir á 64., gefa eða taka? Nú, það er a gríðarstór tala. En að lokum, þú might raunverulega sama um þessar tegundir af gildum, sérstaklega ef þú ert að nota gagnagrunn og byrja að safna fullt og fullt og hellingur af gögnum og framselja einstök Tölurnar hverju stykki af þessi gögn. Þannig að við eins konar átt í vandræðum. Og sömuleiðis, með fljótandi lið gildi - flýtur eða tveggja manna - ef þú hefur aðeins fengið endanlega fjölda bits, hversu margir heildarfjölda gastu hugsanlega tákna? Jæja, það er óljósara þegar þú falið kommu. En það er örugglega tímabundið. Ef þú ert með endanlega fjölda bita, endanlega fjölda af mönnum, endanlegt fjöldi ljósaperur, vafalaust þú getur aðeins tákna endanlega fjölda Fljótandi Point gildi. En hversu margir rauntölur eru þeirra í heiminum? Það er óendanlega. Svo er það eins konar vandamál vegna þess að við hafa ekki óendanlega mikið minni eða RAM inni á tölvum okkar. Svo sumir krefjandi það getur gerst. Svo skulum við fara á undan og reyna að tjá þetta hér. Leyfðu mér að fara á undan og opna gedit. Ég ætla að fara á undan og vista skrá kallast "floats0.c" bara til að vera samræmi við dæmi sem er í boði á netinu, ef þú vilt. Og ég ætla að fara á undan og skilgreina það sem hér segir - Ég ætla að fara á undan og segja, int Helstu ógilt, eins og við gerum oft. Og síðan í þessari áætlun, ég ætla að lýsa mér fljóta, svo 32-bita breytu sem heitir f geðþótta. Og þá ætla ég að geyma í henni Ég veit ekki, einum tíunda, svo 0.1. Þannig að ég ætla að tjá það sem einn deilt með 10, sem er fullkomlega lögmæt í C. Og síðan á annarri línu, einfaldlega að ég vilt prenta út þessi gildi. Svo muna að við getum notað The printf þekki. Við viljum ekki að nota% i fyrir int. Við viljum nota% f fyrir fljóta. Og þá ætla ég að gera sviga N, loka tilvitnun, kommu, f, semíkommu. Svo er hér forritið mitt. Það er nú þegar einn galla. Er einhver fyrir hvern þetta smellt þegar á að benda á kosti ein villa sem ég hef gert? Já? Já. Ég gleymdi "# include" á efst, einkenni þau sem ef ég reyni að saman er þetta að fara að vera að þýðandinn er að fara að æpa á mig, segja Óskilgreint tákn eða eitthvað þar að lútandi. Það skilur ekki eitthvað eins printf. Þannig að ég ætla að gera "# include ", Vista skrána. Og nú er það í betra form. En ég ætla líka að benda út eitt nýtt smáatriði í dag. Auk þess að tilgreina stað eigendur eins% f% i% s, getur þú stundum hafa áhrif á hegðun þeirrar tákn. Til dæmis, um er að ræða fljótandi lið gildi, ef ég vil bara að sýna einum aukastaf eftir tímabil, ég get í raun gert 0.1f. Svo í öðrum orðum, skilja ég f og The prósent skilti með 0,1, bara segja printf, þú might hafa a heild fullt af tölum eftir tuga benda fyrir mig. En ég vil bara að sjá einn af þeim. Þannig að ég ætla að fara á undan núna og vista þetta forrit, fara inn flugstöðinni minn glugga, og ég ætla að fara á undan og tegund gera fljóta 0, slá. Ég sé að nokkuð dulinn línu sem mun byrja að gera meira vit eins og við stríða það í sundur í þessari viku og næstu. Nú ætla ég að fara á undan og hlaupa fljóta núll. Og fjandinn. Svo er það annar padda hér fyrir sumir ástæða. Ég er nokkuð viss um að einn tíundi eða einn deilt með 10, er ekki 0,0. Kannski er ég bara ekki að leita á nóg tölustöfum. Svo hvers vegna get ég ekki sagt tvær 0,2 til að sjá tvo aukastafi í staðinn af réttlátur einn. Leyfðu mér að fara aftur til stöðvarinnar gluggann minn hér og högg upp nokkrum sinnum til sjá sögu mína. Gera fljóta núll aftur, og síðan upp aftur. Og nú færa. Og nú er ég nokkuð viss um að þetta er rangt. Og ég gæti gert þriggja og fjögurra, og ég er líklega að fara að halda að sjá núllum. Svo hvar er villan? Einn deilt með 10 ætti að vera 0.1. Einhver vilja til taka a stunga á hvað grundvallaratriði mál er? Já? Þeir eru báðir heiltölur. Svo hvað? Svo með einn deilt með 10, sem er hvað ég geri í stærðfræði. Og ég fæ 0,1. Já. Og svo er það örugglega þessi mál. Þegar þú tekur heiltölu á tölvu og þú deila því með öðrum heiltala, tölva sjálfgefið er að fara að gera ráð fyrir að þú viljir heiltala. Vandamálið þó, að sjálfsögðu, er að 0,1 er ekki heil tala. Það er alvöru tala. Og svo hvað tölva er með Sjálfgefið er það kastar bara burt allt eftir kommu. Það skiptir ekki umferð upp eða niður í sjálfu sér. Það kastar bara burt allt eftir kommu. Og nú gerir það vit. Því nú erum við greinilega vinstri með núll. En bíddu í eina mínútu. Ég er ekki að sjá að int núll. Ég er reyndar að sjá 0,00. Svo hvernig gera sætta ég þetta núna? Ef einn deilt með 10 er núll, en ég er sjá 0,00, þar er það að fá breytt aftur í alvöru tala? Já. Einmitt. Svo hérna í línu fimm, þegar ég í raun geyma að 0,1, sem er þá styttu í núll, inni í flot, það er í raun jafngildir geyma það ekki sem int en örugglega, sem fljóta. Ennfremur er ég þá að nota printf til sérstaklega prenta að tala við tvo aukastafi jafnvel þó að það gæti í raun ekki vera nein. Svo af þessu tagi sjúga, ekki satt? Svo virðist sem þú getur ekki gert stærðfræði, að minnsta kosti á þessu stigi nákvæmni, í tölvu. En örugglega er það lausn. Hvað er einfaldasta festa við gætum kannski gera, jafnvel bara innsæi hér til leysa þetta? Já? Snúðu heiltölur í - já. Jafnvel ef ég er ekki alveg viss um hvað er raunverulega að gerast hér, ef það grundvallaratriðum hefur að gera með þetta bæði vera ints, ja, af hverju ekki ég gera það 10,0, sem gerir þetta 1.0, vistað póstinn skrána. Leyfðu mér að fara aftur niður til botn og laun. Leyfðu mér að endursýning núna. Og þar - nú, hef ég fékk einum tíunda minn fulltrúa sem 0.10. Allt í lagi. Svo er það ekki slæmt. Og láta mig benda á einn annan hátt við hefðum getað leyst þetta. Leyfðu mér að rúlla í raun aftur í tímann að þegar við höfðum þetta sem einn tíunda fyrir augnabliki. Og láta mig fara á undan og vistað póstinn þessa skrá sem annar skrá nafn, bara til að hafa smá eftirlitsstöð. Svo sem var útgáfa einn. Og nú láta mig fara á undan og gera eitt útgáfu. Við munum kalla þetta útgáfu tvö núll verðtryggð. Og ég ætla að í stað gera þetta - þú veist hvað? Bæti punktur núll virkar í þessu tilfelli. En geri ráð fyrir einn var breytu. Ætlast 10 voru breytu. Með öðrum orðum, gera ráð fyrir að ég gat ekki bara erfitt-númer 0,0 í lok þessarar tölur tjáningu. Jæja, ég get í raun gert eitthvað í sviga kallast steypu. Ég get kastað heiltölu 10 til flot, og ég get kastað heiltölu einn til að fljóta, eins vel. Þá stærðfræði sem er að fara að gera er í raun 1,0 deilt með 10,0, afleiðing af sem fer í fyrsta skrefið er eins og áður. Svo ef ég laun þetta eins og gera fljóta 2, og nú flýtur 2, fá I sömu answer, eins og vel. Þannig að þetta er nokkuð háttuð dæmi, til að leysa þetta vandamál með því að kynna steypu. En almennt, steypu er að fara að vera öflugur hlutur, sérstaklega fyrir Heimadæmi tvö í einu viku, þegar þú vilt að umbreyta einni gögn gerð til annar að í lok dags eiga fulltrúa á sama hátt. Í lok dags, á hverjum einasta sem við höfum talað um svona langt er bara ints undir hetta. Eða ef það er of lágu stigi fyrir þú, þá eru þeir bara tölur undir hetta. Jafnvel stafir, aftur, muna frá núlli viku, eru tölur undir hetta. Hver er að segja, við getum umbreyta á milli mismunandi tegundir af tölum ef þeir eru bara bits. Við getum umbreyta á milli tölum og bréf ef þeir eru bara bits, og öfugt. Og greiða á þennan hátt er verkfæri í forritun sem leyfir þér valdi breyta einum gögn gerð til annars. Því miður, þetta er ekki eins einfalt eins og ég hefði viljað. Ég ætla að fara aftur í flotum 1, sem var einfaldari, einfalt einn með 0,0 bætt við til hvers. Og bara eins og a fljótur upprifjunar, láta mig fara á undan og laun þetta þarftu að fljóta 2 - Því miður, þetta er að fljóta 1. Og nú skulum hlaupa fljóta 1. Og í botn, taka að ég fæ örugglega 0,1. Svo, vandamálið leyst. En ekki enn. Ég ætla nú að fara að fá smá forvitinn, og ég ætla að fara aftur í mínum printf yfirlýsingu og segja, þú veist hvað? Mig langar til að staðfesta að þetta er í raun einn tíundi. Og ég er að fara að vilja að sjá þetta að segja, fimm aukastafi. Það er ekki vandamál. Ég breyta tvö til fimm, Ég laun með gera. Ég endursýning það flýtur eins 1. Leita ansi gott. Heilindarathugunum mín gæti enda þar, en Ég fæ smá fleiri ævintýrum. Ég ætla að breyta 0,5-0,10. Ég vil sjá 10 tölustafir á eftir The aukastaf. Og ég ætla að fara á undan og laun þetta og endursýning flýtur 1. Ég svona eftirsjá að hafa prófað þetta frekar vegna stærðfræði mín er ekki svo leiðrétta lengur, það virðist. En bíddu í eina mínútu, kannski það er bara fluke. Kannski tölvan er leikur svolítið skrítið. Leyfðu mér að fara á undan og gera 20 aukastöfum og fullvissa mig um að ég veit hvernig á að gera stærðfræði. Ég veit hvernig á að forrita. Gerðu fljóta 1, laun, og fjandinn. Það er virkilega, virkilega fá langt frá markinu. Svo hvað er að gerast hér? Innsæi, byggt á forsendum okkar Fyrr um stærð gerðir gagna, hvað þarf að gerast hér undir hetta? Já? Einmitt. Ef þú vilt þetta mikið nákvæmni, og sem er Heck af a einhver fjöldi af nákvæmni - 20 tölur eftir kommu. Þú getur ekki hugsanlega fulltrúi handahófskennt tala nema þú sért með handahófskennt fjölda bita. En við gerum ekki. Fyrir fljóta, höfum við aðeins 32 bita. Þannig að ef 32 bita er aðeins hægt permuted í leið - rétt eins og menn okkar á, stigi hendur upp eða niður - í endanlegri fjölda leiðir, það er aðeins tímabundið fjölda rauntalna þú getur táknað með þeim bita. Og svo í tölvunni á endanum er að fara til verða að byrja að skera horn. Tölvan getur falið þessar upplýsingar frá okkur í smá tíma. En ef við byrjum poking á tölurnar og leita lengra og lengra í að slóð tölur í heilu tölu, þá erum við að byrja að sjá að það er reyndar er nálgun á Hugmyndin um einn tíunda. Og svo kemur í ljós, tragically, það er óendanlegur fjöldi af tölum við getum ekki tákna nákvæmlega í tölva, amk með endanlegri fjölda bita, endanlegt magn af vinnsluminni. Nú því miður, þetta stundum hefur raunverulegur-veröld afleiðingar. Ef fólk er ekki alveg að meta þetta eða svoleiðis taka sem sjálfsögðum hlut þá staðreynd að tölvan þeirra mun bara gera það þeir segja það að gera og gera ekki skilja þetta undirliggjandi framsetning upplýsingar - sem satt, eru í sumum tungumálum falinn frá notandanum ólíkt í C - sumir slæmur hlutur getur gerst. Og hvað ég hélt að við myndum gera er að taka skref til baka. Og þetta er um að átta mínútna vídeó. Það frumsýnd fyrir nokkrum árum síðan, og það gefur innsýn í raun hvað getur farið rangt þegar þú undir-þakka þetta konar upplýsingar í mjög allur-of raunverulega heimi. Ef við gætum lítil ljósin í nokkrar mínútur. Ræðumaður 1: Við aftur nú í verkfræði hamfarir á nútíma undur. Tölvur - við höfum komið öll að samþykkja oft pirrandi vandamál að fara með þeim. Bugs, veirur og hugbúnaður galli eru lítil verð til að greiða fyrir þægindi. En í hátækni og hár-hraði her og rúm program umsóknir, minnstu vandamál má mikil í hörmung. Hinn 4. júní 1996, vísindamenn reiðubúin til hefja unmanned Ariane 5 eldflaugar. Það var vopnaður vísindalegar gervihnöttum hannað til að koma nákvæmlega hvernig segulsvið jarðar áhrif með sól vindur. The Rocket var byggt fyrir Evrópu Space Agency og lyfti burt frá sinni leikni á ströndinni af Franska Gvæjana. JACK GANSSLE: Á um 37 sekúndur inn Flugferðin tók þau fyrst eitthvað var að fara úrskeiðis. Nozzles voru segulnagli í leið þeir ættu í raun ekki. Um 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, þrýsta á hnappinn, blés upp eldflaugar áður en það gæti verða hættulegir almannaöryggis. Ræðumaður 1: Þetta var jómfrúarferð að Ariane 5 og eyðingu hennar fór fram vegna galla embed í hugbúnaði eldflaugar er. JACK GANSSLE: Vandinn á Ariane var að það var a tala sem krafist er 64 bita til að tjá. Og þeir vildu að umbreyta til 16-bita tala. Þeir gera ráð fyrir að fjöldi var aldrei að fara að vera mjög stór, sem flest þessir tölustafir í 64-bita númer voru núll. Þeir voru rangar. Ræðumaður 1: The vanhæfni af einn hugbúnaður forrit til að samþykkja hvers konar Fjöldi mynda af annar var á rót bilun. Hugbúnaðarþróun orðinn mjög dýr hluti af nýrri tækni. The Ariane 4 flugeldur hefði verið mjög vel, svo mikið af hugbúnaði búið til fyrir það var einnig sem notuð eru í Ariane 5. PHILIP Coyle: Grunn vandamálið var að Ariane 5 var hraðari, hraða hraðar. Og the hugbúnaður var ekki grein fyrir því. Ræðumaður 1: The eyðileggingu eldflaugar var gríðarlegur fjárhagslega hörmung, allt vegna þess að eina mínútu hugbúnaðar villa. En þetta var ekki fyrsta gögn skipti viðskipti vandamál höfðu stríða nútíma eldflaugar tækni. JACK GANSSLE: Árið 1991, við upphaf í fyrsta Persaflóastríðinu, The Patriot eldflaugum upplifað svipað konar á viðskiptum fjölda vandamál. Þess vegna, 28 bandarískir hermenn voru drepnir og um 100 aðrir særðir þegar Patriot, sem átti að vernda gegn komandi Scuds, tókst að skjóta eldflaugum. Ræðumaður 1: Þegar Írak innrás Kúveit og America stokkunum Desert Storm í snemma 1991, Patriot eldflaugum rafhlöður voru sendar til að vernda Sádi-Arabíu og Ísrael frá Írak Scud eldflaugum árás. The Patriot er US miðlungs-svið yfirborð-til-loft kerfi framleidd með því að The Raytheon fyrirtækið. THEODORE POSTOL: The stærð af the Patriot interceptor sjálft er u.þ.b. 20-feta langur. Og það vega um 2000 kíló. Og það ber warhead af um - Ég held að það er u.þ.b. 150 £. Og Warhead sjálft er hár sprengiefni sem hefur brot í kringum það. The hlíf á warhead er hannað að bregðast við eins buckshot. Ræðumaður 1: eldflaugar eru gerðar fjórum á umbúðum og eru flutt með hálf kerru. PHILIP Coyle: The Patriot gegn eldflaugum Kerfið fer aftur á amk 20 ár núna. Það var upphaflega hannað sem loft varnir eldflaugum til skjóta niður óvini flugvélar. Í fyrsta Persaflóastríðinu, þegar að stríð kom eftir, her vildi nota það að skjóta niður Scuds, ekki flugvélum. Í Írak Air Force var ekki svo mikið vandamál. En herinn var áhyggjur Scuds. Og svo þeir reyndu að uppfæra The Patriot. Ræðumaður 1: stöðvun á óvini eldflaugum ferðast á Mach fimm var 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 þeirra Scuds næstum ómögulegt að ná. THEODORE POSTOL: Hvað gerðist er Scuds sem voru koma í voru óstöðug. Þeir voru wobbling. Ástæðan fyrir þessu var Írakar, í Til þess að fá 600 km út af 300-kílómetri-svið eldflaugum, tók þyngd af þessum fremstu warhead. Þeir gerði Warhead léttari. Svo nú Patriot er að reyna að koma á Scud. Og mest af þeim tíma, að yfirgnæfandi Meirihluti af the tími, myndi það bara fljúga með Scud. Ræðumaður 1: Þegar Patriot kerfi rekstraraðilar ljóst að Patriot misst miða þess, detonated þeir Patriots Warhead til að forðast mögulegt mannfall ef það var leyft að falla til jarðar. THEODORE POSTOL: Það var það sem mest fólk sá sem stór fireballs á himni og misskilið sem rekur af Scud warheads. Ræðumaður 1: Þótt í nótt himinn Patriots virtist vera giftusamlega eyðileggja Scuds á Dhahran þar gæti verið engin mistök Óður í árangur. Þar ratsjá kerfi Patriot er glataður utan um komandi Scud og aldrei hóf vegna hugbúnaðar galli. Það var Ísraelar sem fyrst uppgötvað að því lengur sem kerfið var á, þeim mun meiri tíma misræmi varð vegna klukku innbyggð í tölvunni kerfisins. JACK GANSSLE: Um tveimur vikum áður en Harmleikur í Dhahran, Ísraelar tilkynnt til Defense Department Fjármálakerfið var að tapa tíma. Eftir um átta klukkustundir að keyra, þeir tekið eftir því að kerfið er verða orðinn ónákvæmari. The Defense Department brugðist við með segja öllum Patriot rafhlöður að ekki láta kerfi á í langan tíma. Þeir sögðu aldrei hvað fyrir löngu var. Átta klukkustundir? 10 klukkustundir? 1000 klst? Enginn vissi. Ræðumaður 1: The Patriot rafhlöðu setti á kastalann í Dhahran og gölluð innri klukka þess hefði verið á yfir 100 klukkustundir á nótt 25 feb. JACK GANSSLE: Það elt tíma til að nákvæmni um tíunda hluta úr sekúndu. Nú, tíundi úr sekúndu er áhugavert tala vegna þess að það er ekki hægt að gefið upp í tvöfaldur nákvæmlega, sem þýðir það er ekki hægt að gefa upp nákvæmlega í allir nútíma stafræna tölvu. Það er erfitt að trúa því, en nota þetta sem dæmi. Skulum taka númer þriðjung. Einn þriðji geta ekki gefið upp í aukastaf nákvæmlega. Þriðjungur er 0,333 fara á fyrir óendanleika. Það er engin leið að gera það með alger nákvæmni í aukastaf. Það er einmitt sams konar vandamál sem gerðist í Patriot. Því lengur sem kerfið hljóp, sem versta tíma villa varð. Ræðumaður 1: Eftir 100 klst af rekstri, villa í tíma var aðeins um þriðjungur úr sekúndu. En hvað varðar að miða eldflaugum ferðast á Mach fimm, leiddi það í A hermiskekkja yfir 600 metra. Það væri banvæn villa fyrir hermenn á Dhahran. THEODORE POSTOL: Hvað gerðist er Scud ráðast var greind með snemma viðvörun gervihnöttum. Og þeir vissu að Scud kæmi almennt átt þeirra. Að þeir vissu ekki hvar það var að koma. Ræðumaður 1: Það var nú allt að ratsjá hluti af Patriot kerfi verja Dhahran að finna og halda utan um komandi óvini eldflaugum. JACK GANSSLE: The ratsjá var mjög klár. Það væri í raun að fylgjast með stöðu sem Scud og þá að spá þar sem það myndi sennilega vera the næstur tími ratsjá sendi púls út. Það var kallað svið hliðið. THEODORE POSTOL: Þá þegar Patriot ákveður nægur tími er liðinn til að fara aftur og athuga næsta stað fyrir þetta greind hlut, fer það aftur. Svo þegar það fór aftur til röng staður, sér það þá ekki mótmæla. Og það ákveður að það var enginn hlutur, það var falskur uppgötvun, og lækkar laginu. Ræðumaður 1: The komandi Scud hvarf frá ratsjá skjánum, og sekúndum síðar skellti inn í kastalann. The Scud drap 28 og var það síðasta rekinn á fyrsta Persaflóastríðinu. Tragically, the endurnýja hugbúnaður kom á Dhahran daginn eftir. The hugbúnaður galli hafði verið fastur, loka einum kafla í vandræði Saga Patriot eldflaugum. Patriot er í raun skammstöfun fyrir áföngum Array Rekja Stöðva yfir verðbólgumarkmiði bankans. DAVID J Malan: Allt í lagi, þannig að ódrukkinn dæmi, til að vera viss. Og sem betur fer, þessir lægra stigi bugs eru ekki eitthvað sem við munum yfirleitt að þakka, vissulega ekki með nokkrum af okkar Elstu af forritum. Frekar, flest galla sem þú munt kynni að vera rökrétt í náttúrunni, nokkur dæmi um setningarleg í náttúrunni þar sem númer bara virkar ekki rétt. Og þú veist það nokkuð hratt. En sérstaklega þegar við komum til lok misseris, það er að fara að verða fleiri og fleiri möguleika til raunverulega hugsa hart um hönnun af áætlunum þínum og undirliggjandi framsetning það líka, af gögnunum. Til dæmis, munum við kynna MySQL, sem er vinsæll gagnasafn vél sem þú getur notað með vefsíður til geyma gögn á bak endir. Og þú þarft að byrja að ákveða á í lok annarinnar ekki aðeins hvað tegundir af gögnum með þessum línum til að nota en nákvæmlega hversu margir bitar til að nota, hvort sem þú vilt geyma dagsetningar sem dagsetningar og tíma sem oft, og einnig hlutir eins hversu stór þú vilt að einstakt auðkenni að vera fyrir, segjum við notendur í gagnagrunninn. Í staðreynd, ef einhver ykkar hafa fengið Facebook reikninga fyrir alveg sumir tími, og þú veist hvernig á að fá aðgang Notandi kenni - sem sýnir stundum upp í þínum Profile er URL nema þú hafir valið gælunafn fyrir slóðina, eða ef þú hefur NOTAÐ Facebook Línurit API, sem aðgengilegar API sem þú getur beðið Facebook til hrár gögn - þú getur séð hvað tölustafir ID er. Og fyrir nokkrum árum, Facebook meginatriðum þurfti að breyta frá því að nota jafnvirði ints að nota lengi lengi því tímanum sem notendur koma og fara og búa til fullt af reikningum og falsa reikninga, jafnvel þeir auðveldlega mjög gátu að útblástur eitthvað eins 4 milljarða mögulegt gildi eins int. Svo meira á þessum tegundum af málum niður veginn, eins og vel. Allt í lagi, þannig að var að reka. Það var imprecision. A par af fljótur tilkynninga. Svo köflum hefjast formlega þetta kemur Sunnudagur, mánudagur, þriðjudagur. Þú munt heyra með tölvupósti síðar í þessari viku að kafla verkefni þitt. Og þú munt einnig hér á þeim tímapunkti hversu að breyta kafla ef þinn Áætlunin hefur nú breyst eða þinn þægindi stigi hefur nú breyst. Á meðan P-setja einn og tölvusnápur einn eru vegna þessa Fimmtudagur með möguleika til lengja þann tíma á að upplýsingar til föstudags á dæmigerðan hátt. Grein fyrir því að með í vanda setja upplýsingar eru leiðbeiningar um hvernig á að nota CS50 tæki, gera, eins og sumir CS50 sérstök tól eins stíl 50, sem hægt er að veita þér með athugasemdir dynamically hins gæði stíl og einnig athuga 50, sem geta veitt þér með dynamic viðbrögð sem til þín CODE í nákvæmni. Fyrirgefðu að við erum enn að strauja út nokkrum Kinks með ávísun 50. Nokkrar af bekkjarfélögum þínum sem gerði byrja um 04:00 á föstudagskvöldið þegar The sérstakur fór upp hafa tekið eftir síðan nokkrar villur sem við erum að vinna gegnum, og Apologies fyrir þá sem hefur upplifað óþarfa óánægju. The kenna er minn. En við munum fylgja eftir CS50 ræða þegar það er leyst. Svo orð á skorar sjálfum. Svo það verður í viku eða tvær áður en þú byrja að fá endurgjöf á setur vandamál vegna þess að þú ert ekki enn kominn kennsla náungi. Og jafnvel þá, munum við byrja að meta C vandamál setur áður en við fara til baka og meta klóra svo að þú fáir meira viðeigandi viðbrögð hraðar. En almennt á kennsluáætlun, CS50 vandamál setur eru metin meðfram Eftirfarandi fjögur ása - umfang, nákvæmni, hönnun, og stíl. Svigrúm er að fara til vera a tala venjulega á milli núll og fimm sem fangar hversu mikið af stykki sem þú bitu burt. Venjulega, þú vilja this til vera fimm. Þú reyndir að minnsta kosti allt. Og eftir það er margfeldisstuðull þáttur svo að gera aðeins hluti af Heimadæmi er ekki bestu leiðina. Á sama tíma, meira augljóst er mikilvægi misskilning - bara er program rétt með virða við forskrift? Þetta er vegið vísvitandi meira þungt en hinum tveimur ásum af þáttur af þremur þar sem við viðurkennum sem venjulega þú ert að fara að eyða mikið meiri tíma að elta niður sumir bugs, fá númerið þitt til að vinna, þá eru indenting það og velja viðeigandi breytu nöfn og eins og, sem er á hinum enda litrófs stíl. Það er ekki að segja stíll er ekki mikilvægt, og við munum prédika það yfir tími bæði í fyrirlestrum og í köflum. Style vísar til fagurfræði af kóðann þinn. Hefur þú valið vel-heitir breytur sem er stutt en nokkuð lýsandi? Er númerið þitt grafin sem þú hefur séð í Fyrirlestur og í samræmi með stæl 50? Loks er hönnun rétt þar í miðju. Hönnun er erfiðara einn til að setja á fingur á vegna þess að það er miklu meira huglæg. En það er ef til vill mikilvægasta þrír ása hvað varðar uppeldisfræði gildi með tímanum og að þetta mun vera Kennslan Fellow er tækifæri til veita þér með eigindlegum endurgjöf. Reyndar í CS50 þótt við höfum þessi uppskrift og skora, í lok dagsins eru þetta mjög vísvitandi mjög lítil fötunum - Point gildi milli núll og þremur og núll og fimm. Við reynum ekki að draga mjög gróft línur milli setur vandamál eða milli nemendur heldur einblína eins mikið og við getum á eigindlegum, longhand viðbrögð, annaðhvort tegund eða munnleg frá einkum kennslu náungi þinn, þú munt fá að vita nokkuð vel. En almennt, þá eru það þyngd að ýmsir ásar mun hafa. Á sama tíma, of er það þess virði að halda í huga að þú ættir ekki að gera ráð fyrir að þrjú af fimm er 60% og því u.þ.b. galli. Þrír er vísvitandi ætlað að vera konar miðjum veginum góða. Ef þú ert að fá threes á að upphafi misseris, sem er örugglega ætlað að vera góður staður til að byrja. Ef þú ætlar að fá twos, Kaup, það er örugglega sumir vinna til að borga smá meiri athygli, að nýta á köflum og Viðtalstímar. Ef þú ætlar að fá fjórum fótum og fives, frábært. En í raun, vonumst við til að sjá þróunarferil meðal nemenda - mjög einstaklingsbundið hvern nemanda, en byrja önn hér í einhverskonar tveir til þriggja svið en lýkur upp hér í 4-5 svið. Það er það sem við erum í raun að leita að. Og við hafa í huga að Delta sem þú sýna milli núll viku og viku 12 þegar ég er að gera einkunnum. Það skiptir ekki máli fyrir okkur algerlega hvernig þú sanngjarn í upphafi ef þú braut er örugglega upp og sterk. Fræðilegum heiðarleika - svo látið mig setja á minn alvarlegri rödd fyrir réttlátur a augnablik. Svo hefur þetta auðvitað greinarmun á senda fleiri nemendur en nokkur annar í sögu við auglýsingu borð, tel ég. Við höfum konar glataður telja á þetta benda á hversu oft þetta gerist. Og það er ekki vegna þess að nemendur í 50 eru einhverjar fleiri óheiðarlegur en þeirra bekkjarfélagar víðar. En átta sig líka, að við erum mjög gott á uppgötvun þetta svoleiðis. Og er það kostur að tölvunarfræði bekknum hefur í að við getum og við bera alla nemendur Vandamálið setur par-vitur gegn hverjum öðrum, ekki aðeins í ár en öll fyrri ár. Við höfum getu, eins og nemendur í bekknum, Google og finna kóðann á síðum eins github og Umræðuhópar. Það eru algerlega lausnir er CS50 p-setur fljótandi í kringum það. En ef þú getur fundið þá, við getum fundið þá. Og allt þetta er mjög mikið sjálfvirk og auðvelt og sorglegt fyrir okkur að finna. En ég vil leggja áherslu á, líka, að bóknámsbrautir er heiðarleika stefna er mjög mikið ætlað að vera mjög mikið andstæða þess anda. Reyndar, á þessu ári sem við höfum uppá nýtt hlutina í kennsluáætlun að vera svona, punktur punktur punktur, með nánar í kennsluáætlun. En overarching þema í námskeiðinu raunverulega er að vera sanngjarn. Við viðurkennum að það er veruleg upphæð uppeldis gildi í samstarfi, að einhverju leyti, með bekkjarfélögum, þar sem þú tveir eða þú þrjú eða þú ert meira standa á hvítt borð whiteboarding, svo að tala, hugmyndir þínar - skrifa út sauðakóðanum í myndum, diagramming hvað ætti Mario að vera ef þú varst að skrifa það fyrst í sauðakóðanum. Hvað ætti gráðugur reiknirit - hvernig ætti það að hegða sér á vandamál setur einn? Og svo grein fyrir því að hegðun að við hvetjum er mjög mikið meðfram þeim línum. Og í kennsluáætlun, munt þú sjá a allt fullt af byssukúlum undir a sanngjarnt flokkur og ekki sanngjarnt flokkur sem hjálpar okkur að hjálpa þú sett huga þinn um hvar við draga þá línu. Og almennt, ágætis þumalputtaregla er að ef þú ert í erfiðleikum með að leysa sumir padda og vinur þinn eða bekkjarfélaga situr við hliðina á þér, er það sanngjarnt fyrir þig að sýna honum eða henni númerið þitt og segja, hey, þú getur hjálpað mig reikna út hvað er að gerast vitlaust hér? Við gerum ekki venjulega faðma hliðar. Það er ekki rétt svar fyrir þinn vinur eða bekkjarfélaga hér að segja, ó, bara líta á minn og reikna það út frá því. Það er tegund af óraunhæft. En að hafa einhvern annan, annar heila, annað par af augum líta á skjánum eða líta á kóðann þinn og segja, þú ert viss um að þú viljir til að hafa lykkju hér? Eða ertu viss um að þú viljir að semíkommu hér? Eða ó, að villuboð þýðir þetta. Þeir eru mjög eðlilegar og hvattir hegðun. Málin sem ég var alluding fyrr sjóða niður þegar nemendur eru seint á kvöldin að gera lélega dómgreind ákvarðanir og póst númer þeirra til einhver annar eða bara að segja, hér er það í Dropbox eða Googling seint á kvöldin. Og svo ég myndi hvetja og biðja þig um, ef þú ert þá óhjákvæmilegt stundir streitu, ert þú bumping upp gegn fresturinn, þarftu ekki seint dag þar sem það er nú þegar Föstudagur á að lið, email höfuð námskeiðið 'eða mig beint. Segja, hlusta, ég er á mínum brjóta lið hér. Skulum hafa samtal og reikna það út. Gripið er til á vefnum eða einhver annar ekki sanngjarnt hegðun er aldrei lausn, og of margir af þínum bekkjarfélagar eru ekki lengur hér á háskólasvæðinu af því lélega dómgreind. En það er mjög auðvelt að skirt þessi lína. Og hér er smá mynd til að hressa þú upp frá Reddit þannig að nú allt verður í lagi. Svo a fljótur ágrip, þá, þar sem við var horfið. Svo í síðustu viku, muna að við kynna aðstæður, ekki í grunni en í C þetta sinn. Og það var einhver nýr setningafræði en raun engar nýjar hugmyndir í sjálfu sér. Við höfðum Boolean tjáningu sem við gátum eða ásamt með tveimur lóðrétt barir eða og ásamt tveimur &-merkið og sagði að bæði vinstri og rétt verður að vera satt fyrir þetta að framkvæma. Þá höfðum við rofa, sem við skoðuðum á stutta stund, en ég leggja er mjög bara öðruvísi setningafræði til að ná því sams konar markmið ef þú veist í fram hvaða tilvik þín eru að fara að vera. Við leit á lykkjur. A for lykkja er kannski algengasta, eða að minnsta kosti eitt sem fólk yfirleitt ná til dragast. Jafnvel þó að það lítur svolítið dulinn, þú munt sjá marga, mörg dæmi um þetta áður en langur, sem þú hefur þegar seint í síðustu viku. Þó lykkjur getur sömuleiðis ná sama. En ef þú vilt gera allir incrementation eða uppfæra Gildi breytu, þú þarft að gera það meira handvirkt en fyrir lykkja gerir áður. Og þá er það ekki-en lykkja, sem gerir okkur kleift að gera eitthvað í amk einu sinni á meðan eitthvað annað er satt. Og þetta er sérstaklega gott fyrir forrit eða fyrir leiki þar sem þú vilt að hvetja notandann til eitthvað að minnsta kosti einu sinni. Og þá ef hann eða hún er ekki að vinna, þú might vilja til að gera það aftur og aftur. Með breytum, á meðan, við höfðum línur af kóða eins og þetta, sem gæti vera tvær línur. Þú gætir lýsa int heitir gegn, semíkommu. Eða þú getur bara lýsa og skilgreina hana, svo að segja. Gefa það a gildi á sama tíma. Og svo loks, talaði við um aðgerðir. Og þetta var ágætur dæmi í að því leyti að það sýnir tvær tegundir af störfum. Einn er GetString (), sem, aftur, fær a band frá notandanum. En GetString () er eins konar áhugavert, svo miklu leyti sem við höfum notað það, vegna þess að við höfum alltaf notað það með eitthvað á the vinstri-hönd hlið af óákveðinn greinir í ensku jafn skilti. Það er að segja að GetString () skilar gildi. Það skilar auðvitað streng. Og þá á the vinstri-hönd hlið, við erum einfaldlega sparnaður að streng inni í breytu nefndi. Þetta er öðruvísi, í vissum skilningi, frá printf vegna printf, amk í okkar notkun hér, ekki aftur neitt. Sem innskot, er það aftur eitthvað. Við bara alveg sama hvað það er. En það er það sem er kallað aukaverkun. Og hvað er að aukaverkun í hverjum Ef við höfum séð hingað til? Hvað þýðir printf gera? Það prentar eitthvað á skjáinn, birtir texta eða tölur eða eitthvað á skjánum. Og það er bara talin aukaverkun því það er í raun ekki fötlun það aftur til mín. Það er ekki svar innan þess svartur kassi sem ég get þá ná í og ​​grípa. Það er bara að gera það á eigin, þess mikið eins Colton var tengt inn þetta svartur kassi í síðustu viku, og hann einhvern veginn dularfullur var að teikna á töfluna án mín í raun þátt. Það væri aukaverkun. En ef ég hefði reyndar að ná aftur í hér og segja, ó, hér er strengurinn frá notanda, sem myndi vera skilagildi. Og svona langt að við höfum aðeins notað virka sem aðrir hafa skrifað. En við getum í raun gert þetta konar hlutum sjálf. Þannig að ég ætla að fara inn í CS50 tæki aftur. Leyfðu mér að loka the flipi sem við hafði opna fyrir augnabliki. Og láta mig fara á undan og búa til nýja skrá. Og ég ætla að fara á undan og kalla þetta einn positive.c. Svo ég vil gera eitthvað með jákvæðar tölur hér. Þannig að ég ætla að fara á undan og gera int - Því miður - # Include. Við skulum ekki gera það sama mistök eins og áður. Int helstu (tóm), opin hrokkið borsveif, lokað hrokkið Brace. Og nú vil ég að gera eftirfarandi. Ég vil skrifa forrit sem krefst þess að notandinn gefur mig jákvæða heiltölu. Svo það er engin GetPositiveInt virka í CS50 bókasafn. Það er bara GetInt (). En það er allt í lagi vegna þess að ég hef býr sem ég get leggja lítið meira þvingun á þessi gildi. Ég gæti gert eitthvað eins og this. Svo int n - og ef þú ert að skrifa eftir, bara átta Ég ætla að fara til baka og breyta einhverjum hlutum í augnablikinu - svo jafnt int n GetInt (). Og það er að fara að setja int inni n. Og láta mig vera meira lýsandi. Leyfðu mér að segja eitthvað eins og ég krefjast þess að þú gefur mér jákvæð heiltala. Allt í lagi. Svo bara smá leiðbeiningar. Og nú hvað get ég gert? Jæja, ég veit nú þegar frá einföldum minn skilyrði eða útibú, bara eins og ég hafði í grunni, gæti ég sagt eitthvað eins og ef n er minna en eða jafnt og núll, þá vil ég gera eitthvað eins og, sem er ekki jákvæð. Og þá gæti ég gert - OK, en ég vil endilega fá að int. Svo ég gæti farið upp hér og ég gat góður af afrita þetta og undirlið þetta. Og þá, OK. Þannig að ef n er minna en eða jöfn núlli að gera þetta. Nú, hvað ef notandinn ekki vinna? Jæja, þá ætla ég að láni þetta hér. Og þá fer ég hér og hér og hér. Svo er þetta greinilega ekki lausnin, ekki satt? Vegna þess að það er enginn endir í sjónmáli. Ef ég vil krefjast þess að notandi gefur mér jákvæð heiltala, get ég reyndar fá int. Ég get þá stöðva fyrir þessi int. En þá vil ég athuga það aftur og athuga það aftur og athuga það aftur. Svo augljóslega, hvað er betra reisa að vera með hér? Allt í lagi, svo einhvers konar lykkju. Þannig að ég ætla að losna tæplega þetta allt. Og ég vil fá þetta int minnsta kosti einu sinni. Þannig að ég ætla að segja að gera - og ég ætla að koma aftur til en á aðeins augnablik - nú, að gera hvað? Ég ætla að gera int n fær GetInt (). OK. Svo er það mjög gott. Og nú hvernig oft gera Ég vil gera þetta? Leyfðu mér að setja printf inni í lykkju svo ég geti krafist aftur og aftur, ef þörf krefur. Og hvað ég vil þetta en skilyrði til að gera? Ég vil halda þessu en hvað er málið? Já. N er minna en eða jafn og núll. Svo þegar, höfum við verulega hreinsa þennan kóða upp. Við höfum fengið að láni mjög einfalt reisa - gera-en lykkja. Ég hef stolið bara mikilvægt línur af kóða sem ég byrjaði að afrita og líma, sem var ekki skynsamlegt. Og svo núna er ég að fara til raunverulega líma það hér og bara gera það einu sinni. Og nú hvað ég vil gera í mjög lok þessa áætlun? Ég verð bara að segja eitthvað einfalt eins, takk fyrir - og Ég geri% i fyrir int - sviga n, komma, og þá stinga í n, semíkommu. Allt í lagi. Svo skulum sjá hvað gerist núna þegar ég keyra þetta forrit. Ég ætla að fara á undan og gera jákvætt. Fjandinn. Nokkrar villur. Svo láta mig fletta aftur upp til fyrsta. Ekki vinna með þeim aftur. Vinna með þeim úr efstu niður svo þeir Cascade og aðeins eitt rangt. Óbeina yfirlýsingu um virka GetInt (). Já. Svo það var ekki nóg. Ég gerði eins konar sömu mistök en svolítið öðruvísi að þessu sinni. Ég þarf að ekki aðeins innihalda stdio.h en einnig cs50.h, sem felur í sér svokölluð yfirlýsingar um að fá int, sem kenna á þvottavélinni, eða kennir C hvað GetInt () er. Svo láta mig vistað póstinn. Ég ætla að hunsa aðrar villur vegna þess að ég ætla að vona að þær séu einhvern veginn tengjast villa Ég fastur þegar. Svo láta mig fara á undan og laun með gera jákvætt, Enter. Fjandinn. Þrjár villur, enn. Leyfðu mér að fletta upp til fyrsta. Ónotaðar breyta n. Við höfum ekki séð þetta áður. Og þetta líka, er svolítið dulinn. Þetta er the framleiðsla af the þýðanda. Og hvað sem hápunktur lína þar - positive.c :9:13 - er að segja, það er að segja á línu níu positive.c, á 13. staf, 13. dálki, gerði þér þetta mistök. Og einkum, er það að segja mig ónotaður breyta n. Svo skulum sjá - lína níu. Ég er að nota N í þeim skilningi að Ég ætla að gefa það a gildi. En hvað þýðandinn er ekki eins og er að ég er ekki að því er virðist að nota það. En bíddu í eina mínútu, ég er með það. Í samræmi 11, ég er að nota það hér. En ef ég skruna niður frekar á positive.c :11 - svo á línu 11, eðli 12, þýðanda er að segja mér, notkun undeclared Auðkenni n. Svo undeclared þýðir að ég hef ekki tilgreint það sem breytu með gögn tegund. En bíddu í eina mínútu. Ég gerði einmitt það í línu níu. Svo einhver er virkilega ruglaður hér. Það er annað hvort ég eða þýðanda vegna í samræmi níu, aftur, ég lýsa yfir int n, og ég er að framselja það skilagildi GetInt (). Þá er ég að nota þá breytu n í takt 11 og athuga hvort gildi þess er minni en eða jafnt og núll. En þetta er greinilega slæmt og brotinn hvers vegna? Segja það aftur? Æ, ég verð að lýsa N áður inn í lykkju. En hvers vegna? Ég meina, lagt við bara svolítið síðan að það er allt í lagi að lýsa breytum allt á einni línu og þá úthluta þeim sum gildi. A Global breyta - við skulum koma aftur til að hugmynd í aðeins augnablik. Hvers vegna viltu að ég að setja það utan lykkju? Það er. Einmitt. Svo, að vísu, nokkuð counterintuitive, Leyfðu mér að draga. Þegar þú lýsa n inni af blokk þarna - sérstaklega innan þá hrokkið axlabönd - að breyta n hefur hvað er kallað Umfang - óskyld sindur kerfi okkar í námskeið - en hefur svigrúm sem er takmörkuð við þá hrokkið axlabönd. Með öðrum orðum, yfirleitt ef þú lýsa breytu inni a setja af hrokkið axlabönd, að breyta til aðeins inni af þeim hrokkið axlabönd. Svo eftir að rökfræði einn, jafnvel þótt Ég hef lýst N í línu níu, það raun hverfur úr umfangi, hverfur úr minni, svo að segja, Þegar ég högg línu 11. Vegna lína 11, því miður er utan þessara hrokkið axlabönd. Svo ég því miður ekki hægt að laga þetta með því að fara aftur að því sem ég gerði það áður. Þú gætir á fyrst að gera þetta. En hvað ert þú nú ekki gera hagsveiflu? Þú ert augljóslega ekki að fá The int hagsveiflu. Svo við getum yfirgefa GetInt (), og við ætti yfirgefa GetInt () inni lykkja því það er það sem við viljum pester notanda fyrir aftur og aftur. En það er nægja til að fara allt að línu, segja, sex. Int n, semíkommu. Ekki gefa það a gildi enn vegna þess þú þarft ekki að strax. En nú niður hér, tilkynning - þetta væri mjög auðvelt mistök. Ég vil ekki að skuggi fyrri minn yfirlýsing um n. Ég vil nota n að raun er til staðar. Og svo nú í línu 10, Ég tengt n gildi. En í takt sex, lýsa ég n. Og svo get ég eða get ég ekki nota það í línu 12 núna? Ég get því milli sem hrokkið axlabönd er n lýst núna? Sá upp hér á línu fimm. Við einn hér á 14. línu. Þannig að ef ég súmma nú út, vista þessa skrá, fara aftur inn og hlaupa gera jákvætt, það saman að þessu sinni. Svo er það nú þegar framfarir. Rista. . / Jákvætt, Enter. Ég krefst að þú gefa mér jákvæð heiltala. Neikvætt 1. Neikvætt 2. Neikvætt 3. Núll. Einn. Og takk fyrir einn er hvað er nú prentuð. Leyfðu mér að reyna eitthvað annað, út af forvitni. Ég hef verið sagt að inntak heiltala. En hvað ef ég tegund í staðinn í lamb? Svo þú sérð nú öðruvísi hvetja - reyna aftur. En hvergi í númerið mitt gerði ég skrifa retry. Svo þar, væntanlega er þetta reyna aftur hvetja að koma frá, myndir þú segja? Já, frá GetInt () sjálft. Svo eitt af því sem starfsfólk CS50 nær fyrir þig, að minnsta kosti í þessir fyrstu vikur, er að við höfum skrifað talsverða af villa stöðva til að tryggja að ef þú kallar GetInt (), verður þú að minnsta kosti komast aftur við int frá notandanum. Þú munt ekki fá a band. Þú munt ekki fá bleikju. Þú munt ekki fá eitthvað annars að öllu leyti. Þú munt fá int. Nú, gæti það ekki verið jákvætt. Það gæti ekki verið neikvæð. Við gerum engar ábyrgðir í kringum það. En við munum pester notandi til að reyna aftur, reyna, reyna fyrr en hann eða hún raunverulega samstarf. Sama hátt, ef ég 1,23, það er ekki int. En ef ég tegund í, segjum, 50, sem gefur mér gildi sem ég vildi. Allt í lagi. Svo ekki slæmt. Einhverjar spurningar um hvað við höfum bara gert? Lykillinn takeaway vera, að vera skýr, ekki svo mikið að lykkja, sem við höfum séð áður jafnvel þó að við höfum í raun ekki notað það, en málið umfangi, þar breytur er einungis hægt að aðeins hægt að nota á næstunni tiltekins gildissvið. Allt í lagi, láttu mig taka tillögu þú gerðir áðan, að um Global breyta. Sem innskot, snýr það út að annar lausn á þessu vandamáli, en yfirleitt rangt lausn eða illa hannað lausn, er að lýsa breytu eins hvað er kallað Global breyta. Nú er ég eins konar brot skilgreiningu mína af umfangi því það eru engin hrokkið axlabönd efst og mjög neðst á skránni. En vísbendingu um að er að nú í takt fjórum, n er alþjóðlegt breytu. Og eins og nafnið gefur til kynna, það er bara alls staðar aðgengilegt. Scratch hefur í raun þessir. Ef þú notaðir breytu, þú might muna þú þurftir að velja ef það er fyrir þennan Sprite eða alla sprites. Jæja, allir sprites er bara skýrari leið til að segja alþjóðlegt. Já? Ah, mjög góð spurning. Svo muna að í fyrstu útgáfu á númerið mitt, þegar ég rangt lýst og skilgreint n í línu níu - Ég lýsti því sem breytu og ég gaf það gildi með framsal rekstraraðila - þetta gaf mér tvo villur. One, þá staðreynd að n var ekki notað, og tveir, sem í línu 11 það var bara ekki lýst. Svo fyrsta sem ég gerði ekki heimilisfang á þeim tíma. Það er ekki stranglega villa að lýsa breytu en ekki nota það. En eitt af því sem við höfum gert í The CS50 tæki, vísvitandi, pedagogically er við höfum sveif upp væntingar þýðanda að gera viss um að þú ert að gera hlutina ekki bara rétt en í raun rétt. Vegna þess að ef þú ert að lýsa yfir breytu eins n og aldrei nota það, eða nota það rétt, hvað þá er það að gera þarna? Það þjónar sannarlega ekki tilgangi. Og það er mjög auðvelt með tímanum, ef þú stilla ekki eiga tölvuna í Þannig, að bara hafa númer sem hefur litlu leifar hér, leifar þar. Og þá mánuðum seinna þú lítur til baka og þú ert eins og, af hverju er þessi lína af númer þar? Og ef það er engin góð ástæða, það ekki gagnast þér eða samstarfsfólk þitt niður veginn til að hrasa yfir það þá. Sem innskot, þar er að koma frá? Jæja, muna að í hvert skipti sem við safna saman program, allt þetta efni er verið að prenta. Þannig að við munum koma aftur til þetta. En aftur, gera er a gagnsemi þessi sjálfvirkan the aðferð af gerð af keyra raunverulegan þýðanda kallað clang. Þessi hlutur, munum við loksins sjá, hefur að gera með kembiforrit með sérstöku forrit sem heitir aflúsara. Þetta hefur að gera með hagræðingu í númer - meira um það í framtíðinni. Std = c99 - þetta þýðir bara að nota 1999 útgáfuna af C. C hefur verið í kringum jafnvel lengur en að, en þeir gerðu sumir ágætur breytingar 10 plús ár síðan. Og hér er viðeigandi sjálfur. Við erum að segja að eitthvað sem áður hefði verið viðvörun villu veg nemandanum frá söfnun. Og veggur þýðir að gera það fyrir allt fullt af hlutum, ekki bara tengjast breytum. Og þá láta mig fletta að í lok þessa línu. Og þetta líka, munum við að lokum koma aftur til. Þetta er augljóslega nafn skráin ég saman. Þetta minnir á nafnið á skránni Ég outputting eins og nafnið af runnable áætlun mína. Þetta-lcs50 þýðir bara að nota CS50 bókasafn, og allir núll og sjálfur að starfsfólk skrifaði og saman fyrr á þessu ári, samþætta þá inn í áætlun mína. Og einhver veit hvað-LM er? Það er stærðfræði bókasafn, sem er bara þarna jafnvel ef þú ert ekki gera neina stærðfræði. Það er bara sjálfkrafa veitt okkur með að gera. Jæja, láttu mig gera eitt annað dæmi hér með að opna nýja skrá. Og láta mig spara þetta einn eins string.c. Það kemur í ljós að þegar við tölum um gögn gerðir í dag, það er jafnvel meira fara á undir hetta en við höfum séð hingað til. Svo láta mig gera fljótlega fljótur program. Hafa stdio.h. Og ég spara það. Og þú veist, láttu mig ekki gera sömu mistök aftur og aftur. Hafa cs50.h. Og láta mig fara á undan nú og gera int helstu (tóm). Og nú vil ég bara að gera áætlun sem gerir þetta - lýsa streng kallað s og fá band frá notandanum. Og láta mig gera a lítill leiðbeiningar hér - vinsamlegast gefa mér band - svo notandinn veit hvað á að gera. Og svo hérna fyrir neðan þetta, Ég vil gera eftirfarandi - fyrir int i fær núll. Aftur, tölvunarfræðingar yfirleitt byrja að telja á núlli, en við gátum gera það einn ef við vildum virkilega. Nú ætla ég að gera ég er minna en band lengd s. Svo strlen - S-T-R-L-E-N - aftur er það nákvæm vegna þess að það er auðveldara að slá, jafnvel þó að það er lítið dulinn. Það er hlutverk sem við höfum ekki notað áður en bókstaflega þýðir að - aftur til mín númer sem sýnir lengd strengsins að notandinn slegið inn. Ef þeir slegið í halló, það myndi skila fimm vegna þess að það er fimm bréf í halló. Þá, á hverjum endurtekning á Þessi lykkja, ég plús plús. Svo aftur, a staðall smíða jafnvel þótt þú ert ekki alveg of þægilegt eða þekkja það enn. En nú á hverri ítrun þessarar lykkju, taka eftir hvað ég ætla að gera. Ég vil fara á undan og prenta út einn staf - svo% C sviga n á nýja línu. Og þá, þú veist hvað ég vil gera? Hvað er orðið að notandinn slær í, eins og halló, ég vil að prenta H-E-L-L-O, einn staf í hverja línu. Með öðrum orðum, ég vil fá á einstakir bókstafir í streng, þar allt þar til nú strengur hefur bara verið röð af stöfum. Og það kemur í ljós ég get gert s, krappi, i, loka krappi, loka sviga, semíkommu. Og ég hef að gera eitt í viðbót. Það er í skrá sem kallast string.h að strlen er lýst. Svo ef ég vil nota þessi virka, Ég þarf að segja þýðanda, búist við að nota það. Nú láta mig fara á undan og gera the program sem heitir band. Punktur, rista, band. Vinsamlegast gefið mér streng. Ég fer á undan og slá það. Halló, í öllum húfur, Enter. Og nú eftir ég hef prentað þetta einn staf á eftir öðru. Svo er nýja smáatriðum hér að a band, í lok dagsins, er hægt að nálgast með því að einstaklingur sinni stafir með því að kynna veldi krappi tákn. Og það er vegna þess að a band undir hetta er örugglega röð stafir. En hvað er sniðugt um þá er í RAM tölvunnar - Mac, PC, hvað sem það er - þeir eru bókstaflega aftur til baka til baka - H-E-L-L-O - á einstaklingur, aðliggjandi bæti í minni. Svo ef þú vilt fá á áttunda svo bæti, sem í þessu lykkju væri krappi núll, krappi einn, krappi tveir, krappi þrír, krappi fjögurra - sem er núll verðtryggð fram fimm - sem mun prenta út H-E-L-L-O á eigin línu. Nú, sem beitu, láttu mig sýna þér tegund af hlutur þú munt að lokum verða fær um að skilja, að minnsta kosti með nokkrum loka útlit. Fyrir einn, það sem við með í dag ' dæmi, ef þú vilt, er í raun einn af fyrstu Jailbreaks fyrir iPhone. Jailbreaking þýðir sprunga símann svo þú getur raunverulega notað hana á mismunandi flutningafyrirtæki eða setja eigin hugbúnaður. Og þú munt taka þetta lítur alveg dulinn, líklega. En líta á þetta. The iPhone var greinilega klikkaður með á fyrir lykkja, sem ef ástand, sem annars ástand, fullt af störfum við höfum ekki séð. Og aftur, þú vilja ekki fyrstu sýn líklega skilja hvernig þetta virkar. En allt sem við tökum svoleiðis sjálfsögðum hlut í nútíma lífi okkar reyndar tilhneigingu til að draga jafnvel að sumir þessara grundvallaratriði sem við höfum verið horfa á. Leyfðu mér að fara á undan og opna einn önnur forrit, holloway.c. Svo þetta, of, er eitthvað sem þú ætti í raun ekki að vita. Jafnvel ekkert of the staff eða ég gat sennilega reikna þetta út með því að horfa á það vegna þess að þetta var númer einhvers sem var lögð til hvað er sögulega þekktur sem obfuscated C keppni, þar sem þú skrifa forrit sem safnar og keyrir en er svo fjandinn dulinn enginn maður getur skilið hvað það er að fara að gera þar þeir hlaupa í raun það. Svo örugglega, ef þú lítur á þetta kóða, sjá ég skipta. Ég sé helsta. Ég sé þessar hornklofum felur einhvers konar fylki. Er einhver sem vill giska á hvaða þetta forrit í raun er ef ég keyrt Holloway? Já. OK. Vel gert. Svo að aðeins starfsfólk og ég get ekki fundið hvað þessir hlutir gera. Og nú loks, láttu mig fara á undan og opna eitt annað forrit. This einn - aftur, munum við gera kóðann á netinu - þetta er bara konar nokkuð til að líta á. Allt sem þeir gerðu er ýtt á rúm bar töluvert. En þetta er alvöru kóða. Svo ef þú heldur það er nokkuð, ef við í raun að keyra þetta á að hvetja, loksins að þú munt sjá hvernig við gæti gert hlutina svona. Þannig að við munum láta þig á að huga og sjá þig á miðvikudag. [Tónlist spila] Ræðumaður 2: Í næsta CS50, að TFS leiksvið a uppreisn. Ræðumaður 3: Það er hann. Náðu honum! [Tónlist spila]