[Powered by Google Translate] David J. Malan: Alle reg, dit is CS50, en dit is die die begin van die week twee. Dankie. Laat ons hier begin met 'n telefoonoproep. Ek is op die punt om te bel 617-BUG-CS50. CS50: Dit is CS50. Vir Shuttle Boy, druk 1. Om oor te begin, druk 9. David J. Malan: En hy sê vir Shuttle Boy, druk 1. So ons gaan te druk 1. CS50: Wat is jou oorsprong? Vir quad, druk 1. Mather, druk 2. Boylston, druk 3. Lamont, druk 4. Mem Hall, druk 5. Om oor te begin, druk 0. David J. Malan: Ons sal druk 1 quad. CS50: Volgende shuttle verlaat hierdie baie minute op 13:10, en dan op 01:20, 01:30, 01:40. Dit is CS50. David J. Malan: So dit is CS50 se stem. En dit is 'n voorbeeld van die soort van die finale projekte, Byvoorbeeld, kan jy byt af in die rigting van die einde van die semester. Byvoorbeeld, dat shuttleboy.cs50.net bestaan ​​- eintlik 'n projek wat ek die eerste keer geskryf het nadat hy CS51 terug toe ek 'n voorgraadse. En die inspirasie was hier terug dan, al wat hulle gehad het, was die gedrukte shuttle bus skedules, en daar was geen idee van die soek na dinge up aanlyn. En so het ek soort van duif in een naweek, het deur die gedrukte skedule, en dit oorgedra na 'n rekenaar program. Op die oomblik, die rekenaar program gebeur geskryf word in C. En jy eintlik loop dit op 'n deur die tik van die Shuttle Boy flikkerende gevra soos ons het tot dusver te doen. Maar oor die jare, is dit ontwikkel in 'n oomblik messaging bot. Dit is meer onlangs ontwikkel in hierdie webwerf, in 'n SMS-gebaseerde instrument, sowel as in hierdie stem-gebaseerde instrument. En dit is om te dui op die soort van dinge wat jy kan doen vir jouself deur semester se einde. Byvoorbeeld, daar gebeur, die SMS-weergawe van die Shuttle Boy om soos volg te werk. Indien op jou selfoon, jy stuur 'n SMS-boodskap aan 41.411 en stuur dan die spesiale simbool sboy, vir Shuttle Boy, gevolg deur A en B, waar A is 'n oorsprong en B is 'n bestemming - byvoorbeeld, Boylston Space Quad - wat jy moet terug te kry binne 'n paar sekondes is 'n teks boodskap van Shuttle Boy vertel jou presies wanneer die volgende paar shuttles is, van daardie punt A gaan punt B. En dit is 'n meer algemene voorbeeld van wat bekend staan ​​as met behulp van 'n API. So byvoorbeeld, is dit hier is net shuttleboy.cs50.net, die werklike web-gebaseerde inkarnasie van hierdie. Maar die data wat hierdie en ander programme beklemtoon dat CS50 ontwikkel het, is almal blootgestel aan almal hier in die vorm van API's, application programming interfaces. En dit is net 'n fancy manier om te sê dat mense hou van ons op die Internet en ander het bietjie tyd spandeer om die skep van sagteware wat jy kan gebruik om data aan te gryp van ons en dan bou jou eie programme geplaas van die datastel. So byvoorbeeld, hierdie Shuttle Boy API bladsy hier, wat gebeur om te wees in die CS50 handleiding, in wese dokumente hoe jy kan gaan oor die CS50 bedieners te vra vir data. Byvoorbeeld, as jy vertroud is met CSV lêers, komma geskei waardes, dit is net soort van vinnige en vuil Excel-lêers. Sodat jy kan Shuttle Boy vra vir almal van die data op al die huise en hul GPS-koördinate, en jy sal kry terug, in wese, 'n sigblad soos wat daardie jy kan lees dan in 'n program van jou eie en dan genereer resultate, soos Shuttle Boy self gebeur om te doen. Vir diegene wat meer bekend is, meer moderne data vertoë sluit into, JavaScript Object Notasie. Iets sal terug kom na U in die rigting die einde van die semester. Maar weereens, dit is net een van 'n paar van CS50 se eie API's. En die opwindende ding is nou, hierdie dae, Facebook en Twitter en Google en pretty much elke gewilde webwerf uit daar het 'n soort van API, wat beteken dat as jy lees die dokumentasie op hul webwerf, jy inteken vir 'n rekening, kan jy begin skryf sagteware op die top van watter gereedskap of data wat maatskappy bied. En so het een van ons eie onderwys genote 'n paar jaar terug skryf 'n Mac-weergawe van hierdie. So op die skakel getiteld Mac hier links bo, kan jy eintlik download 'n Mac OS widget wat loop op jou eie Mac te doen dieselfde soort van dinge. So dit is al oor die bou op die top van die datastelle soos hierdie. Maar meer oor wat na die einde van die semester. So laat ons duik in die werklike vinnig na 'n fout, net om soort van kry dinge opgewarm vandag, en dink terug op 'n paar van die dinge wat ons gekyk na die laaste week. In die besonder, laat my gaan voort en trek, sê, hierdie voorbeeld hier. Buggy1.c, dit is beskikbaar op die kursus se webwerf as jy wil dit wil hê om jouself af te laai en te steek. Maar laat ons hier zoom in op hierdie redelik kort program, en net 'n super-vinnige recap van sommige van die basiese boustene wat ons regtig gaan net begin neem as vanselfsprekend aanvaar nie. So het die blou stuff, in reëls 1 tot 9, is net sagtebal vrae. So dit is net kommentaar. Hulle het geen funksionele betekenis. Maar hulle is 'n kommentaar in die sin dat hulle notas dat Ek, die mens, vir myself gemaak het, sodat in die lesing en na lesing, ek kan eintlik onthou wat hierdie program doen sonder om te lees deur dit in lyn met die lyn en herskep geskiedenis in my gedagtes. En as Ek gee hierdie program aan iemand anders soos jou, dit is baie duidelik vir julle, as gevolg van kommentaar soos hierdie, wat die program eintlik doen, of ten minste wat die program veronderstel is om te doen. Of dit korrek is, is 'n ander saak. Nou, in C, met multi-line kommentaar, onthou dat on line een is hier om die magie simbool, / *. Dit beteken hier kom die begin van 'n kommentaar. En niks anders saak maak totdat jy die einde bereik terminator, wat * /, die teenoorgestelde. Dus is die feit dat ek 80-paar vreemde sterre hier van links na regs is regtig net 'n estetiese detail. Dit het geen funksionele betekenis. Nou hoe oor line 11? Wat doen dit in leketaal? Wat is dit? Gehoor: Sluit die standaard. David J. Malan: OK, goed. So is dit sluit in die stdio.h biblioteek. So wat beteken dit? Wel, die binnekant van daardie lêer, stdio.h, is 'n hele klomp van funksie verklarings - dit is kode wat iemand anders geskryf het. En 'n perfekte voorbeeld van 'n funksie wat verklaar is in stdio.h is - watter gunsteling deur die nou? So printf, tot een van die mees algemene gebruik, seker vroeg op, van daardie biblioteek is daar. As ek daardie lyn van die kode sluit, klang gaan gil vir my iets oor die gebruik van 'n onverklaarde simbool. Iets swart is waarskynlik die sleutelwoord, want ons het nie die samesteller wat printf lyk graag tensy ons daardie lyn. En meer down to earth, regtig, wat daardie lyn sê oopmaak dat lêer, stdio.h, waar dit ook al op die bediener se hardeskyf, of die toestel se hardeskyf, en kopieer-plak- reg daar in my lêer, sonder my om met die hand te doen. Nou, wanneer kry ons hier af na die hoof, kort voor lank sal ons begin terg uitmekaar wat int en wat nietig is. Maar vir nou, laat ons kyk na die drie lyne binne 15 deur 17. Dit is hier Ek eis as buggy. Line 7 in my kommentaar sê: "10 moet druk sterretjies, maar nie "Hoekom. beteken dit nie druk, in werklikheid, 10 sulke sterre? Gehoor: [onhoorbaar]. David J. Malan: Presies. So sien dat ons begin om te tel van 0. En dit is eintlik 'n konvensie in programmering en rekenaarwetenskap meer in die algemeen, begin om te tel van 0 in plaas van 1. En dit regtig net afgelei van die feit dat, vir Byvoorbeeld, wanneer ons het agt mense op die verhoog, toe niemand hulle hand is die verhoging, was hulle alle effektief nulle. En dus is dit net 'n soort van 'n rekenaar konvensie, dus, om te begin met die tel van 0. As dit is die laagste getal wat jy kan verteenwoordig in binêre. So hier het ons begin inisialisering i 0. Ons het i gelyk aan 0. Maar dan het ek hierdie fout gemaak het, en gesê: Ek is minder as of gelyk aan 10. Maar as jy dink dat, as ek begin by 0 en dan gaan ek tot 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Ek het eintlik gaan 11 sterre op die skerm druk, want ek het opgegaan tot en gelyk aan 10. So is die maklike oplossing hier is wat dan? Gehoor: [onhoorbaar]. David J. Malan: dit verander net minder as. As jy regtig wil, kan jy dit doen. Maar in die algemeen, wat frowned upon. En so begin om te tel van 0 is net iets wat jy moet tipies gewoond te raak. Nou, wat oor hierdie hele konstruk in en van die self? Hierdie lyn 15 demarks 'n lus. So is dit nie 'n funksie. Dit is net 'n verklaring. Dit is 'n herhaling konstruk, soos ons gesien het in Scratch. En dit het drie dele. Let daarop dat daar is die eerste deel van die die linkerkant van die kommapunt. Daar is die middelste deel in tussen die twee kommapunte. En dan is daar die regterkantste deel aan die regterkant van die tweede kommapunt. Nou, die eerste van hierdie doen? Gehoor: [onhoorbaar]. David J. Malan: Terug daar? Ja? Gehoor: inisialisering. David J. Malan: Initialisatie. So, wat beteken dit? Ons het 'n veranderlike genaamd i verklaar. Dit is van die tipe int, want ek het gespesifiseer int i. En ek inisialisering i tot die waarde van 0. So wat dit regtig sê? Dit is effektief op die rekenaar sê hey, gee my genoeg geheue, genoeg RAM, 'n nommer aan te pas, en dan sit die nommer 0 in daardie stuk RAM. En as 'n eenkant, hoe groot is 'n int tipies, ten minste binne van die toestel? Gehoor: 32 bit. David J. Malan: 32 stukkies. Dus beteken dit dat gee my 32 stukkies, andersins bekend as 4 bytes, en die waarde 0 in dit, wat is redelik maklik, want Dit beteken net al die stukkies aan 0. So nou, die tweede deel is die toestand. En die toestand, soos die naam aandui, is wat word nagegaan weer en weer en weer aan of dit waar of onwaar is. So dit is net gesê doen die volgende reëls van die kode naamlik lyn 16, want dit is die enigste een ingekeep onder - so lank as wat ek is minder as 10. En na elke iterasie deur hierdie lus, doen die incrementation, wat in hierdie geval is i + +. Nou, dit hoef nie te wees i + +. Dit kan wees i -. Maar as ek dit gedoen het, is wat die gedrag aan die gang te wees van hierdie program? Gehoor: Dit gaan 'n oneindige lus. David J. Malan: Dit gaan om 'n soort van oneindige lus, tensy ons kry gelukkig na negatiewe 2 miljard of so. Miskien sal dinge om te draai, net deur die aard van die eindige aantal bisse wat ons vir 'n int toegeken. Maar dit is beslis gaan veel meer as 10 itereer en seker meer as 11 keer hier. En nou, net soos 'n ter syde stel, besef dat ek + + en ek - is regtig net sintaktiese suiker. Dis net snelskrifnotasie vir wat is 'n bietjie meer uitdruklik soos volg geskryf: i = i + 1. Dit is identies aan i + +. Dit is net lyk soort van mooier om te sê i + +. Dit is meer bondig, meer leesbaar. En so die meeste mense dit doen in plaas. Maar dit is identies funksioneel aan wat ons nou net gesien het. Dus, in kort, die quick fix hier is net om te sê dat ek itereer van 0 al die pad tot minder as 10. En dan sal ons wel kry 10 sterre. Kom ons probeer dit. Laat my oopmaak die terminale aan die onderkant. Laat my gaan in die gids wat dit is. En ek gaan dit met die hand te stel met kletteren vir nou. En ek gaan om dit te stel as buggy1.c, Enter. En nou buggy1, waarom is daar geen so 'n lêer of gids genoem buggy1? Gehoor: [onhoorbaar]. David J. Malan: Ja. So dit is eintlik genoem a.out. So onthou as jy net kletteren hardloop, waar kletteren die samesteller, en jy spesifiseer nie die naam wat jy wil gee aan jou program, gaan dit Keren na a.out. So wel as ek dit doen ls - Oeps. En Ek didn't - die swart-en-wit kwessie sommige van jy uitgedaag is vasgestel. Maar laat my dit doen. Daar het ons a.out op die linker kant is daar. So ons het a.out uit te voer in plaas van buggy1. So laat ek gaan voort en doen dit. / A.out, Enter. En ek glo nie doen wat? Gehoor: Stoor. David J. Malan: Hou my lêer. Sodat dit maklik opgelos deur slaan Control S, of gaan na File, Save, soos in die meeste programme. Laat my gaan hier duidelik die skerm, loop dit weer. En daar is nog 'n fout. So, wat gaan - Gehoor: Jy het nie stel. David J. Malan: Ag, goed. Ek het dit nie stel nie. Soos 'n idioot, ek is op soek na die kode om te sien wat is verkeerd. So kletteren buggy1.c, nou a.out. En Sjoe, gered. Sodat dit lyk 'n bietjie lelik, want daar is geen nuwe lyn op enige plek in die program. Maar weereens, dit is net 'n estetiese detail. En ten minste as ons tel diegene wat nie, moet ons kyk nou 10 sulke sterre. Wel, wat oor hierdie tweede opwarmwedstryd voorbeeld? So in buggy2, ek beweer dat hierdie weergawe ook, sal druk 10 sterre, een per reël. So hierdie tyd, ek het 'n newline karakter, net om te dinge 'n bietjie mooier. Maar in plaas daarvan wat ek kry is hierdie. So laat my doen kletteren buggy2.c, Enter. Nou is dit weer genoem a.out. Enter. Ek sien net 'n nuwe lyn, net die laaste nuwe lyn wat beweeg my prompt na die volgende lyn. Maar tog ek is druk *, dan 'n nuwe lyn, *, Dan 'n nuwe reël. Maar wat is die fout hier? Ja? Gehoor: [onhoorbaar]. David J. Malan: Presies. So in teenstelling met sommige tale soos Python, waar inkeping funksionele betekenis, in 'n taal soos C - soos ons sal sien, PHP, JavaScript - die inkeping is regtig net vir die mens se voordeel. En die feit dat ek lyn 16 en 17 het ingekeep lyk groot, maar dit het geen funksionele betekenis hier. As ek wil beide lyne uit te voer as deel van die lus, dan moet ek sluit hulle in krullerige draadjies deur dit te doen. Jy kan slegs die hoek sny en laat die kode tussen krulhakies indien wat is die geval? Gehoor: Net een lyn. David J. Malan: Slegs een lyn. So dit is net 'n soort van 'n lekker soort van sintaksis detail sodat jy mors nie tyd met die skryf van drie lyne, waarvan twee krullerige draadjies, net 'n enkele lyn van kode te skryf. Maar as jy twee of meer lyne, het ons inderdaad nodig het om dit te doen. So nou, laat red my. Laat my voort te gaan en weer uit te voer kletteren. Laat my dan heruitzend a.out, en nou kry ek hulle een per reël. Nou, a.out is weer soort van 'n stom naam vir 'n program. Hoe kan ek jou vertel kletteren om werklik te gee my 'n lêer naam dit is meer gebruiker-vriendelik, soos buggy2 self? 'N bietjie meer duidelik? Gehoor: [onhoorbaar]. David J. Malan: OK, so ek kan eintlik neem die baie gebruiker-vriendelike kortpad en net skryf buggy2. Ek spesifiseer nie c in hierdie geval, en druk Enter. En wat maak nie, is dit stel buggy2.c vir my deur vra kletteren om dit te doen. Spesifiek, dit noem klang, dit loop kletteren met behulp manier om meer command-line argumente of skakelaars as wat ek werklik nodig het. In die tyd, sal ons kom terug na wat almal van die verskillende kriptiese koppelteken uitdrukkings beteken. Maar vir nou, dit is net spaar my die moeite om te onthou en uit te tik al daardie verskeie koppelteken uitdrukkings. En die onderstebo dit is uiteindelik dat ek nou het buggy2. As ek wil om dit te doen met die hand, alhoewel, ek plaas kan doen - klang-e-o buggy2 en dan buggy2.c. En dit sal insgelyks gee my 'n lêer genaamd buggy2. Dus, in kort, klang is die vertaler. Maak, is net 'n gebruiker-vriendelike instrument wat ons sal gebruik word om meer en nog baie meer, want dit begin net om te vereenvoudig dinge vir ons. En ons terugkeer 0, laastens. Vir nou, net omdat, maar ons sal begin terg daardie deel vandag en op Woensdag. Enige vrae oor enige van hierdie? Ja? Gehoor: [onhoorbaar] ls in aanhalings daar? David J. Malan: OK. Toe ek getikte ls in aanhalingstekens, wat my besig met 'n magie agter die skerms om 'n fout reg te stel. Ek het vergeet, soos ons het vertel baie van julle op die discussion forums, om dit te doen - sal ons dit nou doen - sudo yum-y update appliance50. Oeps, dat dit is reg gespel. So is die toestel is soos 'n bedryfstelsel. Dit is om hierdie bedryfstelsel genoem Fedora. En nou, ek het as gevolg van my stadige Internet verbinding regtig afgespuit. So loop sudo yum update, as ons sê om te doen in die probleem stel, is in wese soos hardloop outomatiese updates in Mac OS of Windows. En die rede vir die uitvoer van hierdie heel aan die begin van die gestelde probleem is omdat wanneer ons die toestel geskep het, het ek deurmekaar, en Ek het per ongeluk al jou programme kyk swart op 'n swart skerm, wat is die rede waarom jy dit nie sien by verstek. Maar die nuutste weergawe van die toestel is vasgestel. En Ek sal regmaak wat tydens pouse wanneer ek het nie Internet konnektiwiteit. So het die aanhalings net verberg my fout, baie strategies, glo. Ander vrae? Ja? Gehoor: Waar maak kom uit? [Onhoorbaar] David J. Malan: Goeie vraag. Waar maak vandaan? Dit is 'n Linux program wat vir baie jare bestaan ​​het, 'n lang voor CS50. En dit kom met 'n bedryfstelsel soos Fedora. Dit kom nie van die CS50 biblioteek. Trouens, die enigste dinge wat kom uit die CS50 biblioteek so ver, dat ons gesien het, is GetString, getint, almal van diegene Kry funksies, en die woord string, en tot 'n mate die woord Bool. Maar ons sal uitmekaar terg wanneer ons duik in die CS50 apparaat self. So ja, nog 'n vraag hier. Gehoor: Wanneer jy sê maak en dan buggy, hoe die rekenaar weet [onhoorbaar]? David J. Malan: Goeie vraag. So wanneer jy net loop buggy1 of buggy2, hoe maak ken? Dus, by verstek, as jy tik maak buggy1, kyk vir 'n lêer genaamd buggy1.c. En dan is dit voer die toepaslike kletteren opdragte, die standaard-uitset lêer genaamd a.out daardeur oorheersende. In werklikheid, as ons kyk na wat maak, wat - laat se gestop. As ons kyk na wat maak was eintlik doen, maak buggy2, dit is reeds op datum is. So laat my die rm instruksies verwyder, die program wat ek geskryf het voor. Tik Y-E-S om te bevestig dat ek wil om dit te verwyder. As ek nou doen, let op dat in hierdie baie lang lyn, daar is hierdie laaste ding wat hier-o buggy2. Maak almal doen is verby daardie argument, om so te praat, om Klang, sodat Ek het nie om dit self te tik. Alle reg, sodat 'n vinnige paar van administratiewe aankondigings. So vir afdelings, wat amptelik begin eerskomende Sondag, jy sal altyd wil bring, indien jy het een, 'n skootrekenaar. As jy nie 'n laptop het nie, doen bereik uit na my deur laat my 'n e-pos. En ons sal uitvind 'n workflow. Wat algemeen vind jy in die artikel is dat hulle deel konseptuele, hands-on. Ons sal spesifiek gebruik om die afdeling van die vrae, wat deel uitmaak van die week se probleem stel, om te loop deur 'n paar van die konseptuele materiaal van die lesing. En dit is al in die huidige probleem stel. En ons sal ook duik in 'n paar praktiese aktiwiteite, soms wat vereis word, ingedien word, soms wat nie. Byvoorbeeld, hierdie eerste week, hulle bedoel net as 'n warm-up oefening. En jy sal vind dat die probleme werklik is net dat. Hulle is bedoel om te wees redelik klein, maar nie noodwendig triviale programme te kan skryf, wat nie noodwendig opwindend in en van die self, maar is goeie geleenthede om oefen met sintaksis, met nuwe funksies, in die gemak van 'n artikel waar jy 'n paar van jou klasmaats aanbied as sowel as jou TF. En wat sal ons doen met verloop van tyd is 'n hulpmiddel genaamd CS50 Spaces, waardeur in plaas van net die gebruik van die CS50 Appliance, sal jy plaas gaan na 'n web bladsy in 'n browser, waar jy sal in staat wees om kode in 'n browser window te skryf tydens die artikel. En dan as jy kies in, jou onderrig mede kan dan wys wat dit ookal is wat jy op jou skerm te tik in jou 'browser' venster aan die voorkant van die klas, of anoniem of openbaar, sodat hy of sy kan dan loop deur met jou klasmaats wat jy goed gedoen het, wat jy nie goed doen. En weer, gerus al hierdie dinge kan mooi anoniem word. Maar dit sal 'n mooi geleentheid wees vir baie meer interaktiwiteit as iets soos lesing laat. In die tussentyd, sal ons hierdie dinge genoem super afdelings, wat is opsioneel, maar is oop vir almal in die klas, sodat jy kan dit doen meer gesamentlik vir probleem stel. Hier is die skedule. Dit word ook geplaas op die tuisblad by cs50.net. Let daarop dat daar sal 'n hacker-spesifieke een môre middag. En ons sal een vandag en een môre film en plaas daardie aanlyn binne 24 uur. So as jy nie kan enige van hierdie tye maak, nie te bekommer nie. En weer, die skedule is online now by cs50.net. In terme van seksie self, moet jy gekry het 'n e-pos opdrag om te gaan na die kursus se tuisblad te vind uit jou artikel. As die lewe het verander en wat jy nodig het om jou artikel te verander, nie 'n probleem nie. Gaan terug na dieselfde adres, cs50.net/section, enkelvoud, en jy sal die soortgelyke vorm invul, sodat jy kan dan gee ons jou voorkeure. En ons sal opvolg week se einde as wat ons kan akkommodeer. Verlede week, onthou dat ons voorgestel met behulp van CS50 Bespreek, die kursus se bespreking instrument, in die lesing. So ons het 40 vrae wat gevra word en beantwoord tydens die lesing. So was dit om goed te werk, so ons sal voortgaan probeer om dit te doen. Indien, tydens die lesing, het jy nie net gemaklik voel verhoging jou hand, nie 'n probleem nie. Gaan te cs50.net/discuss, daar te plaas, en een van ons onderrig genote sal óf beantwoord dit elektronies of maak hul hand namens u anoniem te vra, afhangende op die aard van die vraag. En in terme van terugvoer, sal oor die algemeen psets teruggestuur word binne 'n week. Want dit neem 'n kort rukkie om vir artikels te bereik ewewig, sal die eerste pset, 0 en 1, 'n bietjie vertraag as dinge gaan sit. Maar bly ingeskakel vir die wat in die komende weke. Alles reg, so laat my op my ernstige stem vir net 'n oomblik. So dit is eintlik 'n interessante klimaat te wees met hierdie bespreking, wat met al die ander dinge op kampus wat daarmee verband hou. Maar CS50 het beslis het sy geskiedenis van hierdie besondere onderwerp, in soveel soos elke jaar, hierdie kursus, vir baie jaar, Ad-Boards ongeveer 3% van die klas. Die mees onlangse jaar, 2011, CS50 Ad-aan boord van 35 studente. Dit is nie, dink ek, weens n gebrek aan duidelikheid. Besef dat in die loop se sillabus, daar is 'n bladsy van verklaring te verduidelik waar die lyne is. Dieselfde verklaring word herhaal op elkeen van die probleem sit op bladsy een. So ek noem dit vandag regtig net te maak mense bewus van hierdie. En ons het probeer om verskillende dinge. En wat ek gedink het ons vandag sou doen is net 'n oomblik te eintlik kyk na sommige van die verlede gevalle wat gekom het. Eerder as om dit as vuil klein geheime, eintlik wys wat die studente gedoen het en hoe ons bespeur en dit regtig wat die oorkoepelende motivering is vir selfs met hierdie gesprek. Dus met wat gesê het, die lyn is in wese - volgens die sillabus, jy welkom, jy word aangemoedig om, na praat met klasmaats. Dit is die hele doel van hierdie gesamentlike kantoorure in Annenberg en mense aangemoedig om vir die finale projek saam te werk. Maar die lyn word getrek wanneer dit tyd is om werklik te skryf jou finale oplossing. Praat in Afrikaans, heeltemal fyn, praat in 'n pseudo-kode, heeltemal fyn. E-pos 'n klasmaat jou pset, laat hulle kyk oor die skerm as die hande bly tik, oor die lyn as goed. Moenie kyk na die leerplan van die betrokke lyne. Maar net 'n beeld van hoe dit is ongelukkig 'n te verf werklikheid, besef dat daar websites daar buite wat oplossings van hierdie klas en baie ander klasse. Die feit dat jy of sowat 3% van julle weet dat dit bestaan beteken dat ons weet dat dit bestaan. Die feit dat daar is webwerwe soos hierdie waar jy iemand kan betaal om werklik te doen om jou probleem stelle - dit was 'n werklike geval wat opgekom het om verlede jaar. Dit is 'n webwerf met die naam odesk.com. En Tim was die naam van die persoon wat plaas op hierdie webwerf en vra iemand sy pset 7 te doen in hierdie spesifieke geval. Wel, odesk.com is baie Google-staat, en ons ook baie goed by Googlen. Ook hier is daar sites - en hierdie een is nogal gruwelike, eerlik. [Gelag] David J. Malan: Die snaakse ding oor hierdie site is indien jy lees die About page, hulle praat oor hul korporatiewe kultuur en hoe die kliënt diens is hul nommer een prioriteit, om seker te maak dat u werkopdragte kry gedraai in op tyd. Maar in alle erns, weer, is die feit dat hierdie sites bestaan ​​nie, besef ons ook bewus van hierdie soort van webwerwe. En gee jou 'n gevoel van wat vorm dit in die algemeen neem, ons het oor die algemeen nie groot skandale waar mense saam te werk op 'n soort van 'n massiewe skaal nie, maar eerder dit is hierdie laataand-oomblikke van swakheid, waar jy so baie om te doen, dit is 4:00, is jy uitgeput is, en jy dink aan jouself, wel, laat my net neem 'n blik op my kamermaat se of my vriend se kode of iets dergeliks. En die manifestasies van hierdie ongelukkig betrek Student A indiening van iets soos hierdie en Studente B indiening iets soos hierdie, wat seker in 'n rekenaar wetenskap klas, is merkwaardig maklik vir rekenaar wetenskaplikes op te spoor met die sagteware. Dit is 'n algemene paradigma, waar jy het soort van werk saam met iemand, miskien praat in Engels, net mooi, pseudokode. Maar dan is dit die tyd kom om werklik te dien, en die psets kry net uitgeruil via e-pos of Dropbox of iets dergeliks. Maar in 'n poging om te maak dit minder duidelik dat dit is wat gebeur het, dan is dit wat voorgelê. Dit is ook nie reis goed-geskrewe stukke sagteware soos ons het om werklik te spoor hierdie soort van dinge. En inderdaad wat ons doen, is hardloop sagteware wat al vergelyk hierdie jaar se voorleggings teen al van verlede jaar se voorleggings, teen alles wat ons op die Internet, teen elke taak webwerf daar buite. Dit is alles baie outomatiese. En so sal ons doen dit regtig in groot billikheid aan die 97% wat is regtig besig om hulle esels af in hierdie en in ander klasse en om in al van daardie poging, sodat die werk hulle uiteindelik dien is hul eie. En ek kan gaan vir eeue. Dit is net 'n handjievol van verlede jaar se gevalle. 'N Paar studente ingedien hierdie lêers identies vir pset 2, pset 3, pset 4, pset 5, pset 6, pset 9. In hierdie geval, dit was quiz 0 en in die afgelope jaar, waar twee studente ingedien identies hierdie sin onder baie ander, "Die versoek van die tipe" dot, dot, dot. Dus, selfs in 'n klas van 600 het ons ontdek hierdie is voorgelê op quizzes. Dus, in kort, dit - eerlik, haat ek met hierdie soort van gesprek - maar dit is regtig 'n doelbewuste poging hierdie jaar om te probeer om te ry af dat die getal. Want selfs al sê ons hierdie soort van dinge elke jaar, dink ek die werklikheid van woon op dit vir 'n paar nog sekondes as gewoonlik en eintlik net daarop te wys wat kan lyk, eh, nie so 'n big deal nie, ten minste dink terug aan hierdie spesifieke oomblik, beide in regverdigheid te jouself en aan jou klasmaats hier. So as jy ooit enige vrae het oor waar die lyn is, kan jy net uit te reik na my persoonlik. Maar die antwoord is altyd, heeltemal beklemtoon by die laaste minuut, kontant in 'n laat dag. Of indien dit is 'n kwessie van nie met enige laat dae, eerlik, e-pos my persoonlik. Ons sal wel iets uit. Asseblief, moenie jou tyd hier by Harvard in gevaar. Nou, ek dink ons ​​moet die gemoed te verlig, so ek hierdie as die volgende skyfie. [Gelag] David J. Malan: Hierdie webwerf was groot. Ek het eintlik 'n bietjie afgelei. Daar is hierdie een. En dan is hierdie een was amazing. Okay, so dink van daardie katjie laat in die nag by die maak van dié besluite hê. Alle reg, sodat terug na meer pret en minder ernstige dinge, soos voorwaardes. Alle reg, sodat ons kortliks gepraat oor hierdie. Dit is iets wat waarskynlik redelik vertroud van die wêreld van Scratch. En in die wêreld van Scratch, het ons hierdie behoefte soms gaan maak vurke in die pad. Doen dit of dat of hierdie ander ding hier. En wanneer ons wil om dit te doen, kan ons gebruik in C nou, dit as anders bou. En dan het ons hier Boolse uitdrukkings. Byvoorbeeld, Boolse uitdrukkings hier, ons kan of hulle saam, in die sin dat ons hierdie toestand of daardie toestand. Ons kan en hulle saam, in die sin dat ons wil Gaan hierdie toestand en dat die toestand. En hier het ons 'n verklaring van 'n skakelaar nou, wat is nie so soortgelyke sintakties daardie soorte van voorwaardes, maar dit stel ons in staat om die ekwivalent van as, anders as, anders as, anders om te doen indien, en dies meer deur eenvoudig deelinventaris hulle geval tot geval deur van geval tot geval. So ons het die laaste tyd. En dan het ons begin raak oor dinge soos loops. Ons het gesien een van hierdie net 'n oomblik gelede. Maar daar is hierdie ander herhaling konstrukte. Byvoorbeeld, hierdie een hier. Dus, terwyl (toestand), doen hierdie ding weer en weer. So in wese, wat blyk te wees verskil tussen hierdie lus en dit terwyl loop hier? Dit for-lus en die while lus. Ja? Wat is dit? Gehoor: [onhoorbaar]. David J. Malan: Goed. Dus, terwyl dit in die loop toestand, daar is duidelik meer sintaksis. Daar is hierdie inisialisering, daar is hierdie update. In 'n while lus, daar is net hierdie toestand. Dus blyk dit dat dit 'n bietjie vergeleke teenoor die lus, wat beteken dat as ons wil veranderlikes te hê en ons wil incrementation te hê, het ons eintlik moet hierdie ding doen onsself. So laat ek gaan voort en maak gedit. Laat my oor te skakel na die toestel. En laat ons net 'n vinnige klein voorbeeld wat onderskei een van dié van die ander. En in die agterkant van my gedagtes hier, moet ek sê een ding. Ek het spesifiek genoem die naam Tim. Tim was eintlik iemand wat 'n student probeer om te vind om te doen hulle huiswerk vir hulle. Ons het geen Tim in daardie spesifieke afdeling. So besef, sodat ek 'n student bekend gemaak, dit was nie 'n student. Dit was 'n random persoon op die Internet om dinge te doen deur proxy verlede jaar. So vind ons dat ook. So in hierdie geval hier, laat ek gaan voort en oop te maak 'n nuwe lêer. File, New. Dit gee my 'n blad hier. Laat my gaan voort en stoor dit as loop.c. Laat my gaan en klik op Save. En dan af hier, laat ons gaan voort en begin skryf # Include . Laat my zoom. Nou sal ons doen int main (void). Nou laat my gaan voort en doen vir (int i = 0; i < oh, 10; i + +). En nou is ek gaan om voort te gaan en doen die ster print dat ek het vroeër. En dan aan die einde van hierdie program, wat ons net gaan print 'n nuwe reël, net so dat my vinnige kyk nie na alle slordig. terugkeer 0. Lyk sintakties korrekte? So ver. So laat ons sien. So laat my uitzoomen, gaan in my terminale venster. En laat my voort te gaan en uit te voer lus, omdat Ek geroep ding loop.c. So maak lus. Lyk na OK te stel. Laat ek hardloop lus, en nou Enter. En dit blyk te gedruk het 10 sterre. So laat ons net skakel na 'n while lus en kyk wat vorme van kwessies wat ons reis oor. So in plaas van hierdie, laat my gaan hier in en sê terwyl ek minder as 10 - laat my ontslae te raak van die for-lus. OK, so ons het 'n paar van die probleme wat reeds. So die toestand is dieselfde, maar ek is natuurlik ontbreek die inisialisering. Ek mis die incrementation. So, wat moet die samesteller waarskynlik my vertel wanneer ek probeer om te Stel hierdie program? Ja? Gehoor: [onhoorbaar]. David J. Malan: Goed. So dit gaan om iets te sê soos onverklaarde - in hierdie geval, veranderlike i. En inderdaad, gebruik van onverklaarde identifiseerder i. En so het dit is in teenstelling met tale soos PHP en Python en Ruby, waarmee sommige van julle dalk vertroud wees, waar jy kan net soort van begin met behulp van veranderlikes willens en wetens en nie hoef te bekommer oor hulle te verklaar uitdruklik altyd. In C en in tale soos Java en C + +, jy moet super eksplisiete. En as jy wil 'n veranderlike genaamd i, moet jy my te vertel watter soort van 'n veranderlike is. So ons gaan te hê om dit soos volg te los. Ek gaan hê om te gaan hier en int i tik, daarom, Ek het 'n veranderlike genaamd i verklaar. Nou, ek het 'n stap oorgeslaan. Ek het natuurlik nie geïnisialiseer nie, maar laat ons sien of wat by minste fabrikate kletteren ophou kla. So laat my remake van hierdie program. Alle reg, nou is dit net kla vir 'n ander rede. "Veranderlike 'i' is geïnitialiseerd wanneer dit gebruik word hier." Alle reg, sodat wat is redelik eksplisiet. Geïnisialiseer beteken net dit gelyk is aan 'n waarde. En ons het dit nie gedoen nie, so laat ek probeer gelyk aan 0. Nou, laat ons probeer om dit weer en weer uit te voer kletteren. Saamgestel hierdie tyd. En ek is oor dit uit te voer. Maar groot ou oneindige lus, want ek gedoen het die inisialisering, het ek gedoen om die toestand, maar ek het nog nooit gedoen het enige soort van incrementation. So, hoe kan ek doen die incrementation? Wel, in 'n while lus, dit voel asof ek gaan te hê binnekant van die lus om dit te doen, want baie soos die eerste week se voorbeelde van doen herhaling konstrukte, soos met die sokkies en met die self-tel, wat ons moes doen iets heel aan die einde, soos om terug te gaan na die volgende lyn. Wat gebeur as ek gaan voort en doen dit i + + hier? Laat ons nie selfs stel. Catch me reeds. Wat is hier verkeerd? Gehoor: [onhoorbaar]. David J. Malan: So dit is beslis nie int. Dit is i. En die kode tussen krulhakies, soos vroeër, inkeping is nie genoeg nie. So nou kan ek bou dit. Dus, terwyl ek minder as 10 is, druk 'n ster, dan inkrementeer i. En die manier waarop 'n while lus werke is dat sodra jy druk op die onderkant van die lus, wat in hierdie geval lyk lyn 10, dit gaan om terug te gaan lyn 6, op watter punt die toestand sal weer nagegaan word. En as ek is nog steeds minder as 10, sal ons doen lyne 8 en dan 9, dan sal ons tref 10, en gaan terug na 6, weer en weer en weer en weer, so lank as wat ek is minder as 10. So laat ons weer uit te voer hier maak. Okay, het ons saamgestel okay. Laat my re-run loop. En nou lyk dit eintlik is om te werk. So plus punte en minuses hier? Wel, tot dusver is daar is eintlik nie 'n hele pcp - so cute. Alles reg, dit was 'n - ah, dit was 'n ongeluk. Alle reg, sodat laat ons gaan terug na die for-lus. So vir loops is mooi, want hulle is super eksplisiete. En selfs al is hulle 'n bietjie clunky om te skryf, is dit baie sterk en dit laat jou toe om te doen verskeie dinge op een slag. Terwyl loops lyk nie 'n groot bedrag van die waarde te hê net nie, want dit voel soos ons moet net meer werk te doen. Ons het die inisialisering hier te sit, die werk hier, en ons het om te onthou wat om te doen. So ons sal sien in die tyd dat terwyl loops eintlik leen hulself net verskillende kontekste, verskillende data strukture soos lyste en hash tabelle, dinge wat ons sal kry om die middel van die semester. Maar vir nou, weet dat daar is hierdie derde soort wat bekend staan ​​as 'n doen- while lus. En ons het gesien dat dit kortliks. En dit kan wees super nuttig pset 1. Enige tyd wat jy wil om iets te doen en dan kyk of die gebruiker saam, en as hulle gedoen het nie, doen dit weer, 'n doen- while lus leen hom tot daardie soort van logika. Want as die bestel van bo na onder hier suggereer, nie beteken letterlik doen. En doen dit weer en weer, wat kan dit wees? Miskien is dit beteken roep getint of GetString en dan die beheer van die waarde getint of GetString en dan skree aan die gebruiker as hulle nie saam deur hulle te vra weer en weer en weer. Waar jy wil iets om een ​​keer te doen, kontroleer dan 'n paar toestand. Kom ons probeer dit. Laat my eintlik verander nou na 'n do-while lus. En ek gaan om voort te gaan en die volgende te doen. So doen die volgende. Kom ons doen int i = getint (), maar laat ons eers vir die gebruiker wat om te doen nie. So 'n bietjie anders hierdie keer. "Gee my 'n int". So ek sal printf gebruik vir. En nou is ek gaan om af te gaan, en ek gaan om dit te doen terwyl ek besig is, laat ons sê, groter as - Kom ons kyk, ek is, laat ons sê, minder as 0, of ek is groter as 10. Met ander woorde, ek wil 'n getal van 1 tot 9, arbitrêr. So ek is met behulp van 'n gekombineerde Boole-uitdrukking hier om te maak seker dat ek is minder as 0 of groter as 10, geval sal ek ook hierdie lus hier weer doen. Dit weer doen, dit doen - terwyl ek minder as 0 of ek is groter as 10. So nou, laat ons gaan voort en doen dit wanneer ons dit gedoen het. Laat ons net 'n vinnige sanity check. printf ("Dankie, ek is% d", i). So hierdie eenvoudige program vra die gebruiker vir 'n int, maak seker dit is binne 'n paar reeks, 1 tot 9 ingesluit, en dan bedank die gebruiker deur hulle daaraan te herinner wat hulle net getik in, net soos 'n bietjie gesonde verstand tjek. Maar laat ons kyk of dit werk soos bedoel. Laat my gaan kop af hier en weer hardloop maak lus. Hmm. "Gebruik van onverklaarde identifiseerder 'i'". Dis vreemd. Ek het gedink ons ​​het besluit dat. Dieselfde simptoom maar verskillende kode. Ja? Publiek: [onhoorbaar] binne die twee, ons moet [Onhoorbaar]. David J. Malan: Presies. So dit lei eintlik ons ​​aan 'n onderwerp wat bekend staan ​​as die omvang. Dit blyk dat C weer, dit regtig neem jou letterlik. En as jy iets soos hierdie waar jy 'n int verklaar en dan wys dit 'n bietjie waarde, maar jy doen dat die binnekant van 'n paar van die kode tussen krulhakies, wat C nie, is dit aanvaar dat jy wil net daardie 32 bisse bekend as ek om te bestaan ​​binne die konteks van daardie kode tussen krulhakies, binne die konteks van lyne 6 tot 9. So ek is verklaar, en dit is wat 'n waarde in reël 8, maar so gou as jy buite lyn 9 onder die krullerige brace, ek is nie meer in omvang, om so te praat. S-C-O-P-E. Dit is nie meer in die regte konteks. So nou is daar geen i, so dit is asof ons het nie eens verklaar dit glad nie. So, wat is 'n oplossing dan vir iets soos hierdie, indien die rede is dat ek verklaar word binne die kode tussen krulhakies, wat is blykbaar sleg? Hier? Gehoor: [onhoorbaar]. David J. Malan: Ja. Sodat ons kan inisialiseer buite. So laat ek gaan voort en verwyder die verklaring dele waardeur Ek spesifiseer die tipe, en laat my doen dit hier. So in reël 5, dit sê nou: "Gee my 'n int." Noem dit i. Kennisgewing in reël 9, Ek wil nie hê om dit te doen, want ek reeds die 32 stukkies. Ek wil nie die rekenaar om te vra vir 'n verskillende 32 stukkies. Ek wil daardie 32 bisse gebruik. En nou, want ek is in reël 5 verklaar, dit is nog steeds wettig om dit te gebruik in lyn 11 en lyn 12. So laat ek probeer om dit te hercompileren en sien indien kletteren stop skree. maak lus. So nou is dit "implisiete verklaring van die funksie 'Getint "is ongeldig in C99" Wat is dit? Ja? Gehoor: [onhoorbaar]. David J. Malan: Ja. So nou dat ek eintlik is die gebruik van getint, dit is nie iets wat kom net met C. Dit kom van CS50. Daarom moet ons dit hier. En laat my terug gaan na die stiptelike down hier en weer uit te voer. Okay, uiteindelik. Nou het ons besluit dat en die ander fout. Laat my tog hardloop lus en kyk wat gebeur. "Gee my 'n int." Ek gee dit 11. Ek sal dit gee -1. Ek sal dit gee cat. Ek sal dit gee 5. En nou is dit werk. Maar die vinnige verander hier vir 'n rede. Hoekom het dit sê weer probeer een van hierdie tye, maar gee my 'n int die ander drie keer? Hoekom is dit gedrag anders? Gehoor: het dit 'n string. David J. Malan: Jammer? Gehoor: Jy het dit 'n string. David J. Malan: Ja. So ons het dit 'n string in hierdie derde poging, toe ek getik cat. Foo is 'n string. Dit is natuurlik nie 'n int. En die manier waarop CS50 getint geïmplementeer het, is dat ons nie kyk as daar iets is minder as 0 of meer as 10 vir jou, want hoe weet ons vooraf watter soort int wat jy wil? Maar ons kan ten minste so vir jou, het ten minste die gebruiker tik 'n heelgetal? En as hulle nie, ons skreeu op die gebruiker deur te tik "probeer weer" op die skerm. So nou het ons 'n program wat herhaling. Okay. Nou, watter van hierdie is 'n soort van die beter konstruk? So, dit is waar dinge begin om te kry 'n bietjie slordig, die feit dat jy moet onthou om 'n veranderlike te verklaar hier as jy wil om dit te gebruik binnekant van sommige krullerige draadjies en buite. Maar selfs as dit lyk 'n bietjie kripties op die eerste oogopslag, net weer, onthou die eenvoudige logika. Om iets te gebruik in C, of ​​dit nou 'n funksie of dit is 'n veranderlike, moet jy dit in te sluit indien dit is 'n funksie in sommige biblioteek, of wat jy nodig het om dit te verklaar. Maar nou wat jy nodig het om ekstra bewus van die feit dat jy verklaar dat dit in die regte omvang. Jy nie om dit te styf binne hakies. So laat my terug eintlik rol. As ons gaan terug na ons byvoorbeeld van vroeër, en ek gaan terug na vir int, int i = 0; i <10; i + +, en ek printf sterre, soos hierdie, en dan naby hakie, en nou doen printf ek is nou - volgens dieselfde logika, wat sal gebeur wanneer ek probeer om te Stel hierdie program? Gehoor: Ongeldige id. David J. Malan: So dit is 'n ander ongeldige identifiseerder, onverklaarde identifier. Nou, die rede is 'n bietjie anders. Daar is natuurlik geen kode tussen krulhakies hier, maar dieselfde idee, dieselfde storie van die omvang van toepassing. As jy het 'n veranderlike verklaar soos ek binnekant van 'n lus, selfs as jy nie uitdruklik geskryf die krullerige draadjies, dink hulle geestelik nog steeds daar, in welke geval ek is slegs geldig binnekant van die loop. Dit is nie geldig wanneer jy na die volgende lyn, wat in hierdie geval is nou 10. Sodat net 'n paar kwessies van die omvang en die wil. Alle reg, enige vrae? Alle reg, sodat dit is 'n soort van 'n onbeduidende klein program, druk net bietjie sterre. Maar laat ons kyk of jy onthou hierdie lied hier. Dit is 'n ongelooflik irriterende liedjie wat die kinders sal sing die skoolbus en dies meer. Maar wat is lekker oor dit is dat dit hierdie cycliciteit, waardeur dit is "99 bottels van bier op die muur, 99 bottels van bier. Neem een ​​af, slaag dit rond, 98 bottels van bier op die muur. "En dan is die liedjie herhaal die 97, dan 96, dan 95, dan 94, al die pad af na 0 as jy eintlik het dat ver op die bus. So, dit is 'n mooi program te sorteer implement, want my God, as jy kon net die uitvoering van hierdie met 'n paar reëls van die kode, kan jy spoeg uit die hele lyrics hierdie lied redelik vinnig. Maar langs die pad, kan ons begin om nou te terg uitmekaar van hierdie basiese herhaling konstrukte en nou ook stel funksies wat ons skryf onsself, terugkeer waardes dat ons beweeg rond. Maar eers, waarom ons nie voort te gaan en neem ons vyf-minuut breek hier? En wanneer ons terug te kry, sal ons hierdie lied sing. Alle reg, sodat ons is terug. En as ek sê ons sal nou hierdie lied sing, ek bedoel programmaties, nie mondelings nie. So hier is ons het beer1.c, wat is 'n implementering van hierdie spesifieke liedjie. En net om duidelik te wees, vir diegene wat nie vertroud met wat hierdie ding lyk, laat my gaan voort en maak BEER1 Enter. Laat My dan nou hardloop BEER1, en wat ons sal sien - hoeveel bottels bier sal daar wees? Ek sal tik in 99, soos die liedjie sê. Enter. En nou as ons blaai deur - oops - as ons blaai deur al hierdie dinge, sal ons sien dat dit het inderdaad die hele lied sing. Wag 'n minuut. My schuifbalk is 'n bietjie deurmekaar. Kom ons gebruik die groter venster. So BEER1, 99, daar gaan ons. So hier het ons die hele lied, gesing baie vinniger deur die rekenaar as wat dit kon gewees het deur ons. So let, alhoewel, die sikliese aard hier. Dit sê 99, dan 99, dan neem een ​​af, gaan dit rond, "dan 98. En nou is dit herhaal weer en weer. So dit is eintlik 'n ideale geleentheid vir 'n soort van herhaling bou. Let op dat ek is soort van die sny van 'n hoek hier. Let daarop dat ek sê "98 bottels van bier op die muur, 97 bottels van bier op die muur, "en dit was net so dat wanneer ons na een bottels van bier, ek het nie bekommerd te wees oor die Engelse grammatika. Maar ons kan ook hierdie probleem oplos met 'n bietjie van 'n as toestand, miskien. As hierdie getal is enkelvoud, gaan voort en sê: "bottel", anders as dit is meervoud, sê: "bottels". Maar vir nou, ek is heeltemal te sny daardie hoek. So laat ons sien wat ons hier het. Dus het ons 'n paar opmerkings aan die bokant. Ek sluit hierdie twee biblioteke, ons het algemeen. Laat My dan nou scroll af na die eerste werklike reëls van die kode. Line 17 skop af Hoofstraat. Line 21 en 20 het hoeveel bottels bier daar sal wees? En dan moet ek noem getint. En nou het ek 'n bietjie van 'n gesonde verstand tjek. So, dit is 'n konvensie wat sal ons nou begin die aanneming van meer streng check die gebruiker se insette. Soms wil jy net hulle nie weer gevra word en weer en weer. As die gebruiker skroewe en nie saam, fyn. Stop en net te doen het nie met hulle. En so het dit is wat ek hier doen. Indien n is minder as 1, is ek net gaan om te skreeu op die gebruiker, "Jammer, dit maak nie sin nie." En dan gaan ek te arbitrêr terug 1. Dit weer doen, dit is net 'n konvensie om gewoond te raak. Vir nou, neem dit op geloof. Maar tot nou toe, het ons altyd terugkeer 0, omdat ons het gesê terugkeer 0 dui wat? Gehoor: Sukses. David J. Malan: Sukses, dis al. So nou dat ons uiteindelik is begin om oor na te dink nie-suksesse - in ander woorde, hoek gevalle, fout voorwaardes - nou het ek 'n oneindige toevoer, of ten minste vier miljard moontlike dinge wat verkeerd kan gaan in my programme. En ek kan begin met die toeken van hulle individuele nommers. Nou, oor die algemeen is dit voldoende om net terug iets anders as 0. So ons gaan net terug 1 vir nou. Maar die rede vir die terugkeer van 1 is dat sodra jy terugkeer 1, raai wat gebeur met die res van die program? Dit stop. Dit is dit. So die feit dat ek 1 is die terugkeer is effektief kortsluitings die uitvoering van hierdie program, sodat niks onder line 27 sal voortgaan om die uitvoering. So gou as hoof opbrengste, dit is dit. Alle reg, sodat as die gebruiker nie saam te werk en ons bereik lyn 30 omdat hulle getik in 'n wettige nommer, hier is my implementering van hierdie lied. So het ek die eerste keer druk 'n newline karakter, net vir estetika. Ek het nou 'n for-lus. En let op ek om dinge te doen in 'n bietjie van 'n ander rigting. Ek het nie minder as om te doen, ek het nie + + te doen. Ek kan in plaas daarvan sê inisialiseer 'n veranderlike i, stel dit gelyk aan n, die aantal wat die gebruiker ingetik in, dan doen die volgende, so lank as wat ek is groter as 0, dan is ek - sodra jy klaar is een iterasie van hierdie lus. So kan ons reken af ​​met behulp van 'n for-lus so goed. Nou, dit is pretty much week een dinge nou met printf. So print "% d bottels van bier op die muur." Print "% d bottels van bier. "" Neem een ​​af, beweeg dit rond. "Print "% D bottels van bier op die muur." So dit is nog steeds% d nie, maar opmerk dat die argument printf is besig om te verander. Na die komma, ek het my, want ek wil hê om te sê 99. Na afloop van hierdie komma, ek het my, want ek wil hê om te sê 99. Ek het na hierdie komma i - 1, want ek wil 98 te sê hierdie eerste iterasie, en so meer. En nou sit hier, ek het net 'n paar dom klein opmerking. En dan lyn 42, ek terugkeer 0 deur die konvensie, wat beteken dat alles is okay. So, wat as ek goofed? Wat sou 'n gemeenskaplike fout hier wees? Wel, wat as ek per ongeluk het goed, ek wil om te tel af na 0, ek wil 0 bottels van bier op die muur? So ek sê, ek is groter as of gelyk aan 0. Wat gaan die simptoom wat ek nou sien as ek heropstel BEER1 en voer dit uit? GEHOOR: Negatief. David J. Malan: Ja, dit is nou eers gaan negatiewe. Dit is 'n off-vir-een fout, 'n ongelooflike algemene fout te maak. Kom ons eintlik terug te gaan na die terminale venster en doen dit hier, sodat ons kan sien meer op 'n slag. Betree, 99 bottels van bier. Naby, maar ons het ooit so iets te ver. Ons het die lied gesing te ver af, soos wat ons nou tref die negatiewe getal. So is dit nie heeltemal werk nie. Alle reg, sodat ons kan maklik los dat deur terug te gaan na die manier om dit eens was. Maar wat is 'n paar geleenthede wat nou vir verbetering? Wel, laat ek oop beer2.c en scroll down hier en neem 'n kyk na hierdie weergawe. Wat is die eerste ding wat spring uit by jou as verskillende in hierdie weergawe hier? Gehoor: [onhoorbaar]. David J. MALAN: Ja, so nie meer ek, omdat dit plaasgevind het my jy weet wat, ek die gebruiker vir n ek vra, en dan is ek opstel van i gelyk is aan n, en dan verander ek i, maar ek is nooit raak n weer. So, wat die heck is die punt van die toekenning van 'n ander 32 stukkies genoem i net sodat ek kan 'n ander veranderlike? Dus, in hierdie geval, ek soort van erken dat onnodige ontwerp funksie. En ek gaan nou te sê, terwyl n groter as 0, gaan voort en print dieselfde lied, verby 'n printf as die tweede argument, en n - 1 as die tweede argument hier onder. En dan op elke iterasie van hierdie lus, voor en net te gaan Trek 'n self. Nou, funksioneel, hierdie program gaan identies te wees. As ek tik in 99, n begin op 99. Ek decrement, decrement, decrement, decrement. Ek gaan al die pad af te kry na "Een bottel bier op die muur, die een bottel bier. Neem een ​​af, beweeg dit rond. 0 bottels van bier op die muur "Die einde, want ek het Kry die toestand korrek is. Dit is groter as 0. Ek het nie hierdie fout maak nie. So wat is beter, weergawe een of weergawe Twee? So ek het 'n klomp van die murmureringe gehoor vir twee. Waarom twee? Wat is dit? Gehoor: [onhoorbaar]. David J. Malan: "O, okay. So dit sal nie gaan onder 0, maar onthou, in die weergawe een, die oorspronklike korrekte weergawe nie onder 0 óf. So onthou dat hierdie is die korrekte weergawe. So laat ons ten minste vergelyk die twee korrekte weergawes. Wat is 'n argument ten gunste van weergawe twee is, mmm, beter? Ja? Gehoor: Dit maak gebruik van minder ruimte. David J. Malan: Okay, so dit gebruik minder spasie, reg? AANGESIEN weergawe een wat gebruik word 32 bisse vir n, en dan die ander 32 bisse vir i. Weergawe twee het net 32 ​​bisse gebruik vir n, sodat lyk na 'n plus wees. Ander gedagtes? Is daar iemand wil om te argumenteer ten gunste van die een? Ja? Gehoor: Jy het ekstra reël van die kode te gebruik vir n -. David J. Malan: Okay, seker nie. So dit is regverdig. So dit is net, ten minste vir my - Ek bedoel, dit eintlik voel 'n bietjie Messier, die feit dat Ek kan nie sorteer kapselt al my logika in een pragtige lyn, die lus, as die lus kan. Hier, ek soort van te ryg op hierdie n - aan die einde van die lus, want dit is logies nodig. Maar dit vryf soort van my op die verkeerde manier, net omdat dit lyk apart van die logika van hier, selfs al weer, dit is nodig. Ander gedagtes? Ja? Gehoor: [onhoorbaar]. David J. Malan: Ja. So, wat as jy plaas, aan die einde van die liedjie, wou druk weer die naam van die liedjie? Soos "Dankie vir die speel van 99 bottels van bier", of iets dom soos wat? Maar die punt is, jy wou toegang tot die oorspronklike waarde. Die feit dat jy gemuteerde of verander n op elke iterasie en daarom het sy oorspronklike waarde vernietig beteken dat jy net nie kan doen wat aan die einde. Nou, waarskynlik ons ​​duidelik nie wil hê om te doen wat in hierdie program. So wat omgee? Maar dit is 'n baie geldige punt. En om eerlik te wees, daar is regtig niemand reg hier beantwoord. Hulle is albei ewe korrek is. Ek kon oortuig word óf manier. Ek sal sê dat, in die algemeen, is dit 'n goeie beginsel as jy die gebruiker gevra vir 'n paar waarde en jy in 'n veranderlike gestoor soos n, net soort van beginsel, dit is waarskynlik 'n goeie wat rondom hou. En enige inligting wat jy wil om weer en weer te muteer, net gee jouself 'n afskrif van daardie veranderlike, net sodat jy het toegang tot die oorspronklike. Jy spandeer 32 meer stukkies, maar die werklikheid is hierdie rekenaar, soos twee GB RAM hierdie dae, en ons quibbling meer as 32 stukkies? Regtig nie so 'n groot deal. En selfs op hierdie toestel hier, met 'n 1/2 'n gig of 'n GB RAM, 32 stukkies teenoor 64 stukkies, nie so 'n big deal nie. Sekerlik vandag, gaan dit manier wat oorweldig is deur die grootte van die program self, wat gaan wees 'n paar honderd kilogrepe, indien nie 'n paar megagrepe, hierdie dae. So redelike kommer, geen een korrekte antwoord. Maar ten minste dit is die gedagtes wat moet begin gaan deur jou gedagtes? Omdat in pset 0, selfs al het ons eintlik net verwag korrektheid, of ten minste afwijzen van aanspreeklikheid verskeie foute wat jy dalk teëgekom het, as ons vorentoe beweeg, ontwerp is gaan na 'n ander belangrike aspek, beide van die skryf van kode en ook ons ​​evaluering van kode. En so gee ten minste gedink aan dinge soos hierdie. En net omdat iets werk, beteken nie dit is goed, beteken nie dit is goed ontwerp. En dit is een van die dinge wat die onderrig genote en probleem stelle sal help om ons terg deel met verloop van tyd. Wel, wat, laat ons sê, hierdie weergawe hier? Laat my om iets te doen 'n bietjie sexy hier in 'n oomblik. Eerste laat my ontslae te raak van hierdie. En nou, laat ons dit regmaak grammatikale probleem. Dus, in hierdie weergawe, ek wil die grammatika reg te maak sodat eerder as om net tussen hakies s sê, soos "bottel" of "bottels" - Ek wil nie dat die hoek te sny - Ek wil ook dinamiese druk die woord "bottels" of "bottel", waardeur die gebruik van hierdie% s plekhouers vandag. So ek moet voorwaardelik kyk wat is die waarde van i. En as dit is 1, Ek wil "bottel" te sê, en as dit enigiets anders, ek wil om te sê "bottels". So laat ons probeer om dit te doen. So as ek == 1, dan laat ek gaan voort en verklaar - Ek moet 'n string, so laat my string s1 doen, want dit is die eerste string wat ek omgee right now. Ek gaan om te sê "bottel". En dan, laat ons sien, string s2 - en ek sal verduidelik waar ek gaan in 'n oomblik - "Bottels." So onthou dat in hierdie lied, het ons nodig het om in staat te wees om dinge, twee verskillende woorde te potensieel te druk. So as ons terug kyk hier, sien dat wanneer ons hierdie voorbeeld hier, "het twee bottels van bier op die muur, twee bottels bier, neem een ​​af, slaag dit rond ", wat ek wil hê, hierdie vierde reël nou te sê "een bottel bier op die muur "So ek nodig het om te besluit, ek wil om te sê" bottels "of "Bottel"? So ek gaan na willekeur te sê, al die regte, Ek gaan om te verklaar nou 'n veranderlike genoem s1, string een is wat gaan ingeprop te kry hier en ook hier, want hierdie woorde is altyd identies, net as gevolg van die aard van die lied. En ek gaan om te bel s2 watter woord wat ek wil uiteindelik verskyn hier onder. Nou, letterlik, 99 keer uit 100, is dit gaan wees om die dieselfde in albei daardie gevalle nie, want 3 is meervoud, 2 meervoud, 4 is die meervoud. Maar in hierdie hoek geval, waar ons tot 2 en dan 1 of selfs 1 en dan 0, ek moet hierdie logika. So ek het 'n bietjie tyd te spandeer in my kode om dit reg te kry. So as ek dit doen, as ek == 1, dan s1 gelyk aan "bottel" en s2 gelyk aan "bottels", want dit sal wees vir 1 bottel, en dit sal wees vir 0 bottels. En dit is hier, wat beteken dit verteenwoordig? Net om duidelik te wees. Dit is net 'n comment. En die feit dat jy enkel-lyn kommentaar kan beteken dat jy kan jou kode kommentaar soos hierdie, maar 'n ander gemeenskaplike paradigma, ook, is dat as jy 'n super-kort frase wat jy wil om jouself te sit en dit is net meer leesbare te sit dit reg aan die einde van die lyn van die kode, kan jy absoluut iets soos hierdie te doen. So nou wat as ek dit doen? Anders as ek is nie gelyk aan 1. So bang is gelyk aan - uitroepteken is bekend as "bang". So bang = 1. So as ek is nie gelyk is aan 1, doen wat ek plaas wil om dit te doen? Wel, die eerste woord wat ek wil om te wees wat? So string 1 moet "bottels" vir meervoud bottels, en dan is dit sal wees meervoud "bottels" so goed, vir nou. En ons sal sien of dit eintlik om ons te kry waar ons wil gaan. So as ek nou scroll down hier opmerk dat ek steek in nie ek alleen nie, maar s1. Ek steek in i en s1. En dan af hier, ek is minus 1, wat dieselfde is as voor, maar s2. Met ander woorde, ek wil die Engelse woord te verander gebaseer op hierdie logika. Nou, daar is reeds 'n paar probleme in hierdie kode. Wat reeds uitgebreek van die poort hier? Ja? Gehoor: [onhoorbaar]. David J. Malan: Presies. So ek het reeds oortree die les van die omvang. So ek het S1 en S2 verklaar nie, maar Ek het dit gedoen binnekant van krullerige draadjies, wat beteken ja, hierdie kode sal werk totdat line 42, maar so gou as ek lyn 43 getref het, raai wat geen meer bestaan ​​nie? Wel, raai wat is nie meer in omvang - nie s1 of s2. So ons het om dit op te los. So laat ek die verklarings verwyder. En Ek sal laat die veranderlike name en verwyder dit hier en verwyder dit hier. En in watter lyne Ek moet regtig hierdie dinge verklaar? Gehoor: [onhoorbaar]. David J. Malan: Ja, so waarskynlik reg hier, 33-ish. So string S1 en dan string s2. En dit blyk, kan ek dit doen. As jy twee veranderlikes van dieselfde soort te verklaar, Jy kan eintlik net 'n komma gebruik en doen in C. Alle reg, so nou het ek twee veranderlikes - S1 en S2. Ek is die toeken van hulle waardes in hierdie toestande hier, of in hier. En dan is ek met behulp van hulle hieronder neer. Hoe goed dit gaan nou te werk? Wel, dit is nog steeds 'n bietjie buggy, maar laat ons ten minste sien hoe ver ons gekry het. So laat ek gaan voort en maak beer3. Is hierdie beer3? Yep, dit is beer3. Laat My dan nou voort te gaan en uit te voer beer3. 399 99. Ons kan waarskynlik slaan die meeste van hulle. En af hier, kyk op daardie. "Een bottel bier op die muur, een bottel bier, een af, beweeg dit rond, 0 bottels van bier op die muur. " Maar ek jou aandag te trek tot net die helfte van die oplossing. Soort van screwed up hier. Dus blyk dit dat die hoek gevalle ontstaan ​​wanneer ek gelyk is aan wat twee waardes? Gehoor: 2, 1. David J. Malan: 2 en 1. Dit is nie 1 en nie 1. Dit is regtig net hierdie laaste twee strofes van hierdie lied. So, wat ek plaas wil doen? So dit lyk asof ek gevang het die geval waar as ek == tot 1, dan is die eerste woord is "bottel", maar die tweede woord is "bottels". Maar hier, ek wil verander om dit te == 2. En as dit die geval is, doen wat ek wil die eerste woord te wees? Gehoor: "Bottles". David J. Malan: "Bottles", so vir twee bottels. En dan hierdie woord hier moet wees - Gehoor: "bottel". David J. Malan: "bottel", enkelvoud. Alle reg, laat se uitzoomen, gaan terug hier, re-run maak, re-run beer3, tipe 99 weer. Okay, "Segmentasie skuld (kern gestort)." Wat het ek verkeerd gedoen? Gehoor: Jy hoef nie 'n waarde [onhoorbaar]. David J. Malan: Ag, 'n uitstekende punt. Alle reg, sodat Wat is hier verkeerd? So segmentering skuld, en ons is eintlik gaan om te sien dit nogal 'n paar keer in die toekoms, doelbewus. Maar vir nou, wat beteken dit eintlik beteken? 'N segmentering skuld beteken byna altyd wat jy het geheue, geheue in jou rekenaar op een of ander manier probeer om toegang te verkry tot, wat jy doen nie, dat jy eintlik nie gevra om die bedryfstelsel. Dus, in hierdie geval, let op wat ek gedoen het, wat gebrekkig in my logika. Ek het S1 en S2 'n waarde as wat i gelyk is aan 1. Ek het ook gedoen dat indien ek gelyk is aan 2. Maar ek het nie dit gedoen het in die oneindige aantal ander moontlikhede - in die besonder, 3 of 4 of dot, dot, dot, 99. So kon net een oplossing vir hierdie let's 'n anders toestand. En my laat gaan hier in en sê s1 is gelyk aan - Wat moet dit hier wees? Gehoor: [onhoorbaar]. David J. Malan: "Bottles", want in die algemene geval, dit is net die dieselfde ding. So is gelyk aan quote, unquote, "bottels." So vir meervoud bottels, en dan hier, vir meervoud bottels. Okay, so laat my nou terug te gaan na my terminale venster, heropstel, re-voer dit uit. 99. Sjoe. En laat ons doen 'n vinnige sanity check. Tegnies, sou ons wil al hierdie te lees om seker te maak hulle is korrek, maar laat ons kyk na minste die bekende skuldiges. 3 bottels, 2 bottels, 2 bottels, 1 bottel, 1 bottel, 0 bottels. Ons lyk het ten minste vasgestel dit vir nou. Maar die vangs hier is dat wat 'n god aaklige gemors dit is net 'n dom op te los een karakter grammatikale detail. So daar is 'n soort van 'n rede dat ek sny hierdie hoek vroeër, want dit is net heeltemal irriterende moet skryf hierdie veel-kode. Maar dit blyk dat daar is effens meer elegante maniere uitdrukking van die presies dieselfde ding. En ons kan doen dit soos volg. Laat my los dit op die skerm vir 'n oomblik en voer iets wat bekend staan ​​as 'n drieledige operateur. Dit is 'n soort van 'n one-liner wat net bedoel om ons leef 'n bietjie sexier, soos belowe. En ek gaan om dit te doen soos volg. Gee my 'n string met die naam s1, en laat my wys dit as volg. (I == 1)? "Bottel", anders "bottels". String s2 kry (i == 2)? "Bottel", anders "bottels". So wat is dan die verskil hier? Hierdie twee reëls van die kode, het ek argumenteer, kan Vervang hierdie hele gemors. Daarom noem ek dit 'n gemors, net omdat dit soort van vryf my die verkeerde manier dat dit so baie reëls van die kode. Nie verkeerd nie. Dit is nie slegte ontwerp. Wil, dit is heeltemal korrek en perfek fyn. Maar kodering kry vervelig as jy jouself om dit uit te druk damn spesifiek weer en weer en weer met 'n eenvoudige scenario soos hierdie. So C het 'n paar kortpaaie, soos hierdie. So, dit in wese sê verklaar 'n string met die naam s1 en toewys hierdie waarde of hierdie waarde as ek == - jammer, moet ek sê dit meer duidelik. Verklaar 'n veranderlike s1, wys dit waarde as dit waar is. Andersins, wys dit waarde. So met ander woorde, dit is 'n soort van 'n een-lyn weg van sê as anders, maar 'n opdrag te doen langs die pad. So as ek is 1, dan voort te gaan en roep hierdie "bottel". En dan is dit anders, noem dit "bottels". Intussen, s2, die tweede woord wat ons nodig het om te definieer, indien ek gelyk is aan 2, sal ons stel s2 na "bottel". Andersins, stel dit na "bottels". En wat Dit beteken dit is nou ek kan gaan deur middel van hierdie en verwyder al daardie reëls van die kode. En as ek sê, 'n bietjie belaglik, dat dit is nou sexier, dit is sexier in die soort van stilistiese verstand. Die feit dat funksioneel, hierdie kode is eintlik gaan doen presies dieselfde ding. En hoewel dit lyk dalk 'n bietjie kripties op die eerste oogopslag, omdat ons nie hierdie konstruk gesien het voor, sou ek argumenteer dat dit uiteindelik gaan om soveel meer te wees leesbare en so veel makliker vir ons mense te sorteer verstaan ​​nie, want nou kan jy lees net die kode almal op een lyn. Dit is nog steeds dieselfde in die gees op 'n as, waar dit die toestand en dan is dit wat is binne-in die as, en dit is wat is binne-in die ander. Maar ons kan dit net baie meer elegant. En as ek nou terug gaan na my terminale, verwyder alle van daardie lyne en vervang hulle met net die twee, heropstel, re-run bottels van bier met 99, kennis dat my grammatika is, in werklikheid, nog korrek is. Dit weer doen, iets om te begin. 2 bottels van bier, 1 bottel bier. Reg lyk. Ja. So daar het ons het 'n baie meer bondige oplossing. So ook, as jy meer gemaklik met C, nie noodwendig met die eerste pset of selfs 2, maar besef dat hierdie konstrukte ons kan nie toelaat dat dinge om ooit te doen meer elegant. Laat ons nou 'n ander ding doen hier. Laat my voort te gaan en maak return1.c. Nou laat ons begin nog 'n probleem op te los in 'n manier wat stel ons in staat om meer gesofistikeerde kode te skryf. So hier is 'n eenvoudige klein program wie se doel in die lewe is waardes inkrementeer. En eintlik, laat ons 'n stap terug. Laat ek dit handmatig doen. Laat my sluit en int main (void). En laat my noem dit increment.c. En wat doen wat ek wil doen? Ek gaan om voort te gaan en iets sê soos: - noem ons die getalle dieselfde - int x. So int x kry 2 printf x is% d nuwe lyn, x. So ek tik vinnig, maar soort van bekende dinge nou. Dan gaan ek x + + te doen. Dan gaan ek daardie selfde sin weer te druk. En dan gaan ek 0 net die program om op te hou om terug te keer. Alle reg, sodat dit is 'n program wat inkremente 'n aantal. Dit is eers gaan om iets te inisialiseer 2, en dan is dit gaan om dit te inkrementeer en druk dit weer. So laat ons hardloop inkrement, ongelooflik eenvoudige program. Maar nou dink dat ek wil kubus die waarde, so doen iets ietwat arbitrêre. En ek eintlik wil doen x kry die kubus dit. So ek kan gebruik wat die pow-funksie genoem, maar ek doen nie regtig weet waar dit is nog. So ek gaan om dit te doen die outydse manier. x tye gelyk is aan die x maal x maal x. So ek cubing die waarde te vermenigvuldig op sigself weer en weer en weer, sodat ons die krag kry van 3 in hierdie geval. So nou die getalle wat ek moet druk moet wees, soos ons sal sien hier - maak inkrement, so dit is eintlik nie regtig inkrementeer nie, maar ons sal die naam uitlos - 2 en dan 8. Nou, ons het die begin van 'n geleentheid vir verfyning hier, waardeur hierdie cubing ding van 'n getal te vermenigvuldig deur self deur homself deur self voel soos hierdie dalk net wees nuttig as 'n funksie te hê, net soos iemand besluit jare gelede - jy weet, soort van nuttige indien een van ons sit en skryf printf so dat die res van die wêreld dit kan gebruik, hoekom ons sit nie en skryf 'n funksie genoem kubus wat nie hierdie cubing vir ons, sodat ons nie met die hand te die uitvoering van die idee van die cubing waardes hier? So 'n eenvoudige voorbeeld, maar laat ons gaan voort en gebruik dit is soos 'n geleentheid om ons eie funksie te skryf. So tot dusver het ons slegs gebruik hoof, en ons het gebruik om ander mense se funksies, maar ons het ons eie nie beskrywe. So hier gaan ons. Ek gaan om voort te gaan en skryf 'n funksie genoem kubus. En ek gaan om dit 'n inset te neem. Sodat sy insette is gaan na 'n heelgetal wees. En waarvoor word dit gaan om dit te doen? Dit gaan int uitset verklaar = insette keer insette keer insette. En dan is dit gaan om terug te keer dat die uitset. En dan moet ek nou spesifiek wees. Hierdie funksie is 'n int om terug te keer. So hier is dan hoe jy jou eie funksies wil skryf. Jy vir die eerste besluit wat is die naam van jou funksie gaan wees. En oor die algemeen, iets verduidelikende is goed, so ek sal noem dit kubus. Dan moet jy spesifiseer hoe dit gaan om terug te keer, wat is sy produksie gaan wees. En ons het nie dat baie opsies nie. Int, char, vlot, Bool, string. Vir nou, ek gaan om vas te hou met 'n int, want ek wil dit 'n heelgetal is om terug te keer. Dan moet jy spesifiseer wat sy insette, indien enige, is. En as kubus neem om 'n argument, iets tussen hakies, moet jy daardie argument 'n naam gee, sodat jy kan noem dit iets soos jy implementering of skryf hierdie funksie, en jy het om te gee dit 'n soort, wat in hierdie geval gaan wees int. Dus, in kort, kubus is 'n funksie wat 'n heelgetal as inset en opbrengste 'n heelgetal as afvoer. So, wat doen dit met daardie insette? Wel, in line 14, het ek 'n veranderlike genoem uitset verklaar, en ek wys dit die waarde, inset keer insette keer insette. En dan het ek terug uitset. So hoe kan ek dit dan? Wat kan ek hierdie uitgelig karakters op die lyn 7 word, dink jy? Gehoor: [onhoorbaar]. David J. Malan: Ja, so 'n kubus van x. So is x 'n veranderlike, wat beteken dat dit het 'n paar waarde. Gelukkig, dit is van die tipe heelgetal. En omdat x is 'n int, dit beteken dat ek dit kan slaag in die kubus. En selfs al het ek die oorheersende die waarde van x met die waarde kubus x, soos die geval was tot dusver, enige tyd wat jy gelyke teken en 'n lyn van kode, die dinge op die regte sal uitgevoer word en dan kry wat aan die waarde aan die linkerkant. So is die volgorde van bewerkings is as sou ons hoop. So werk dit? Wel, laat ek gaan af hier. Laat my my terminale venster oop te maak. Laat my inkrement maak, Enter. "Implisiete verklaring van funksie" kubus "is ongeldig C99 "As 'n eenkant, C99 verwys na die taal C soos dit was omskryf in 1999, wat was 'n update oor die weergawe van 1989, wat is 'n update oor die oorspronklike. So dit is al wat dit beteken. So, wat beteken dit dat "implisiete verklaring van funksie 'kubus' is ongeldig "Dit is reg hier? Dit is reg daar in lyn 12. Gehoor: [onhoorbaar]. David J. Malan: Wat is dit? Gehoor: Dit is nie voor die aangesig van die. David J. Malan: Dit is nie voor die aangesig van die. So dit is die ding. C is 'n soort van dom, of C kompileerders is soort van dom. Hulle het regtig net doen wat jy vertel om dit te doen nie. En hulle in die besonder, lees net jou kode bo na onder, links na regs. So as die samesteller, klang, is die lees van jou kode, lyn 1, figure uit hoe om dit te doen. O, hier kom hoof. Goed, laat ek gaan voort en verklaar 'n veranderlike x. Laat my druk iets. Line 7, wat die heck is kubus? Dit is nie verklaar in stdio.h. Dit kom nie met C. Ek het geen idee wat om te doen nie. En so kletteren bails net en gesluit met die fout boodskap. Sodat ons kan hierdie probleem oplos in 'n paar maniere. Ons kan leer geratel wat kubus is deur net die beweging waar die verklaring is. So ek gesny en geplak dit bo-hoof. Nou besef dat net omdat hoof is nie meer eerste, dit is nog steeds uitgevoer word by verstek. Main is die hoof. Dit is die naam van die standaard funksie. Dit maak nie saak waar dit in 'n lêer. Maar ten minste nou kletteren kubus gesien het voor ek dit gebruik. So laat ons sien as die geratel is nou gelukkiger. Maak inkrement, het dit stel hierdie tyd. Laat ek hardloop inkrement. En inderdaad, dit blyk te werk. Nou, kan jy kom met scenario's uiteindelik waar dit is nie haalbaar om elke funksie te sit bo elke ander funksie. Jy sal vassit in hierdie oneindige lus in werklikheid, waar hierdie man wil hier, maar dit man nodig het om daar te wees. So dit werk nie altyd nie. So gelukkig, C het 'n meer elegante oplossing. Ek gaan om dit terug te sit waar dit is, net omdat ek verkies, as 'n saak van beginsel, dat die vernaamste altyd aan die bokant, want dit is net lekker om te sien wat hierdie program nie by verstek. En wat ek gaan om te doen hier is verklaar wat genoem word 'n prototipe. Ek gaan weer my kubus funksie deur letterlik verklaar kopieer en plak. Eintlik is dit nie letterlik nie. So letterlik kopieer en plak lyn 15 bo lyn 6. Dit maak nie saak watter lyn hierdie eindig op. Dit gebeur te wees op die lyn 4. Maar dit hoef te wees voor belangrikste. Maar let op die verskil. Line 4 eindig met 'n kommapunt, wat beteken hey, Klang, neem my woord vir dit, dat daar 'n funksie kubus dit neem 'n int en terugstuur 'n int. Maar ek is nie jou gaan vertel wat dit nog is. Weet net dat ek belowe om jou te vertel. En inderdaad, nou is dit is goed dat dit hieronder neer. So, dit is oor die algemeen beter, want dan aan die bokant van jou lêer, jy kan net aframmel, vinnige-vuur, een lyn elk, wat die name van jou funksies, wat hulle insette is, wat hul uitsette is. En om meer duidelik te wees, insette beteken gewoonlik argument of parameter, sinoniem. Uitset beteken terugkeer waarde, wat dit doen nie hand terug na my. So in hierdie geval hier, kubus verklaar is aan die bokant, maar omskryf, andersins bekend as geïmplementeer word, aan die onderkant. So nou, laat ons gaan terug hier en weer uit te voer hierdie. So laat my nou voort te gaan en weer uit te voer maak, weer uit te voer inkrement. En dit lyk nou te werk net 'n boete. So ons kan nou voortgaan en faktor uit iets soos die bier voorbeeld in hierdie vierde weergawe. So laat my scroll down hier. En let op dat ek soort van hierdie les ter harte geneem het nou net. Die feit dat ek dieselfde strofe sing weer en weer en weer, dieselfde refrein lyn in die liedjie, voel graag hoekom nie ek faktor wat uit in 'n funksie? En inderdaad, sou dit een van die motiverings. Behalwe die feit dat iemand anders in die wêreld wil dalk 'n kubus funksie te gebruik - wat is 'n goeie rede om iets aan 'n faktorontleding en skryf jou eie persoonlike funksie - indien daar is 'n stuk van die kode in jou program wat net maak konseptuele sin, dat jy soort van wil gee dit 'n naam - soos in hierdie geval, koor - dan kan jy skryf insgelyks dat as 'n aparte funksie. Jy hoef nie alles in die hoof te skryf, al is dit net voel skoner dit uit te skei en gee dit 'n naam. So in hierdie geval hier, kennis dat ek a comment bo hierdie funksie wat net sing oor die gespesifiseerde aantal bottels. Let op hier dat ek nie nodig het om dit te noem dinge inset en uitset. Om die waarheid te sê, hierdie tyd het ek net genoem my insette b vir bottel. En hier sien, nietig suggereer wat? Dit chorus - Gehoor: Is dit nie terugkeer nie. David J. Malan: Maak nie terugkeer nie 'n waarde. En inderdaad, funksies nie waardes om terug te keer. Hulle kan net iets doen. Hulle kan hê wat die newe-effekte is geroep, wat in hierdie geval is net 'n hele klomp van die druk op die skerm. So let dat hierdie kode hier, ek het net letterlik gesteel het die vorige voorbeeld. Die enigste verskil is in plaas van die gebruik van i as my veranderlike, ek nou met behulp van b as my veranderlike. So ek het b af hier, ek het b af hier, ek het b minus 1 af hier. Maar die kode is presies dieselfde. Maar net om julle nou te wys hoe ons dit kan gebruik, laat my gaan voor en eintlik verander dat dit 'n for-lus. (int i = n; i> n; i -). So ek het dat van ons vorige voorbeeld gesteel. Voorheen, is dit in lyn 37, dat ek sou begin het hierdie irriterende liedjie te sing. Maar in plaas daarvan, Ek gaan net nou bel koor van i. Gedoen het. So nou in elke iterasie van hierdie lus, ek noem dit funksie, koor, dat ek gebeur het om te skryf. Dit was nie geskryf deur iemand anders jare gelede. Maar koor, intussen, gebruik printf te druk uit hierdie vier lyne. Maar die feit dat ek koor is roep weer en weer in 'n lus beteken dat ek gaan kry, heel aan die einde, die presies dieselfde liedjie as Ek het tot dusver. Dus, in kort, as ek nou terug kyk op my kode, selfs al funksioneel is dit ekwivalent, sien dat dit begin om selfs meer leesbare. Ek weet nie presies hoe getint geïmplementeer word. Om eerlik te wees, weet ek nie hoe koor geïmplementeer word. Maar dit maak nie vir my saak nie. Ek gee nie om nie, want nou kan ek soort van, as 'n mens, lees van bo na onder. En omdat die funksies is vernoem volgens wat hulle doen, my kode is toenemend leesbaar. En as ons programme kry veel meer kompleks - deur die einde van die semester se, jy skryf honderde van lyne van kode in tale soos PHP en JavaScript en dies meer - jy sal vind dat dit is baie makliker as om tred te hou van wat jy gedoen het. En wanneer jy begin saam met vriende of vennote of kollegas, sal jy in staat wees om baie meer te skryf massiewe programme deur te begin om hierdie basiese uit te oefen boublokke. Dus met wat gesê het, waarom ons nie noem dit 'n dag? En ons sal sien wat jy op Woensdag. [Applous]