[Speel van musiek] David J MALAN: Alle reg, Welkom terug na CS50. Dit is die begin van die week twee. 'N woord van een van ons vriende op die kampus - As jy belangstel, moontlik, óf nou of in die toekoms 'n term selfs, een keer meer gemaklik, onderrig middel van die skool studente 'n bietjie iets oor die rekenaar wetenskap, doen hoof tot die URL. Hulle is in die besonder behoefte op die oomblik van onderwysers, veral as jy ' het 'n paar blootstelling aan rekenaarwetenskap. So onthou dat dit die laaste tyd, het ons ' 'n paar data tipes in C en jy mag begin het om jou hande vuil met hierdie dusver in probleem stel een. En ons het 'n kar. So in 'n bietjie tegniese terme, wat is 'n kar as jy dit vandag ken? So dit is 'n karakter, maar laat se meer presies te wees nou. Wat bedoel ons met karakter of individu kar? 'N nie-numeriese karakter - so nie noodwendig nie. Dit blyk dat selfs getalle, selfs punktuasie en briewe is verteenwoordig met hierdie data tik bekend as 'n kar. So dit is nie noodwendig alfabetiese. Ja? So dit is 'n ASCII karakter. So as jy dink terug na week nul, wanneer ons het ons byte van vrywilligers kom en in besit wees van hul hande in die lug of nie al nie, hulle verteenwoordig stukkies. Maar gesamentlik as 'n groep van agt, Hulle verteenwoordig 'n greep. En ons het die idee van ASCII op daardie lesing, wat is bloot 'n kartering tussen getalle en letters. En ASCII gebruike, soos die mense geïmpliseer, agt stukkies 'n karakter te verteenwoordig. So Gevolglik, as agt stukkies kan elke neem op een van die twee waardes - nul of een - Dit beteken daar is twee moontlikhede vir hierdie persoon - nul of een - twee vir hierdie persoon, twee vir hierdie persoon, twee vir hierdie een. So 'n totaal van twee keer twee keer twee keer twee keer twee - so twee die agtste in totaal. So is daar 'n totale aantal van karakters 256 moontlik dat jy kan stel met agt stukkies. Nou, dié van julle wat spreek Asiatiese tale kan weet dat daar is meer karakters in die wêreld as net As en ontbyt en Cs en Ds. En inderdaad, beteken ASCII nie genoeg vir 'n klomp van die tale van die wêreld. Maar meer op dat 'n ander tyd. Vir nou, weet dat in C as jy wil 'n brief, 'n stuk te verteenwoordig punktuasie, of net iets karakter in die natuur, gebruik ons ​​'n kar. En dit is een byte of agt stukkies. Hoe gaan 'n int? Wel, 'n int 'n heelgetal is. Hoeveel stukkies, as jy onthou, was 'n heelgetal tipies? Enigeen onthou? So is dit tipies 32. Dit hang eintlik op die rekenaar wat jy gebruik. Maar in die toestel, en in 'n baie rekenaars, dit is 32 stukkies of vier grepe - agt keer vier. En ints net gebruik word vir die berging van getalle, hetsy negatief, positief of nul. En as jy het 32 ​​stukkies en jy net omgee vir positiewe getalle, kan iemand ball hoeveel moontlike heelgetalle 'n rekenaar kan stel vanaf nul tot? So dit sou wees om twee van die 32, wat is ongeveer vier miljard gestyg. So het hierdie magte van die twee gaan wees herhalende temas in Rekenaarwetenskap. Soos ons sal sien, hulle is baie gerieflik om te werk met selfs al is dit nie heeltemal maklik om die wiskunde te doen in 'n mens se kop. So sal ons sê ongeveer vier miljard gestyg. Nou, 'n lang lang - jy kan soort van raaiskoot. Dit is meer as 'n int. Hoeveel stukkies? So 64 stukkies of agt grepe. Dit beteken net dat jy selfs kan stel groter getalle, groter positiewe of groter negatiewe getalle. En hoe oor dryf? Dit is 'n drywende punt waarde van 32 stukkies. Dit is net 'n reële getal, iets met 'n desimale punt. Maar as jy in plaas daarvan moet meer plekke na die desimale punt of jy wil verteenwoordig 'n groter getal met 'n paar fraksie nadat dit, kan jy gebruik om 'n dubbel, wat 64 stukkies. Maar daar is 'n interessante afhaal hier. So as ints word beperk deur 32 stukkies en selfs lank longs word beperk deur die 64 stukkies, dié soort van roep die vraag, Wat gebeur as jy eintlik wil om te tel hoër as 4 miljard vir 'n int? Wel, jy moet net gebruik om 'n lang lang. Maar wat as jy wil hoër telling as twee van die 64, gee of neem? Nou, dit is 'n groot aantal. Maar uiteindelik, jy kan eintlik omgee vir hierdie soort van waardes, veral as jy met behulp van 'n databasis en die begin van baie, baie te samel en baie van die data en die toeken van unieke nommers op elke stukkie van die data. So het ons soort van 'n probleem. En op soortgelyke wyse, met drywende punt waardes - dryf of dubbels - As jy net 'n beperkte aantal stukkies, hoeveel totale getalle kon jy moontlik voor te stel? Wel, dit is minder duidelik wanneer jy behels 'n desimale punt. Maar dit is sekerlik eindig. As jy het 'n beperkte aantal stukkies, 'n beperkte aantal mense, 'n beperkte aantal gloeilampe, seker jy kan verteenwoordig slegs 'n beperkte aantal swaai punt waardes. Maar hoe baie reële getalle is hulle in die wêreld? Daar is 'n oneindige. So dit is soort van 'n probleem, want ons het nie 'n oneindige hoeveelheid geheue of RAM binnekant van ons rekenaars. So 'n paar uitdagende dinge kan gebeur. So laat ons gaan voort en probeer hierdie om hier te druk. Laat my gaan voort en oop te maak gedit. Ek gaan om voort te gaan en 'n lêer stoor genoem "floats0.c" net om te wees ooreenstemming met 'n voorbeeld wat aanlyn beskikbaar, as jy wil. En ek gaan om voort te gaan en definieer dit as volg: - Ek gaan om voort te gaan en te sê, int belangrikste leemte, soos ons dikwels doen. En dan in hierdie program, ek gaan verklaar myself 'n float, so 'n 32-bit veranderlike genoem f, arbitrêr. En dan gaan ek te stoor in dit Ek weet nie, 'n tiende, so 0,1. So ek gaan om te sê dat as een gedeel deur 10, wat is perfek regmatige in C. En dan op die tweede reël, het ek eenvoudig wil om uit te druk wat waarde. So onthou wat ons kan gebruik die bekende printf. Ons wil nie% te gebruik ek vir 'n int. Ons wil% f te gebruik vir 'n float. En dan gaan ek agteroorskuisstreep n om te doen, Sluit kwotasie, komma, f, kommapunt. So hier is my program. Daar is reeds 'n fout. Het iemand vir wie dit gedruk reeds wil ten minste wys een fout wat ek gemaak het? Ja? Ja. Ek het vergeet om "# sluit" op die top, hulle simptoom van wat as ek probeer om te stel dit gaan wees dat die samesteller gaan op my skreeu, sê undefined simbool of iets tot daardie effek. Dit is nie iets verstaan hou printf. So ek gaan om dit te doen "# include ", Stoor die lêer. En nou is dit in 'n beter vorm. Maar Ek gaan ook om te wys uit een nuwe detail vandag. In bykomend tot die spesifiseer plek houers soos% f% i% s, kan jy soms beïnvloed die gedrag van daardie plekhouer. Byvoorbeeld, in die geval van 'n drywende punt waarde, indien ek wil net een desimale plek te vertoon nadat die tydperk, kan ek eintlik doen 0.1f. So in ander woorde, ek skei die f en die persentasie teken met 0,1, net vertel printf, kan jy 'n hele klomp van die nommers na die desimale wys vir my. Maar ek wil net een van hulle te sien. So ek gaan om voort te gaan nou en red hierdie program, gaan in my terminale venster, en ek gaan om voort te gaan en tipe maak float 0, betree. Ek sien dat ietwat kriptiese lyn wat sal begin om meer sin te maak as ons terg dit uitmekaar hierdie week en volgende. Nou gaan ek om voort te gaan en hardloop float nul. En, damn. So daar is nog 'n fout hier vir een of ander rede. Ek is redelik seker dat 'n tiende, of een gedeel deur 10, is nie 0.0. Miskien is ek net nie op soek na by genoeg syfers. So hoekom ek nie sê twee 0,2 twee te sien desimale plekke plaas van net een. Laat my toe terug te gaan na my terminale venster hier en druk 'n paar keer te sien my geskiedenis. Moenie maak dryf zero weer en dan weer op. En nou gaan. En nou, ek is redelik seker dit is verkeerd. En ek kon doen, drie en vier, en ek is waarskynlik gaan om te hou terwyl nulle. So waar is die fout? Een gedeel deur 10 behoort te wees 0.1. Iemand wil 'n steek te neem wat die kern van die probleem is? Ja? Hulle is albei heelgetalle. So, wat? So met een gedeel deur 10, wat wat ek doen in rekenkundige. En ek kry 0,1. Ja. En so is dit inderdaad dat die kwessie. Wanneer jy 'n heelgetal in 'n rekenaar en jy deel dit deur 'n ander getal, die rekenaar by verstek gaan aanvaar dat jy 'n heelgetal. Die probleem is egter, natuurlik, is dat 0,1 is nie 'n heelgetal. Dit is 'n reële getal is. En wat die rekenaar nie deur die standaard is dit net gooi weg alles na die desimale punt. Dit maak nie rond of af per se. Dit gooi net alles weg na die desimale punt. En nou wat sin maak. Want nou is ons duidelik gelaat met 'n nul. Maar wag 'n minuut. Ek is nie sien nie 'n int nul. Ek het eintlik sien 0.00. So hoe versoen ek dit nou? As 'n mens deur 10 gedeel word is nul, maar ek is sien 0.00, is waar dit kry omskep terug na 'n reële getal wees? Ja. Presies. So hier in lyn vyf, toe ek eintlik winkel wat 0,1, wat dan afgekap na nul, binnekant van 'n vlot, dit is effektief gelykstaande aan stoor dit nie as 'n int, maar inderdaad, as 'n float. Verder het ek dan met behulp van printf te uitdruklik druk dat die getal tot twee desimale plekke, selfs al is daar kan nie eintlik enige. So hierdie soort van suig, reg? Blykbaar kan jy nie wiskunde, ten minste op hierdie vlak van presisie, in 'n rekenaar. Maar seker daar is 'n oplossing. Wat is die eenvoudigste oplossing wat ons kon dalk doen, selfs net intuïtief hier te los hierdie? Ja? Draai die heelgetalle in - ja. Selfs as ek is nie heeltemal seker wat is regtig hier aangaan, indien dit fundamenteel te doen het met hierdie twee om ints, wel, hoekom het ek nie maak dat 10,0, die maak van hierdie 1.0, weer stoor die lêer. Laat my toe terug te gaan na die bodem en heropstel. Laat my nou weer uit te voer. En daar - nou, ek het my 'n tiende verteenwoordig as 0,10. Alle regte. So dit is nie sleg nie. En laat my wys een ander manier Ons kon die probleem nie. Laat my terug eintlik rol in tyd wanneer ons het dit as een tiende 'n oomblik gelede. En laat my voort te gaan en weer stoor die lêer as 'n ander lêer naam, net om te het 'n bietjie kontrolepunt. So dit was 'n weergawe. En nou, laat my gaan voort en nog een weergawe. Ons sal noem hierdie weergawe twee nul kruip. En ek gaan om te plaas nie hierdie - jy weet wat? Voeg dot nul werk in hierdie geval. Maar veronderstel die een was 'n veranderlike. Veronderstel is om 10 was 'n veranderlike. Met ander woorde, veronderstel dat ek nie kon net hard-kode 0,0 aan die einde van hierdie rekenkundige uitdrukking. Wel, ek kan werklik iets in hakies genoem gooi. Ek kan gooi dat heelgetal 10 tot 'n vlot, en ek kan dit heelgetal een gooi 'n dryf, as well. Dan is die wiskunde wat gaan gedoen word effektief 1,0 gedeel deur 10,0, die gevolg van wat gaan in f as tevore. So as ek heropstel dit as maak dryf 2, en nou dryf 2, ek kry dieselfde beantwoord, as well. So, dit is 'n redelik slinks voorbeeld, Om hierdie probleem op te los deur die instelling van giet. Maar in die algemeen, is casting gaan wees 'n kragtige ding, veral vir probleem sit twee in 'n week se tyd, toe jy wil 'n data tipe om te skakel na 'n ander wat aan die einde van die dag verteenwoordig word op dieselfde manier. Aan die einde van die dag, elke enkele ding wat ons oor gepraat het tot dusver is net ints onder die kap. Of as dit is te laag-vlak vir jy, hulle is net nommers onder die kap. Selfs karakters, weer, onthou vanaf week nul is, is getalle onder die kap. Dit is om te sê, kan ons skakel tussen verskillende soorte getalle as hulle is net stukkies. Ons kan omskep tussen getalle en briewe as hulle net stukkies, en omgekeerd. En giet in hierdie manier is 'n meganisme in ontwikkeling wat kan jy met geweld verander een data tipe na 'n ander. Ongelukkig is dit nie so eenvoudig as ek dalk gehad het. Ek gaan om terug te gaan na dryf 1, wat was die eenvoudiger, meer eenvoudig een met 0,0 bygevoeg op elk. En net so 'n vinnige opknappingskursusse, Laat my gaan voort en heropstel dit maak dryf 2 - Jammer, hierdie is maak dryf 1. En nou, laat ons loop dryf 1. En in die onderkant, let dat ek inderdaad net 0,1. So, probleem opgelos. Maar nog nie. Ek gaan nou na 'n bietjie nuuskierig, en ek gaan om terug te gaan na my printf verklaring en sê, jy weet wat? Ek wil graag dat dit te bevestig is regtig 'n tiende. En ek gaan om te wil om dit te sien aan, sê, vyf desimale plekke. Dit is nie 'n probleem nie. Ek verander die twee aan 'n vyf, Ek heropstel met maak. Ek tik dit as dryf 1. Op soek na mooi goed. My gesonde verstand tjeks kan daar eindig nie, maar Ek kry 'n bietjie meer avontuurlustig. Ek gaan 0,5 te verander na 0,10. Ek wil 10 syfers om te sien na die desimale plek. En ek gaan om voort te gaan en heropstel hierdie en tik dryf 1. Ek het soort van spyt dat hy getoets hierdie verder, want my wiskunde is nie so korrek nie, dit lyk. Maar wag 'n minuut, miskien dit is net 'n gelukskoot. Dalk is dit die rekenaar wat 'n bietjie vreemd. Laat my gaan voort en doen 20 decimaaltekens en gerus te stel myself dat ek weet hoe wiskunde te doen. Ek weet hoe om te program. Maak dryf 1, heropstel, en verdoem nie. Dit is regtig, regtig om ver van die merk. So, wat gaan hier aan? Intuïtief, gegrond op ons aannames vroeër oor die grootte van data tipes, wat moet hier gebeur onder die enjinkap? Ja? Presies. As jy wil dit baie presisie, en dit is 'n heck van 'n baie van presisie - 20 syfers na die desimale punt. Jy kan dalk nie verteenwoordig 'n arbitrêre getal, tensy jy het 'n arbitrêre aantal stukkies. Maar ons doen nie. Vir 'n vlot, ons het net 32 ​​stukkies. So as 32 stukkies kan net verschuiving word in 'n manier - net soos ons mense op, stadium hande op of af - in 'n beperkte aantal maniere, daar is net 'n beperkte aantal van reële getalle wat jy kan stel met daardie stukkies. En so het die rekenaar uiteindelik gaan hê om te begin sny hoeke. Die rekenaar kan wegsteek dié besonderhede van ons vir 'n bietjie van die tyd. Maar as ons begin steek met die nommers en soek verder en verder in die sleep getalle in die volle getal, dan kan ons begin om te sien dat dit eintlik benader die idee van 'n tiende. En so dit blyk, tragies, is daar 'n oneindige aantal getalle Ons kan nie presies verteenwoordig in 'n rekenaar, ten minste met 'n beperkte aantal stukkies, 'n beperkte bedrag van die geheue. Nou ongelukkig is dit soms het werklike gevolge. As mense nie heeltemal waardeer dit of soort van as vanselfsprekend aanvaar die feit dat hul rekenaar sal net doen wat hulle vertel om dit te doen en dit nie doen nie verstaan ​​die onderliggende verteenwoordiging details - wat, eerlik, in sommige tale is weggesteek van die gebruiker, in teenstelling met C - 'n paar slegte dinge kan gebeur. En wat ek gedink ons ​​wil doen is 'n stap terug te neem. En dit is omtrent 'n agt minute video. Dit uitgesaai 'n paar jaar gelede, en dit gee insigte in eintlik wat kan gaan verkeerd wanneer jy onder-waardeer hierdie vorme van inligting in die baie al-te werklike wêreld. As ons kon verdof die ligte vir 'n paar minute. Spreker 1: Ons het nou terug te keer na ingenieurswese rampe op Moderne Marvels. Rekenaars - kom ons almal het die te aanvaar dikwels frustrerende probleme wat saam met hulle. Foute, virusse en sagteware glitches is 'n klein prys om te betaal vir die gerief. Maar in 'n hoë-tegnologie en 'n hoë-spoed militêre en ruimte program programme, die kleinste probleem kan word vergroot in die ongeluk. Op 4 Junie 1996, wetenskaplikes bereid is om te bekendstelling van 'n onbemande Ariane 5 vuurpyl. Dit was die uitvoering van wetenskaplike satelliete ontwerp om presies hoe vestig die aarde se magneetveld wisselwerking met son winde. Die vuurpyl is gebou vir die Europese Ruimte-agentskap en gelig uit sy fasiliteit op die kus Franse Guiana. JACK GANSSLE: Teen ongeveer 37 sekondes in die vlug, het hulle die eerste keer opgemerk iets is verkeerd gaan. Die spuitpunte is draaibare in 'n manier waarop hulle moet regtig nie. Ongeveer 40 sekondes in die vlug, duidelik die voertuig was in die moeilikheid. En dis toe dat hulle 'n besluit om dit te vernietig. Die reeks veiligheid beampte, met geweldige guts, druk die knoppie, blaas die vuurpyl voordat dit 'n gevaar vir die openbare veiligheid. Spreker 1: Dit was die eerste vaart van die Ariane 5, en die vernietiging plaasgevind het as gevolg van 'n fout ingesluit in die vuurpyl se sagteware. JACK GANSSLE: Die probleem op die Ariane was dat daar 'n aantal dat die vereiste 64 stukkies uit te druk. En hulle wou omskep 'n 16-bit nommer. Hulle het aanvaar dat die getal nooit was gaan baie groot wees, dat die meeste van die syfers in die 64-bit aantal was nulle. Hulle was verkeerd. Spreker 1: Die onvermoë van een-sagteware program die soort te aanvaar is gegenereer deur 'n ander was aan die wortel van die mislukking. Sagteware-ontwikkeling het 'n baie duur deel van nuwe tegnologie. Die Ariane 4 vuurpyl het baie gewees suksesvol is, so baie van die sagteware geskep want dit was ook gebruik word in die Ariane 5. PHILIP COYLE: Die basiese probleem was dat die Ariane 5 was vinniger, versnel vinniger. En die sagteware het nie verantwoordelik vir dat. Spreker 1: Die vernietiging van die vuurpyl was 'n groot finansiële ramp, alles te danke aan 'n minuut sagteware fout. Maar dit was nie die eerste keer data omskakeling probleme geteister het moderne vuurpyl tegnologie. JACK GANSSLE: In 1991, met die begin van die eerste Golf-oorlog, die Patriot missiel het 'n soortgelyke van 'n aantal omskakeling probleem. As 'n resultaat, 28 Amerikaanse soldate was dood en sowat 100 ander gewond wanneer die Patriot, wat veronderstel was om te beskerm teen die inkomende Scuds, versuim het om 'n missiel te vuur. Spreker 1: Wanneer Irak Koeweit en Amerika van stapel gestuur Desert Storm in vroeë 1991, Patriot missiele batterye ontplooi Saoedi-Arabië te beskerm en Israel uit Irak Scud missiel aanvalle. Die Patriot is 'n Amerikaanse medium-reeks oppervlak-tot-lug-stelsel vervaardig deur die Raytheon maatskappy. THEODORE POSTOL: Die grootte van die Patriot Interceptor self is ongeveer 20-meter lank. En dit weeg ongeveer 2000 pond. En dit dra 'n plofkop van ongeveer - Ek dink dit is ongeveer £ 150. En die Warhead self is 'n hoë plofbare wat fragmente rondom dit. Die omhulsel van die Warhead is ontwerp om op te tree soos Buck. Spreker 1: Die missiele gedra vier per houer en vervoer deur 'n semi sleepwa. PHILIP COYLE: Die Patriot anti-missiel stelsel gaan ten minste 20 jaar nou. Dit was oorspronklik ontwerp as 'n lug verdediging missiel te skiet vyand vliegtuie. In die eerste Golf-oorlog, toe die oorlog langs gekom het, het die weermag wou om dit te gebruik af te skiet Scuds, nie vliegtuie. Die Irakse lugmag was nie so veel van 'n probleem. Maar die leër is bekommerd oor Scuds. En so het hulle probeer om op te gradeer die Patriot. Spreker 1: Onderskep 'n vyand raket wat teen mach vyf was gaan nie genoeg wees om 'n uitdaging. Maar toe die Patriot is inderhaas na diens, die weermag was nie bewus van 'n Irak verandering wat hul Scuds byna onmoontlik om te tref. THEODORE POSTOL: Wat gebeur het, is die Scuds wat kom in was onstabiel. Hulle is waggel. Die rede hiervoor was die Irak, in Om 600 kilometer te kry uit 'n 300-kilometer-afstand missiel, het gewig van die voorste Warhead. Hulle het die Warhead ligter. So het die Patriot probeer om te kom op die Scud. En die meeste van die tyd, die oorweldigende meerderheid van die tyd, sou dit net vlieg deur die Scud. Spreker 1: Sodra die Patriot-stelsel operateurs besef die Patriot gemis sy teiken, het hulle ontplof die Patriotte Warhead te vermy moontlike ongevalle as dit toegelaat tot op die grond val. THEODORE POSTOL: Dit was wat die meeste mense het so 'n groot vuurballe in die lug en misverstaan ​​as afsnitte van Scud hoofde. Spreker 1: Hoewel dit in die nag lug Patriotte verskyn om suksesvol te wees vernietig Scuds, by Dhahran daar kon geen fout wees om sy prestasie. Daar, die Patriot se radar stelsel verloor spoor van 'n inkomende Scud en nooit van stapel gestuur as gevolg van 'n sagteware fout. Dit was die Israeli's wat die eerste keer ontdek dat hoe langer die stelsel was, hoe groter is die tyd verskil geword het as gevolg van 'n horlosie ingesluit in die stelsel se rekenaar. JACK GANSSLE: Sowat twee weke voor die tragedie in Dhahran, die Israeli's gerapporteer word aan die Departement van Verdediging dat die stelsel verloor tyd. Na ongeveer agt ure van die bestuur, hulle het opgemerk dat die stelsel besig om merkbaar minder akkuraat. Die departement van verdediging het gereageer deur vertel al die Patriot batterye om nie laat die stelsels vir 'n lang tyd. Hulle het nooit gesê wat 'n lang tyd was. Agt uur? 10 uur? 1000 uur? Niemand het geweet. Spreker 1: The Patriot battery gestasioneer by die kamp by Dhahran en sy gebrekkige interne klok was op meer as 100 ure op die aand van 25 Februarie. JACK GANSSLE: Dit nagespoor tyd om 'n akkuraatheid van sowat 'n tiende van 'n sekonde. Nou, 'n tiende van 'n sekonde is 'n interessante aantal want dit kan nie wees uitgedruk in binêre presies, wat beteken dit kan nie presies in word uitgespreek enige moderne digitale rekenaar. Dit is moeilik om te glo, maar gebruik as 'n voorbeeld. Kom ons neem die nommer een derde plek. Een derde uitgedruk kan word nie in desimale presies. Een derde is 0,333 gaan vir oneindig. Daar is geen manier om dit te doen met absolute akkuraatheid in desimaal. Dit is presies dieselfde soort probleem wat gebeur het in die Patriot. Hoe langer die stelsel het, die ergste die tyd fout geword. Spreker 1: Na 100 ure van die operasie, die fout in die tyd was net ongeveer 'n derde van 'n sekonde. Maar in terme van die fokus op 'n raket wat teen mach vyf, dit het gelei tot 'n dop fout van meer as 600 meter. Dit sou 'n fatale fout wees vir die soldate by Dhahran. THEODORE POSTOL: Wat gebeur het, is 'n Scud bekendstelling is waargeneem deur vroeë waarskuwing satelliete. En hulle het geweet dat die Scud kom in hul algemene rigting. Hulle het nie geweet waar dit vandaan kom. Spreker 1: Dit was nou tot die radar komponent van die Patriot-stelsel verdedig Dhahran op te spoor en te hou spoor van die inkomende vyand missiele. JACK GANSSLE: Die radar was baie slim. Dit sou eintlik die spoor van die posisie van die Scud en dan voorspel waar dit sal waarskynlik die volgende keer die radar het 'n pols uit. Dit was bekend as die reeks hek. THEODORE POSTOL: Dan sodra die Patriot besluit om nie van genoeg tyd geslaag het om te gaan terug en maak seker die volgende plek vir hierdie bespeur voorwerp, gaan dit terug. So wanneer dit gaan terug na die verkeerde plek, sien dan geen voorwerp. En hy besluit dat daar geen voorwerp, dit was 'n valse opsporing en daal die baan. Spreker 1: Die inkomende Scud verdwyn van die radar skerm, en sekondes later is dit klap in die kamp. Die Scud vermoor 28 en was die laaste een afgevuur tydens die eerste Golfoorlog. Dit is tragies dat die pasgemaakte sagteware aangekom by Dhahran die volgende dag. Die sagteware fout is vasgestel, sluiting van 'n hoofstuk in die onstuimige geskiedenis van die Patriot raket. Patriot is eintlik 'n afkorting vir Gefaseerde Array dop Afsnit van teiken. David J MALAN: Alle reg, so 'n nugter Byvoorbeeld, om seker te wees. En gelukkig hierdie laer vlak foute is nie iets wat ons sal gewoonlik het om te waardeer, seker nie met 'n paar van ons vroegste van programme. Inteendeel, die meeste van die foute sal jy ontmoeting sal wees logiese in die natuur, sintaktiese in die natuur waardeur die kode is net nie reg werk nie. En jy weet dit redelik vinnig. Maar veral wanneer ons by die einde van die semester, gaan dit raak meer en meer van 'n moontlikheid om te werklik moeilik om te dink oor die ontwerp van jou programme en die onderliggende verteenwoordiging daar ook, van die data. Byvoorbeeld, sal ons voer MySQL, Dit is 'n gewilde databasis enjin wat jy kan gebruik met webtuistes stoor data op die agterkant. En jy het om te begin om te besluit op die einde van die semester nie net wat tipes data langs hierdie lyne te gebruik maar presies hoeveel stukkies te gebruik, of jy wil datums te stoor as datums en tye soos tye, en ook dinge soos hoe groot wil jy die unieke ID's te wees vir, sê, die gebruikers in jou databasis. In werklikheid, as sommige van julle het moes Facebook rekeninge vir 'n geruime tyd, en jy weet hoe om toegang te kry jou gebruikersnaam - wat toon soms in jou profiel se URL, tensy jy 'n gekies het bynaam vir die URL, of as jy het Facebook gebruik se grafiek API, die publiek sigbaar API deur wat jy kan vra Facebook vir rou data - jy kan sien wat jou numeriese ID is. En 'n paar jaar gelede, Facebook wese gehad het om te verander van die gebruik van die ekwivalent van ints om die gebruik van lang lank, want met verloop van tyd as gebruikers kom en gaan en die skep van baie van die rekeninge en vals rekeninge, selfs hulle baie maklik in staat was om iets te put soos 'n 4 miljard moontlike waarde soos 'n int. So meer oor dié soort kwessies op die pad, as well. Alle reg, so dit was giet. Dit was onakkuraatheid. 'N Paar vinnige aankondiging. So afdelings formeel begin eerskomende Sondag, Maandag, Dinsdag. Jy sal per e-pos later vandeesweek hoor as jou artikel opdrag. En jy sal ook hier op daardie tydstip hoe jou artikel te verander as jou skedule het nou verander of jou comfort vlak het nou verander. Intussen P-set een en hacker een is as gevolg van hierdie Donderdag met die opsie om te uit te brei dat die sperdatum per die spesifikasies tot Vrydag in 'n tipiese manier. Besef dat ingesluit met die probleem stel spesifikasies is instruksies op hoe die CS50 toestel te gebruik, maak, asook 'n paar CS50 spesifieke gereedskap agtige styl 50, wat kan jy terugvoer dinamies op die kwaliteit van jou kode styl en ook kyk 50, wat kan jy met dinamiese terugvoer aan jou kode se korrektheid. Vergewe dat ons nog steeds stryk 'n aantal probleme met tjek 50. 'N paar van jou klasmaats wat begin het om 04:00 op Vrydag nag wanneer die spec opgegaan opgemerk het sedertdien 'n paar foute wat ons werk deur, en vra om verskoning vir enige iemand wat ervaar onnodige frustrasies. Die fout is myne. Maar ons sal volg op die CS50 bespreek wanneer dit opgelos is. So 'n woord oor die tellings hulself. So dit sal 'n week of twee voor jy begin terugvoer oor probleem stelle te kry omdat jy nog nie ' 'n onderrig mede. En selfs dan, sal ons begin om te evalueer die C probleem stel voor ons terug te gaan en te evalueer nuuts af so dat jy meer relevante terugvoer vinniger. Maar in die algemeen per die leerplan, CS50 probleem stelle geëvalueer langs die volgende vier asse - omvang, korrektheid, ontwerp en styl. Omvang gaan 'n aantal tipies tussen nul en vyf wat vang hoeveel van die stuk wat jy afgebyt. Tipies, jy wil dit te wees vyf. Jy ten minste probeer om alles. En sien dit is 'n vermenigvuldigende faktor sodat doen net 'n deel van die gestelde probleem is nie die beste strategie. Intussen het meer voor die hand liggend is die belangrikheid van die korrektheid - net jou program korrek met respekteer die spesifikasie? Dit is doelbewus meer geweeg swaarder as die ander twee asse deur 'n faktor van drie, want ons erken wat tipies jy gaan 'n te spandeer baie meer tyd jaag 'n paar foute, om jou kode te werk nie, dan is jy is insp dit en die keuse toepaslike veranderlike name en die hou, wat aan die ander kant van die spektrum van die styl. Dit is nie te sê styl is nie belangrik, en ons sal dit preek oor tyd om beide in lesings en in afdelings. Styl verwys na die estetika van die kode. Het jy gekies goed genoem veranderlikes wat kort is, maar 'n bietjie beskrywende? Is jou kode ingekeep as jy gesien het in lesing en in 'n wyse wat in ooreenstemming met styl 50? Laastens is ontwerp reg daar in die middel. Ontwerp is die moeiliker een om 'n sit vinger op, want dit is baie meer subjektiewe. Maar dit is dalk die belangrikste van die drie asse in terme van opvoedkundige waarde oor tyd en dat dit sal wees die onderrig man se geleentheid om voorsien u met kwalitatiewe terugvoer. Inderdaad, in CS50 selfs al het ons te doen het hierdie formules en tellings, aan die einde van die dag dit is baie doelbewus baie klein emmers - punt waardes tussen nul en drie en 'n nul en vyf. Ons probeer nie baie grof lyne te trek tussen probleem-stelle of tussen studente nie, maar eerder soveel as fokus ons kan op kwalitatiewe, skuldbewys terugvoer, hetsy getikte of verbale uit jou spesifieke onderrig mede, jy kry om baie goed ken. Maar in die algemeen, dit is die gewigte dat die verskillende asse sal hê. Intussen het ook, dit is die moeite werd om in gedagte dat jy nie moet aanvaar dat 'n drie uit vyf is 'n 60% en dus rofweg misluk. Drie is doelbewus bedoel om te wees soort middel van die pad goed. As jy kry drieë teen die die begin van die semester, wat inderdaad bedoel om 'n goeie plek om te begin. As jy kry twee-twee, feeste, is daar beslis 'n paar werk 'n bietjie te betaal meer aandag aan te neem voordeel artikels en kantoorure. As jy kry viere en twintigs, groot. Maar regtig, ons hoop bane te sien onder studente - baie geïndividualiseer per student, maar begin die semester hier in soort die twee aan die drie-reeks, maar eindig hier in die 04:56-reeks. Dit is wat ons regtig op soek is na. En ons in gedagte hou dat die delta jy uitstal tussen week nul en week 12 grade toe ek is besig. Dit maak nie saak vir ons absoluut hoe jy billike aan die begin as jou trajek is inderdaad opwaartse en sterk. Akademiese eerlikheid - so laat my op my meer ernstige stem vir net 'n oomblik. So hierdie kursus het die onderskeiding die stuur van meer studente as enige ander in die geskiedenis van die advertensie bord, ek glo nie. Ons het soort van telling verloor op hierdie punt van hoe dikwels dit gebeur. En dit is nie omdat die studente in 50 is nie meer oneerlik as hul klasmaats elders. Maar besef ook dat ons baie goeie die opsporing van hierdie soort van ding. En wat is die voordeel dat 'n Rekenaarwetenskap-klas het in wat ons en kan ons vergelyk alle studente probleem sit paarsgewyse teen elke ander, nie net hierdie jaar maar al die vorige jare. Ons het die vermoë om, soos studente in die klas te Google en te vind kode op webwerwe soos GitHub en gespreksforums. Daar is absoluut oplossings te CS50 se p-stelle rond dryf daar. Maar as jy nie kan kry nie, kan ons dit vind. En dit alles is baie outomatiese en maklik en hartseer vir ons om uit te vind. Maar ek wil beklemtoon ook dat die Natuurlik se akademiese eerlikheid beleid is baie bedoel om te wees baie die teenoorgestelde van die gees. Inderdaad, hierdie jaar het ons herfraseer dinge in die leerplan te wees nie, dot dot dot, met meer besonderhede in die leerplan. Maar die oorkoepelende tema in die loop werklik is om redelik te wees. Ons erken dat daar 'n beduidende bedrag van opvoedkundige waarde in vennootskappe, tot 'n mate, met klasmaats, waardeur jy twee of drie of jy nie meer is staan ​​op 'n wit bord white, so te praat, jou idees - uitskryf pseudokode in foto's, diagram wat moet Mario wees as jy was om te skryf dit eerste in pseudokode. Wat moet die gulsige algoritme - hoe moet dit gedra per probleem maak 'n mens? En so het besef dat gedrag dat ons moedig is baie veel langs die lyne. En in die leerplan, sien jy 'n hele klomp van die koeëls onder 'n redelike kategorie en 'n nie redelike kategorie wat help om ons te help jy draai jou gedagtes rondom waar ons trek die lyn. En in die algemeen, 'n ordentlike reël is dat as jy sukkel om op te los 'n fout en jou vriend of klasmaat is langs jou sit, is dit redelike vir jou om hom te wys of haar jou kode en sê, hey, jy kan help my uit te vind wat verkeerd gaan hier? Ons doen gewoonlik nie omhels die teenoorgestelde kant. Dit is nie 'n korrekte antwoord vir jou vriend of klasmaat hier om te sê, o, kyk net na my en figuur dit uit dat. Dit is 'n soort van onredelik. Maar met iemand anders, 'n ander brein, nog 'n paar van die oë kyk na jou skerm of kyk na jou kode en sê, is jy seker jy wil hê 'n lus om hier te hê? Of is jy seker jy wil dat kommapunt hier? Of o, die fout boodskap beteken dit. Dit is 'n baie redelike en aangemoedig om gedrag. Die gevalle wat ek het verwys na vroeër neer op wanneer studente laat in die nag maak swak oordeel besluite en e-pos die kode te iemand anders of sommer net te sê: hier, dis in Dropbox of Googlen laat in die nag. En so sou ek moedig en te smeek jou, as jy het die onvermydelike oomblikke van stres, jy stamp tot teen die sperdatum, het jy geen laat dag want dit is reeds Vrydag op daardie punt, e-pos die kursus se koppe of myself direk. Sê, luister, ek is by my breekpunt hier. Let's het 'n gesprek en dit uitwerk. Toevlug tot die web of 'n ander nie redelike gedrag is nooit die oplossing, en te veel van jou klasmaats is nie meer hier op kampus as gevolg van daardie swak oordeel. Maar dit is baie maklik om die lyn te romp. En hier is 'n bietjie prentjie te beur julle uit Reddit sodat nou alles sal OK wees. So 'n vinnige terugblik, dan, van waar ons opgehou het. So verlede week, onthou dat ons voer voorwaardes, nie in Scratch maar in C hierdie tyd. En daar was 'n paar nuwe sintaksis, maar regtig geen nuwe idees per se. Ons het Boole uitdrukkings wat ons kon of saam met twee vertikale bars of en saam met twee amper sand, sê dat beide die linker- en die reg moet waar wees vir hierdie uit te voer. Toe moes ons skakelaars, wat ons gekyk op kort, maar ek stel regtig net verskillende sintaksis vir die bereiking van die dieselfde soort van die doel as jy weet in bevorder wat jou gevalle gaan wees. Ons kyk na loops. 'N lus vir miskien die mees algemene, of ten minste die een wat mense tipies bereik vir instinktief. Selfs al is dit lyk 'n bietjie kripties, sal jy sien baie, baie voorbeelde van hierdie kort voor lank, as jy reeds laat verlede week. Terwyl sirkelroetes kan insgelyks bereik dieselfde ding. Maar as jy wil enige incrementation te doen of opdatering van veranderlike se waardes, wat jy hoef te doen dit meer met die hand as die lus vir laat voor. En dan is daar die do-while lus, wat ons toelaat om iets te doen aan minste een keer, terwyl iets anders is die waarheid. En dit is veral goed vir programme of speletjies waar jy wil die gebruiker om iets aan te spoor ten minste een keer. En dan, indien hy of sy nie saam te werk, jy dalk wil om dit te doen weer en weer. Met veranderlikes, intussen, het ons lyne van die kode soos hierdie, wat kan twee lyne. Jy kan verklaar 'n int genoem toonbank, kommapunt. Of jy kan net verklaar en definieer dit, om so te praat. Gee dit 'n waarde op dieselfde tyd. En dan laastens, het ons gepraat oor funksies. En dit was 'n mooi voorbeeld in die sin dat dit illustreer twee tipes funksies. Een daarvan is GetString (), wat weer kry 'n string van die gebruiker. Maar GetString () is 'n soort van interessante, so ver as wat ons dit gebruik het, want ons het dit altyd met iets op die linkerkant van 'n gelyke teken. Dit is dat GetString (om te sê) return. Is dit terug, natuurlik, 'n string. En dan op die linkerkant, is ons eenvoudig spaar dat string binnekant van 'n veranderlike genoem naam. Dit is anders, in 'n sin van printf omdat printf, ten minste in ons gebruik hier, kom nie terug nie. As 'n eenkant, is dit nie weer iets teruggee. Ons het net nie omgee wat dit is. Maar dit het wel wat is bekend as 'n newe-effek. En wat is die newe-effek in elke geval het ons tot dusver gesien het nie? Wat beteken printf doen? Hy druk om iets aan die skerm, vertoon teks of getalle of iets op die skerm. En dit is net beskou as 'n newe-effek want dit is nie regtig oorhandig dit terug na my. Dit is nie 'n antwoord binne 'n swart boks wat ek kan dan bereik in en gryp. Dit is net om dit te doen op sy eie, baie soos Colton is ingeprop in hierdie black box verlede week, en hy het een of ander manier Nou, is op grond van die direksie sonder dat ek eintlik betrokke is. Dit sou 'n newe-effek wees. Maar as ek eintlik moes bereik terug in hier en sê, o, hier is die string van die gebruiker, wat sou 'n terugkeer waarde. En tot dusver het ons slegs gebruik funksies wat ander mense geskryf het. Maar ons kan eintlik doen om hierdie allerhande dinge onsself. So ek gaan om te gaan in die CS50 toestel weer. Laat my naby die blad dat ons het 'n oomblik gelede geopen. En laat my gaan voort en 'n nuwe lêer. En ek gaan om voort te gaan en noem dit een positive.c. So ek wil iets te doen het met positiewe getalle hier. So ek gaan om voort te gaan en te doen int - jammer - # Sluit. Laat ons nie dieselfde fout as tevore. Int main (void), oop krullerige stut, gesluit krullerige stut. En nou wil ek die volgende te doen. Ek wil 'n program te skryf wat dring daarop aan dat die gebruiker gee vir my 'n positiewe heelgetal. So daar is geen GetPositiveInt funksie in die CS50 biblioteek. Daar is net getint (). Maar dis OK, want ek het die konstrukte waarmee ek kan lê 'n bietjie meer beperking op die waarde. Ek kon doen iets soos hierdie. So int n - en as jy tik saam, net besef Ek gaan om terug te gaan en verander 'n paar dinge in 'n oomblik - so int n gelyk getint (). En wat gaan sit 'n int binnekant van n. En laat my 'n meer beskrywende. Laat my sê iets soos ek eis dat jy gee my 'n positiewe heelgetal. Alle regte. So net 'n bietjie van instruksies. Maar nou, wat kan ek doen? Wel, ek weet reeds van my eenvoudige voorwaardes of takke, net soos ek het in nuuts af, kon ek iets sê graag as n minder as of gelyk aan nul is, dan wil ek iets te doen hou nie, wat nie positief is nie. En dan het ek kon doen nie - OK, maar ek wil regtig dat int te kry. So ek kon gaan hier en ek kon soort afskrif van hierdie en streepje hierdie. En dan, OK. So as n minder as of gelyk aan nul doen. Nou, wat as die gebruiker nie saam te werk? Wel, dan gaan ek leen dit hier. En dan gaan ek in hier en hier en hier. So dit is duidelik nie Die oplossing, reg? Want daar is geen einde in sig nie. As ek wil om te eis dat die gebruiker gee vir my 'n positiewe heelgetal is, kan ek kry eintlik die int. Ek kan dan kyk vir daardie int. Maar dan wil ek dit weer na te gaan en check dit weer en kyk na dit weer. So natuurlik, wat is die beter bou word hier gebruik? Alle reg, so 'n soort van lus. So ek gaan om ontslae te raak van byna al hierdie dinge. En ek wil om dit te kry int ten minste een keer. So ek gaan om te sê nie - en ek sal terug te kom na die terwyl dit in 'n oomblik - Nou, wat? Ek gaan int n kry getint () te doen. OK. So dit is redelik goed. En nou hoe dikwels Ek wil om dit te doen? Laat ek die printf binnekant van die loop sodat ek kan weer en weer vra, indien nodig wees. En wat wil ek hierdie terwyl toestand te doen? Ek wil om te hou om dit te doen terwyl wat die geval is? Ja. N minder as of gelyk aan nul. So al, ons het aansienlik skoongemaak hierdie kode up. Ons het geleen 'n baie eenvoudige bou - die do-while lus. Ek het gesteel net die belangrike lyne van die kode wat ek begin het en kopiëring plak, wat nie wys nie. En so nou gaan ek eintlik plak dit in hier en doen dit net een keer. En nou wat ek wil doen die einde van hierdie program? Ek sal net sê iets eenvoudig hou, dankie vir die - en Ek sal% i vir int - agteroorskuisstreep n, komma, en dan plug in n, kommapunt. Alle regte. So kom ons kyk wat gebeur nou Wanneer ek hardloop hierdie program. Ek gaan om voort te gaan en maak nie positief. Damn. 'N Paar foute. So laat my terug blaai tot by die eerste. Werk nie deur hulle agteruit. Werk deur hulle van bo af sodat hulle nie waterval en slegs een ding verkeerd wees. Implisiete verklaring van funksie getint (). Ja. So dit was nie genoeg nie. Ek het soort van dieselfde fout gemaak, maar 'n bietjie anders hierdie keer. Ek nodig het om te sluit nie net stdio.h maar ook cs50.h, wat insluit die sogenaamde verklarings van kry int, wat leer om die toestel, of leer C wat getint () is. So laat my weer stoor. Ek gaan die ander foute te ignoreer want ek gaan om te hoop dat hulle een of ander manier verband hou met die fout Ek het reeds vasgestel. So laat my gaan voort en heropstel met make-positief is, Tik. Damn. Drie foute, nog steeds. Laat my blaai tot by die eerste. Ongebruikte veranderlike n. Ons het nie gesien voor. En dit is ook 'n bietjie kripties. Dit is die opbrengs van die samesteller. En wat dit beklemtoon lyn daar - positive.c :9:13 - sê, dit sê op die lyn van nege positive.c, op die 13de karakter, 13de kolom, jy het hierdie fout. En in die besonder, is dit vertel my ongebruikte veranderlike n. So laat ons sien - lyn nege. Ek gebruik n in die sin dat Ek gee dit 'n waarde. Maar wat die opsteller nie hou nie, is dat ek skynbaar nie om dit te gebruik. Maar wag 'n minuut, EK gebruik. In lyn 11, ek gebruik dit hier. Maar as ek blaai af verder by positive.c :11 - so op lyn 11, 12 karakter, die samesteller is vir my, die gebruik van onverklaarde identifiseerder n. So onverklaarde manier Ek het nie vermeld dit as 'n veranderlike met 'n data tipe. Maar wag 'n minuut. Ek het presies dit in lyn nege. So iemand is regtig verward hier. Dit is óf my of die samesteller omdat in lyn nege, weer, ek verklaar 'n int n, en ek toeken dit die terugkeer waarde van getint (). Toe ek die gebruik van daardie veranderlike n in lyn 11 en seker te maak dat die waarde daarvan is minder as of gelyk aan nul. Maar dit is blykbaar sleg en gebroke hoekom? Sê dit weer doen? Ag, ek het 'n te verklaar voor die aanvang van die lus. Maar hoekom? Ek bedoel, ons het net voorgestel dat 'n bietjie gelede dit is goed veranderlikes te verklaar almal op een lyn en dan wys hulle 'n bietjie waarde. 'N globale veranderlike - laat terugkom om die idee in net 'n oomblik. Hoekom wil jy my te sit dit buite die lus? Dit is. Presies. So, al is dit ietwat counter, laat my vat. Wanneer jy verklaar n binne- van die doen blok is daar - spesifiek binne diegene krulhakies - dat veranderlike N het wat is bekend as 'n omvang - verband hou met ons puntestelsel in die natuurlik - maar het 'n omvang wat beperk tot die krulhakies. Met ander woorde, tipies as jy verklaar 'n veranderlike in 'n stel krulhakies, wat veranderlike bestaan ​​net binnekant van die krulhakies. So deur die logika alleen nie, selfs al Ek het verklaar n lyn in nege, is dit wese verdwyn uit omvang, verdwyn uit die geheue, so te sê, Teen die tyd dat ek getref lyn 11. Omdat lyn 11, ongelukkig, is buite die krulhakies. So ek kan ongelukkig nie hierdie probleem oplos deur terug te gaan na wat ek dit gedoen het voor. Jy kan op die eerste dit doen. Maar wat is jy nou nie doen siklies? Jy is natuurlik nie om die int siklies. So kan ons die getint () verlaat, en ons moet die getint () verlof binne-in die loop, want dit is wat ons wil teister die gebruiker vir weer en weer. Maar dit is voldoende om te gaan tot lyn, sê, ses. Int n, kommapunt. Gee dit nie 'n waarde nie, want jy hoef nie te net nog nie. Maar nou is hier, kennis - dit sou 'n baie maklik om fout wees. Ek wil nie my vorige te skaduwee verklaring van n. Ek wil die n om te gebruik wat werklik bestaan. En so nou in lyn 10, Ek ken n 'n waarde. Maar in lyn ses, verklaar ek n. En so kan ek of ek kan nie gebruik dit in lyn 12 nou? Ek kan, want tussen wat krullerige draadjies is n verklaar nou? Die een hier on line vyf. Aan die een hier op die lyn 14. So as ek nou zoom uit behalwe hierdie lêer, gaan terug in en uit te voer om positief is, is dit saamgestel hierdie tyd. So dit is reeds vordering. Streep. / Positief., Tik. Ek eis dat jy my 'n positiewe heelgetal. Negatiewe 1. Negatiewe 2. Negatiewe 3. Zero. Een. En dankie vir die een is wat nou gedruk. Kom ek probeer iets anders, uit nuuskierigheid. Ek is vertel om insette 'n heelgetal. Maar wat as ek plaas tik in lam? So sien jy nou 'n ander vinnige - probeer weer. Maar nêrens in my kode ek skryf weer probeer. So waar, vermoedelik, is dit weer probeer aanspoor kom, sou jy sê? Ja, uit getint () self. So een van die dinge CS50 se personeel doen vir jou, ten minste in hierdie eerste paar weke, is ons geskryf het 'n bedrag foutkontroles om te verseker dat, indien jy noem getint (), sal jy ten minste terug te kry 'n int van die gebruiker. Jy sal nie 'n string. Jy sal nie 'n kar. Jy sal nie iets heeltemal anders. Jy kry 'n int. Nou, kan dit nie positief wees. Dit mag dalk nie negatief wees nie. Ons maak geen waarborge rondom dit. Maar ons sal teister die gebruiker om weer te probeer, weer probeer, weer probeer totdat hy of sy eintlik werk. Net so, as ek doen 1.23, dit is nie 'n int. Maar as ek tik in, sê, 50, wat gee my 'n waarde wat ek wou hê. Alle regte. So nie sleg nie. Enige vrae oor wat ons nou net gedoen het? Die sleutel afhaal om, om duidelik te wees, nie so baie van die roete wat ons gesien het voordat selfs al het ons nie regtig gebruik nie, maar die kwessie van die omvang, waar veranderlikes slegs ingestel kan word kan gebruik word binne 'n paar gespesifiseerde omvang. Alle reg, laat my toe om die voorstel jy vroeër gemaak het, wat van 'n globale veranderlike. As 'n eenkant, dit blyk dat 'n ander oplossing vir hierdie probleem, maar tipies 'n verkeerde oplossing of 'n swak ontwerp oplossing, is om te verklaar jou veranderlike as wat's bekend as 'n globale veranderlike. Nou ek is soort van die oortreding van my definisie van die omvang, want daar is geen krulhakies op die heel boonste en die heel onderkant van 'n lêer. Maar die implikasie van dié is dat dit nou in lyn vier, n is 'n globale veranderlike. En soos die naam impliseer, is dit net toeganklik is oral. Kras het eintlik hierdie. As jy 'n veranderlike, kan jy onthou jy het om van te kies as dit is vir hierdie sprite of vir alle sprites. Wel, almal sprites is net die duideliker manier om te sê globale. Ja? Ag, regtig 'n goeie vraag. So onthou dat in die heel eerste weergawe van my kode as ek verkeerd verklaar en gedefinieer n lyn in nege - Ek verklaar dat dit as 'n veranderlike en ek het dit 'n waarde met die opdrag operateur - Dit het my twee foute. Een, die feit dat n is nie gebruik nie, en twee, wat in lyn 11 dit was net nie verklaar nie. Dus is die eerste een wat ek gedoen het nie adres in die tyd. Dit is nie streng 'n fout om te verklaar 'n veranderlike, maar dit nie gebruik nie. Maar een van die dinge wat ons in gedoen het die CS50 toestel, doelbewus, pedagogies, is ons het geknak die verwagtinge van die vertaler te maak seker dat jy dinge doen nie net korrek, maar eintlik korrek. Want as jy waarby 'n veranderlike soos N en nooit gebruik nie, of om dit te gebruik korrek, wat dan is dit daar? Dit dien egter geen doel. En dit is baie maklik om met verloop van tyd, as jy instel nie jou eie rekenaar in hierdie manier, om net 'n kode wat min oorblyfsels hier, oorblyfsels daar. En dan maande later jy terug kyk en jy soos die, is die rede waarom hierdie lyn van kode is daar? En as daar nie 'n goeie rede is dit nie tot voordeel van u of u kollegas af in die pad te hê om te struikel oor dit dan. As 'n eenkant, waar is wat kom uit? Wel, onthou dat elke keer as ons saam te stel program, sal al hierdie dinge is gedruk word. So sal ons terug te kom na hierdie. Maar weereens, maak, is 'n program wat automatiseert die proses van die opstel deur die bestuur van die werklike samesteller genoem klang. Hierdie ding, ons sal uiteindelik sien, het te doen met die opsporing met 'n spesiale program het die debugger. Dit het te doen met die optimalisering van die kode - meer oor wat in die toekoms. St = C99 - Dit beteken net gebruik om die 1999-weergawe van C. C was om selfs langer as dit nie, maar hulle het 'n paar mooi veranderinge 10 plus jaar gelede. En hier is die betrokke kinders. Ons sê maak enigiets wat voorheen sou gewees het 'n waarskuwing 'n fout te verhoed dat die student van die opstel. En die muur beteken dit doen vir 'n hele klomp van die dinge wat nie net wat verband hou met veranderlikes. En dan laat my blaai na die einde van die lyn. En dit ook, sal ons uiteindelik kom terug na. Dit is natuurlik die naam van die lêer wat ek opstel. Dit herinner aan die naam van die lêer Ek uitdruk as die naam van my uitvoerbare program. Hierdie-lcs50 beteken net gebruik om die CS50 biblioteek, en enige nulle en kinders wat die personeel geskryf en saamgestel vroeër hierdie jaar, integreer hulle in my program. En niemand weet wat-lm is? Dit is die wiskunde biblioteek, wat net daar selfs al is jy doen nie enige wiskunde. Dit is outomaties net verskaf aan ons maak. Wel, laat my doen een ander voorbeeld hier by die opening van 'n nuwe lêer. En laat my behalwe hierdie een as string.c. Dit blyk dat as ons praat oor data tipes vandag, daar is selfs meer gaan op onder die enjinkap as wat ons tot dusver gesien het. So laat ek gou 'n vinnige program. Sluit stdio.h. En ek sal jou red. En jy weet, laat my nie die dieselfde fout weer en weer. Sluit cs50.h. En laat my voort te gaan nou en doen int main (void). En nou, ek wil net 'n program om te doen wat dit doen - verklaar 'n string genoem s en kry 'n string van die gebruiker. En laat my 'n bietjie instruksies hier - gee asseblief vir my 'n string - so die gebruiker weet wat om te doen. En dan hier onder om, Ek wil graag die volgende te doen - vir int i kry nul. Weer, rekenaar wetenskaplikes tipies begin tel by nul, maar ons kon maak dat 'n mens as ons regtig wou hê. Nou gaan ek om te doen Ek is minder as die string lengte van s. So strlen - S-T-R-L-E-N - weer, dit is kort, want dit is makliker om te tik, selfs al is dit 'n bietjie kripties. Dit is 'n funksie het ons nie gebruik voor, maar letterlik beteken dat - terug te keer na my 'n getal wat verteenwoordig die lengte van die string dat die gebruiker getik. As hulle getik in hallo, sou dit terug vyf, want daar is vyf letters in hallo. Dan, op elke iterasie van hierdie lus, i plus plus. So weer, 'n standaard selfs al bou jy is nie heeltemal te gemaklik of vertroud met dit nie. Maar nou op elke iterasie van hierdie lus, sien wat ek gaan doen. Ek wil om voort te gaan en te druk uit 'n enkele karakter - sodat% c agteroorskuisstreep n op 'n nuwe reël. En dan, jy weet wat ek wil doen? Wat ook al die woord is dat die gebruiker in, soos hallo, ek wil druk H-E-L-L-O, een karakter per lyn. Met ander woorde, ek wil graag by die individuele karakters in 'n string, waarvolgens tot nou toe 'n string het net 'n volgorde van die karakters. En dit blyk uit wat ek kan doen is, bracket, Ek, naby bracket, sluit hakies, kommapunt. En ek het een ding om te doen. Dit is in 'n lêer genaamd string.h dat strlen verklaar word. So as ek wil hê dat die funksie te gebruik, Ek moet die vertaler te vertel, verwag om dit te gebruik. Nou laat ek gaan voort en maak die program genoem string. Dot, streep, string. Gee asseblief vir my 'n string. Ek sal voort te gaan en tik dit. Hallo, in hoofletters, Tik. En nou sien ek dit het gedruk een karakter na die ander. So het die nuwe besonderhede hier is dat 'n string, aan die einde van die dag, kan wees toeganklik is deur middel van sy individuele karakters deur die bekendstelling van die vierkant hakienotasie. En dit is omdat 'n string onder die enjinkap is inderdaad 'n reeks karakters. Maar wat is netjies oor hulle is in jou rekenaar se geheue - Mac, PC, wat dit ookal is - dit is letterlik terug na Terug na - H-E-L-L-O - op individuele, aangrensend grepe in die geheue. So as jy wil te kry op die agtste soos byte, wat in hierdie lus sou wees bracket nul, bracket een, twee hakies, bracket drie, bracket vier - dit is zero kruip tot vyf - wat druk H-E-L-L-O op sy eie lyn. Nou, as 'n teaser, laat ek jou wys die allerhande dinge wat jy uiteindelik in staat om te verstaan, ten minste met 'n paar noue soek. Vir een, wat ons in vandag se voorbeelde, as jy wil, is eintlik een van die heel eerste jailbreaks vir die iPhone. Jailbreaking beteken die krake van die telefoon sodat jy kan eintlik gebruik dit op 'n verskillende draer of te installeer jou eie sagteware. En jy sal sien dit heeltemal lyk kriptiese, waarskynlik. Maar kyk na hierdie. Die iPhone is glo gekraak met 'n lus vir 'n voorwaarde as 'n ander toestand, 'n klomp van die funksies Ons het nie gesien het nie. En weer, sal jy nie by eerste oogopslag waarskynlik verstaan ​​hoe dit werk. Maar alles wat ons soort van neem vanselfsprekend in ons moderne lewens eintlik is geneig om selfs verminder tot 'n van hierdie grondbeginsels ons het al op soek na. Laat my gaan voort en maak 'n ander program, holloway.c. So ook dit is iets wat jy behoort nie regtig weet. Selfs nie een van die personeel of ek kon waarskynlik figuur dit uit deur te kyk na dit, want dit is iemand se kode wat ingedien is na wat histories bekend as 'n verborge C wedstryd, waar jy 'n program skryf wat stel en loop, maar is so damn kriptiese geen mens kan verstaan ​​wat dit gaan om dit te doen totdat hulle eintlik dit uitgevoer word. So inderdaad, as jy kyk na hierdie kode, sien ek 'n skakelaar. Ek sien hoof. Ek sien hierdie vierkantige hakies impliseer 'n soort van 'n skikking. Is daar iemand wat wil om te raai wat hierdie program eintlik doen as ek hardloop Holloway? Ja. OK. Goed gedoen. So net die personeel en ek kan nie uitvind uit te vind wat hierdie dinge doen nie. En nou laastens, laat my gaan voort en maak 'n ander program. Hierdie een - weer, sal ons die bron-kode aanlyn beskikbaar - hierdie een is net soort van mooi om na te kyk. Al wat hulle gedoen het, is getref om die space bar nogal 'n bietjie. Maar dit is 'n ware-kode. So as jy dink dit is mooi, as ons eintlik loop dit aan die vinnige, uiteindelik sal jy sien hoe ons kan doen dinge soos hierdie. So ons sal laat jy op daardie noot en sien dat jy op Woensdag. [Speel van musiek] Spreker 2: By die volgende CS50, die TFS stadium 'n opstand. SPREKER 3: Daar is hy. Kry hom! [Speel van musiek]