[Speel van musiek] JASON Hirsch: OK, almal. Welkom by Afdeling. Dit is CS50, ons heel eerste super afdeling. Soos julle almal weet, volgende week gereelde artikels sal begin, maar hierdie week is ons almal saam. Daar is myself. My naam is Jason. Ek is 'n dosent in Rekenaarwetenskap. Ons het Andi, wie is die hoof van die TA CS50. En Scaz, Professor Brian Scassellati, hy is 'n professor in Rekenaarwetenskap. Ons is die CS50 koppe aan die Yale. Jy kan altyd e-pos ons heads@cs50.yale.edu. Ons sal tydens lesings. Ons sal by kantoorure. As daar ooit iets wat ons kan vir jou doen, enigiets wat jy nodig het, voel vry om uit te reik na ons. So, wat gaan ons vandag doen? Voor of dan, wat is kom hierdie week? So kantoorure is Maandag, Dinsdag, Woensdag, Donderdag en, 8:00 tot 11:00. Daar is 'n skedule op die webwerf. Afdelings, soos ek genoem het, begin volgende week. En jy sal hierdie week uit te vind wat tyd om jou artikel is, watter dag dit is, en wie jou TA is. Probleem Stel 1 is te danke aan Donderdag by middag, Vrydag middag met 'n laat dag. Ja, jy het nege laat dae. En daar is nege probleem stelle. En kan slegs gebruik maak van een laat die dag per probleem stel. Ja, in effek, al probleem stelle is as gevolg van Vrydag middag. Dit is al. Alle besonderhede is op die sillabus. Elke Vrydag het ons middagetes. Ons wil graag van hierdie groot te maak Natuurlik voel 'n bietjie kleiner. So jy is welkom om te RSVP. Gratis middagete met mede klasmaats en personeel. cs50.yale.edu/rsvp. Al hierdie dinge wat Ek het op die skerm, en meer, kan jy cs50.yale.edu of cs50.harvard.edu, as jy gaan na Harvard en kyk na hierdie aanlyn. Ook op die web, is daar is 'n ton van die hulpbronne vir jou. Elke lesing nie net die video van die lesing nie, maar ook daarop. Iemand sal die horlosie lesings en aantekeninge vir jou. So jy kan net betaal aandag tydens lesings, of jy kan hul notas te gebruik / ons aantekeninge om jou eie notas te vul. Daar is skyfies aanlyn. Die bron code-- alles David gaan oor in lesing of Scaz gaan oor lesing, wat bronkode is aanlyn beskikbaar sowel as soos ek, genoem videos. Afdelings, net so sal die hele verfilm. Al daardie skyfies sal beskikbaar wees. Al wat sal kode beskikbaar wees vir jou. Daar is kortbroek op die webwerf waar CS50 personeellede bestee vyf tot 10 minute gaan deur onderwerpe vir jou. Sommige van die mense wat jy reeds het teëgekom in die probleem stelle. Kantoorure, soos ek genoem het, Maandae deur Donderdae, 8:00 tot 11:00. CS50 Studie is 'n fantastiese hulpbron. Daar is die praktyk probleme, monster skyfies, bekende foute dat studente wil om te loop in, vir elke wese onderwerp ons sal dek in hierdie kursus. En uiteindelik, op hierdie skyfie ten minste, Reference50 wat jy inligting gee op al die funksies C jy kan ooit moontlik hoop om te gebruik en baie, baie meer. Weereens, dit dot dot dot by die onderkant van die skerm is om aan te dui dat daar is selfs meer hulpbronne op die twee webwerwe: cs50.yale.edu, cs50.harvard.edu. So, wat is ons vandag? Wel, die eerste Ek gaan om te gee jy kyk na die hulpbronne. Het reeds dat een. Kyk na ons. Nou, ons gaan om te gaan oor tipes en operateurs data in C. Dan sal Andi hier kom gaan oor biblioteke in C, printf (), 'n funksie waarmee jy reeds bekende of sal vinnig baie geword vertroud. En jy sal ook gaan oor conditionals en loops. En dan uiteindelik, Scaz gaan oor die CS50 ID. As jy nog nie duif in reeds in Probleem Stel 1, asook hoe om die gebruik terminale en nuttige opdragte en gee dan jou 'n paar demos en praktyk kodering in die CS50 ID. Voordat ek spring in om hierdie inhoud aan hierdie kant, Het enige iemand enige vrae so ver? Groot. OK. Ratte verander. [Ratte verander] Dit was vir my die verskuiwing ratte in 'n handleiding motor. So tipes data in C, kan jy nie net 'n veranderlike x en dit op die lyn 10, 'n heelgetal, miskien is die nommer 1, op die lyn 20, 'n desimale getal 10,5, en dan 'n paar lyne later 'n string, ek hou van CS50. In C kan veranderlikes slegs een ding, en net een ding. En so het jy dit tipes te gee. En op hierdie bord, ons het 'n lys van tipes. Daar is karakters, wat staan ​​vir karakters. So dit is een letter A, B, C, D. Dit word ook 'n ruimte kan wees, of dat kan ook 'n nuwe lyn karakter. Daar is heelgetalle, wat net is getalle, telgetalle numbers-- of heelgetalle rather-- maar geen desimale. Vir desimale, ons het drywende punt getalle. Drywende punt getalle is getalle met desimale. Dan is daar verlang, wat wese meer heelgetalle. Jy sal sien dat 'n lang 8, terwyl 'n int is 4. Ek sal om wat jy in 'n tweede. Dit is omdat verlang kan selfs slaan meer heelgetalle as 'n int kan stoor. Double is 'n lang float. En ten slotte, ons het string, wat is 'n tipe dat jy waarskynlik voor gebruik. As jy sluit hashtag # includeCS50.h in jou bron lêer, dan kan jy 'n tipe string gebruik. Dit is nie eintlik gebou in C. Daar is 'n paar ander vorme as well. Maar dit is die skoolhoof kinders met wat jy sal gebruik en teëkom. C as weer genoem I, elke variable-- dit kan slegs een soort en slegs een tipe. Dit is omdat C is 'n staties getikte taal, in teenstelling dinamies getik tale waar as jy 'n veranderlike te skep jy kan verander wat gestoor word in dit as jy gaan in jou program. Hier aan die regterhand kant, ek het die verskillende groottes van hierdie tipes data in grepe. So 'n karakter is 1 byte. Dit is 8 stukkies. En dit beteken dat omdat 8 stukkies daar is agt 0e en 1e. Ons het die demos in die eerste week met daardie binêre bolle. Met 8 stukkies of 1 byte, kan ons getalle 0-255. Reg. As al 8 stukkies is 0 dis 0. As die eerste bietjie is 1, dit is die aantal een, en so aan, al die pad tot 255. En dit is hoekom vir karakters wat jy kan het hoofsaaklik tot 255 van hulle, maar dit is genoeg om al dek die karakters wat ons nodig het om te gebruik. Vir heelgetalle kan jy 0 en dan moet jy 2 van die 32 minus 1. Dit is hoe baie opsies jy het vir heelgetalle. Vir 'n lang, jy het 0 2 tot die 64 minus 1. So jy het baie, baie, meer opsies vir verlang. Strings, dit is 'n vraagteken want dit is 'n fotonische lewe vir later. Ja. Ek kon vertel almal is op die rand van hul sitplek, soos wat is dit vraagteken? Dit is 'n fotonische lewe. Ons sal uiteindelik die grootte van snare en praat meer oor snare. Omdat string is eintlik een van die opleiding wiele ons sit op in hierdie Natuurlik aan die begin en dan neem af later op, want snare in C is eintlik wenke karakter skikkings. Maar weereens, dit is 'n fotonische lewe vir later. Voordat ek beweeg op enige vrae het, kommentaar, knelpunte oor hierdie slide? OK. Ek moet 'n fantastiese explainer wees. Ook wanneer jy programmering, jy gaan hierdie operateurs gebruik. Baie eenvoudige tekens dat eenvoudige kan doen bedrywighede, waarmee jy waarskynlik reeds baie bekend. Byvoorbeeld, op die regte kant, sien ons by te voeg. Om by te voeg, moet jy net nie 'n plus-teken. En so jy mag hê twee veranderlikes x en y. Jy kan x + y doen in jou kode. Miskien wil jy aan- jy sê die nommer 7 en 3, jy wil om te slaan wat in 'n bedrag veranderlike genoem. Jy kan int te doen vir die tipe, ruimte som, die naam van die veranderlike, = 7 + 3; Wat sou dit in die winkel som? Iemand? As ek moes in som = 7 + 3. Wat sou word gestoor in som? Jy kan net skree dit uit. GEHOOR: 10. JASON Hirsch: 10! Dit is presies reg. Wat van in som = 7-3, Ek het net die gebruik dat Dash teken. Wat gaan gestoor word? GEHOOR: 4. JASON Hirsch: 4. Som is waarskynlik die verkeerde naam vir daardie veranderlike nie, maar 4 sal gestoor word. Vermeerder in C, gebruik die klein Star karakter, het jy nie 'n x gebruik. Te verdeel, gebruik 'n Vorentoe Sny nie die verdeling simbool. En modulo, gebruik die Persent simbool. So kom ons sê ek wil sien int z = 7% 3, wat sou word gestoor in z? So, wat is in wese vra wat beteken modulo doen? Het enige iemand weet wat modulo doen? Ja. y 4. Spreker 1: Dit is die res. JASON Hirsch: Dit is die restant wanneer jy verdeel. So 7 gedeel deur 3 is 2 restant 1. So 1 sal gestoor word. Jy het aftrek, maar dit is hoe dit werk. Dit is wat die modulo operateur doen. Dit neem 'n aantal verdeel dit deur 'n ander nommer en keer terug na jou die res. So weer, 7% 3 gee jou 1, want Gedeel deur 3 is 2 restant 1 7, en gee die res. Wat van laat teruggaan up een stap na daardie afdeling teken. As ek het 7 / gedeel deur 3 doen niemand weet wat dit sou terugkeer? Spreker 2: 2. JASON Hirsch: Hoekom 2 en nie 2,333? Spreker 2: Ek dink dit sny af na die hele nommer. JASON Hirsch: So Dit is presies reg. In C, as jy n afdeling van doen twee heelgetalle 7 gedeel deur 3, dit is die antwoord kry wat in hierdie geval 2,3333 vir ewig en dit bevind dat desimale punt en kap alles af na die desimale en dit net gaan terug 2. So as ek gedoen het 8 gedeel deur 3. Wat eintlik, weet ons dat om terug te keer 2,666, maar dit kap alles af by die desimale, truncates dit alles, en net terug na jou 2. So 6 gedeel deur 3, 7 verdeel met 3, 8, gedeel deur 3, gaan almal na julle terugkeer 2. Het enige iemand weet, of 'n raaiskoot, hoe ek eintlik kon kry die volledige antwoord as ek wil hê dat die desimale? Ja. Gaan voort. SPREKER 3: Gebruik 'n float? JASON Hirsch: Wat bedoel jy? SPREKER 3: Omdat jy die float is vir getalle [onhoorbaar] JASON Hirsch: Right. So, dit is presies reg. 7 'n heelgetal is. Maar as ek wou om te draai dat in 'n swaai punt nommer, Ek wil hê om op te slaan wat as 7,0 omdat die rekenaar regtig stupid-- ons dat gesien met die PB en J example-- dit sal net presies te doen wat jy vertel dit. So as jy skryf 7, is dit dink dit is 'n heelgetal. As jy skryf 7,0, selfs al het ons weet die dinge ekwivalent is, dit behandel wat soos 'n drywende punt nommer. So as jy het 7,0 verdeel met 3, of gedeel deur 3,0, dit sou sê, OK, nou ons te doen het met die dryf. Ek sal vir ewig na julle terugkeer 2,333333. Maar nie regtig vir ewig, want soos ons het ook in lesing hierdie drywende punt getalle is nie presies akkuraat. So as jy wil daai desimale, of 'n deel van daardie desimale, dan moet jy een van hulle use-- het om 'n drywende punt nommer wees en die rekenaar het om te verstaan dat dit 'n drywende punt jy hantering, nie 'n heelgetal. Enige vrae oor daardie tabel op die regterhand, so ver? Of jou linkerkant, jou links, jou linkerkant. Ja. SPREKER 4: Right. Vir net soos 'n gereelde heelgetalle, sou jy write-- sou jy skryf dryf? JASON Hirsch: Ja so. Wel, as jy wil skep 'n veranderlike wat 'n vlot, wat jy nodig het om te dryf sê z gelyk iets. SPREKER 4: OK. JASON Hirsch: Maar as ek wou doen 7 gedeel deur 3 en kry wat desimale, Ek sou float z = 7,0 / 3,0 deur te doen; en wat my die swaai punt sou gee nommer. SPREKER 4: OK. JASON Hirsch: As ek iets soos int z = 7 / met 3, wat my 'n heelgetal gee, want dit is al heelgetalle. Maak wat sin maak? SPREKER 4: Ja. JASON Hirsch: OK. Groot. Enige ander vrae oor die tafel? Regtig? Ek's so opgewonde. OK. So 'n paar ander dinge wat jy sal gebruik, dikwels in omstandighede of loops, is hierdie tipe van operators-- hierdie tipe van Boolse uitdrukkings. En soos ons geleer het, is wat jy == gebruik om te kyk of twee dinge gelyk. So hier Ek check as x == y, laat weer aanneem dat x is 7 en y is 3. So as ek geskryf het 7 == 3, wat sou dit terug na my toe? Is dit waar of vals? GEHOOR: Vals. JASON Hirsch: OK. Ek voel soos almal kan hierdie een te kry. Sodat almal, wat sal dit terugkeer? GEHOOR: Vals. JASON Hirsch: Vals. Groot. 7 nie gelyk 3. So 7 == 3 sal valse terugkeer. Jy hoef nie 'n gelyke teken, so as ek nagegaan 7! = 3, wat sal dit terugkeer? GEHOOR: Waar. JASON Hirsch: Waar. Uitstekend. Iemand was baie oortuigende in die rug en waardeer dit. Dan minder as operateur het julle minder as of gelyk aan operateur, groter as operateur, groter as of gelyk aan operateur. So 'n meer gesonde verstand tjek. As ek moes 7 groter as of gelyk aan 3. Wat sou dit terug? GEHOOR: Waar. JASON Hirsch: Waar. Ja. Dit agterkamer, agterkant van die kamer, fantasties. Jy kan hierdie kombineer uitdrukkings as jy wil, so goed, met 'n logiese en wat is && Of 'n logiese of wat || ||. En so nou kan jy twee toets dinge saam op Is dit snaaks? Hoekom is dit snaaks? So as ek wou, kan ek sê, is 7 groter as 3 en 2 is minder as 4? Wel, as 7 is groter as 3, dis waar. 2 is minder as 4, dis waar. So hierdie hele ding sou waar terugkeer. As ek getoets 7 is groter as 3 and-- Ek is net pluk ewekansige getalle here-- 4 is minder as 2, wel, dis onwaar. So waar en vals valse. En jy kan gaan en jy kombineer as baie toestande saam as jy wil. Het enige iemand enige vrae het, kommentaar, knelpunte so ver? En ek sien 'n paar van julle foto's neem van my in die skerm, wat ek waardeer. Hopelik is dit nie Snapchat. Hopelik is dit vir jou notas. Maar al hierdie gaan aanlyn beskikbaar wees. So jy hoef nie te foto's van te neem. Soos ek genoem het, is alles sal aanlyn beskikbaar wees vir jou. OK. Ek is op die punt om te kry buite drama, so doen niemand iets wil sê voordat dit gebeur? Vrae? [INTERPOSING VOICES] JASON Hirsch: Ag, stop. Julle is ook baie mooi. OK. Ek gaan merk uit. Kom ons gaan. ANDI Peng: Ons gaan om te doen 'n ongemaklike mic verandering nou. JASON Hirsch: Ek is gaan hierdie opstyg. ANDI Peng: waardeer die ondersteuning, ouens. Kan jy my hoor? Is dit goed? Volmaak. Mooi. Laat my snoepie net dat in. OK. So, ek is op die punt om te doen soos 'n reuse inligting stort nou op julle. En geen bekommernisse hoegenaamd as jy nie volgende elke klein lyn van wat Ek is op die punt om jou te wys. As Jason gesê alles is heeltemal aanlyn. Net ons gaan om te probeer om in te voer almal om die konsepte wat in sommige van hierdie skyfies. Dus net volg saam. Geen bekommernisse as jy nie verstaan ​​nie alles; Maar, as op enige punt jy verlore voel, verhoog jou hand, sal ons stop, geen bekommernisse. Koel. So ek dink iets wat Dawid het reeds soort genoem in lesing en Jason het soort van verwys vandag is wat 'n biblioteek is. So in programmering, ons het hierdie dinge genoem biblioteke. Waar, in wese, alle hulle is net 'n stel van funksies, wat wese net-kode wat reeds geskryf deur iemand anders wat ons kan al gebruik in ons programme. So hoe werk 'n normale biblioteek werk, reg? Jy gaan die biblioteek deur. Jy het al hierdie boeke wat jy kan trek uit en jy kan toegang tot inligting binne daardie boeke. Dieselfde ding in programmering. Jy het 'n biblioteek wat reeds is geskryf deur ander mense. En die manier waarop jy kan, as programmeerder of 'n student, kan toegang tot daardie biblioteek te verkry is deur middel van hashtag # include. Byvoorbeeld, in C ons het drie C-- die mees algemeen gebruik drie C standaard libraries-- die toevoer / afvoer biblioteek, die string biblioteek, en die wiskunde biblioteek. So in jou eerste paartjie probleem stel, diegene sal die drie wees dat jy primêr jy gebruik. So as David reeds verduidelik in lesing die standaard I / O biblioteek, of die standaard toevoer / afvoer biblioteek doen presies dit. Dit laat jou in jou kode om insette enigiets van die gebruiker en afvoer wat na die skerm, in wese druk dit na die skerm. En so enige tyd wat jy enige funksies te gebruik, byvoorbeeld die funksie printf () wat ons gaan om te gaan oor die volgende skuif, maak seker dat die standaard insluit I / O biblioteek of anders wat jy gaan nie in staat wees om die printf () funksie te gebruik. Omdat jy, as die programmeerder nooit eintlik geskryf dat funksie, jy net die gebruik van iemand kode anders se binne jou eie kode. Maak dit sin almal? Koel. En dan het ons in wese te kry op die string.h biblioteek en die math.h biblioteek, .H net kenne biblioteek, ander biblioteke dat jy sal uiteindelik gebruik word om in die kode. Maar vir doeleindes van hierdie biblioteek, het ons ook have-- van hierdie class-- ons het ook wat genoem word die CS50 biblioteek, cs50.h, waar ons vir jou insae geskep baie belangrike en nuttige funksies. Sodat jy as 'n programmeerder kan rug af wat ons reeds sodat geskryf se beskikbare hierdie funksie aan u vir jou gebruik. Ek sal oor 'n paar van die die funksies wat algemeen gebruik word, maar weet dat dit is al googleable aanlyn. Voel vry, trek die CS50 biblioteek en dan moet jy al die funksies is daar. Ja. SPREKER 5: So as jy nie was die gebruik van die sagteware wat is deur aan ons verskaf die klas, doen dit bedoel ons wil hê om af te laai en uit te vind hierdie header lêer onsself en vertel die rekenaar waar dit is? ANDI Peng: Groot vraag. Presies. So dit is soos as jy nie fisies teenwoordig by 'n biblioteek, daar is geen manier vir jou om eintlik gaan en toegang tot dit. So het die dieselfde ding met programmering in C, jy het om seker te maak dat jy die gebruik van ons toestel omdat die biblioteek reeds opgeneem in dit. En dan wanneer jy hashtag include, die biblioteek se daar. Ja. Goeie vraag. Almal goeie? Koel. Alles reg. So ons gaan om te tref, wese, wat die eerste funksie wat Ons as programmeerders is gaan word met behulp binne ons kode. Dit is die printf () funksie genoem. So, printf () funksie, soos ek reeds gesê in die laaste skuif, is ingesluit in die standaard I / O, standaard toevoer / afvoer, biblioteek. So maak seker dat alles wat jy using-- oh, laat my gryp die laser pointer-- wanneer jy gebruik die printf () funksie, jy het om die standaard te sluit I / O biblioteek of anders wanneer jy stel, jy gaan 'n fout omdat die rekenaar sal wees, Ag, ek weet nie waar printf () is, jy my nie vertel waar printf () is. Wel printf () is ingesluit in die standaard I / O, so wanneer jy printf gebruik (), maak seker dat daardie lyn bo jou kode. So byvoorbeeld, printf () hier is 'n funksie. Al wat dit doen is om druk uit iets binne-in die hakies aan die gebruiker. Sou enige iemand wil 'n steek te neem na wat hierdie lyn van die kode reg hier gaan om uit te druk? Dus, die antwoord is op die skerm. Iemand? VERDI: Die bodem. ANDI Peng: Verdi, hoekom nie jy gaan voort en sê die hele stelling? VERDI: Hallo, my naam is Andi, en ek is 20 jaar oud. ANDI Peng: Ag, mooi. So in hierdie lyn wat ons gaan druk, Hello, my naam is Andi, en ek is 20 jaar oud, wat is in werklikheid 'n ware verklaring. Sintaksis. So paar sintaktiese kwessies wat julle ouens wil seker maak jy weet. Aanhalingstekens. Dubbele aanhalingstekens vertel die rekenaar wat alles binne gaan gedruk word. Alles binne blikkie net presies hoe jy tik, behalwe vir algemeen aan die einde, ons gaan om te wil sluit 'n hash-- oh sorry-- 'n tikkie n. So 'n bietjie n. Is daar iemand wat wil 'n raaiskoot te neem na wat dit beteken om ons kode? Ja. SPREKER 6: sit dit op 'n nuwe reël. ANDI Peng: Presies. So al hierdie doen, is toelaat wat gebeur Na hierdie, na hierdie stelling, gedruk word om 'n nuwe lyn. Sodat wanneer jy skryf jou kode wat jy nie lukraak het dinge geryg op die einde dat jy nie wil hê nie. Dat alles kry netjies gedruk een lyn en dan begin ons op die volgende lyn. Is daar iemand wat onthou wat kommapunt doen wanneer ons kodering? Ja. SPREKER 7: Verklaring. ANDI Peng: Jammer? SPREKER 7: Is dit die einde van die stelling? ANDI Peng: Ja. So in C, of ​​enige ontwikkeling taal, die kommapunt dui op die einde van 'n programmeertaal lyn. So byvoorbeeld, in Engels gebruik ons ​​tydperk om te sê, o dit is die einde 'n sin. In programmering, dieselfde ding, ons het 'n kommapunt aan die einde van 'n lyn te dui. Dikwels, wanneer jy begin om die program, jy sal jy besef vergeet om 'n kommapunt voeg en dan moet jy probeer om te hardloop jou kode en dit nie werk nie. En jy soos Ag, ek doen nie hoekom nie, dit moet werk. Kanse is jy waarskynlik vergeet 'n kommapunt of 'n bracket of iets iewers. So, dit is belangrik om te onthou. Koel. Alle reg, die opsteek van hande, hoe baie mense hier het ooit geneem AP Rekenaarwetenskap of geprogrammeer in Java voor, ooit? OK. Mooi. Dit sal nie van toepassing wees dan nie, maar in Java, jy het iets genoem System.out.println wat nie bestaan ​​nie in C. So in C, wanneer jy wil byvoeg in veranderlikes in enigiets wat jy wil om uit te druk, is daar 'n spesifieke sintaksis ons gaan gebruik. Dit is bekend as die placeholding-- wese ons plekhouers voeg in plek van die getal of die veranderlike dat ons wil druk. So as julle kan sien het ons ingesluit 'n nuwe biblioteek kop lêer hier. Die CS50 biblioteek. En vervat in daardie CS50 biblioteek is 'n algemene funksie wat ons sal gebruik word om in ons kursus genaamd GetInt (). Het enige iemand wil 'n steek te neem op wat GetInt () kan moontlik doen. GEHOOR: [onhoorbaar] ANDI Peng: Jammer. Kan jy nie hoor nie. Maddie, niemand nie. Maddie: O, dit vra vir 'n heelgetal. ANDI Peng: Presies. So hierdie funksie, 'n ander funksie wat reeds is geskryf deur iemand anders dat ons kan roep nou. Al wat dit is, is gevra die u, die gebruiker, om insette wat jy wil as die kode loop en dit slaan whatever-- in hierdie geval is ons GetInt () - ing, so dit beteken dat ons verkryging van 'n heelgetal. En ons gaan om te slaan wat in 'n ander heelgetal dat ons net gemaak het genoem ouderdom. Dit maak sin om almal? Koel. So nou dat ons hierdie heelgetal gestoor het, wat ons het gevra van die gebruiker, in hierdie veranderlike, het ons geskep tipe int genoem ouderdom, kan ons voorlê en plek gaan dat ons in ons printf () funksie. So het die sintaksis gewoonlik printf () is dat waar in jou werklike fisiese lyn wat jy wil hê dat die heelgetal sluit, jy daardie simbool doen net daar, die persentasie simbool, met die tipe veranderlike wat jy wil. So in hierdie geval ouderdom is 'n heelgetal. So jy gaan sluit % i, want dit is 'n heelgetal. En dan na jou verklaring, jy gaan om komma en die doen Naam van die veranderlike. So hier gaan ons om te druk uit, Hello, my naam is Andi, en ek is leeg jaar oud. Hashta-- of, sorry--, ouderdom met alles wat ek insette. So as ek insette 20 vir my GetInt () hier, dit sou presies dieselfde ding druk. Maar, as ek wou om insette iets anders, soos miskien 40 of 45, dan sou jy sien dat weerspieël dienooreenkomstig in die kode. So, dit is 'n voorbeeld van iets wat dit druk uit en kyk na jy asof dit dieselfde ding, maar onder die kap van die rekenaar daar is eintlik baie verskillende dinge gebeur. Koel. Alles reg. So wat as ons wil hê verskeie veranderlikes? Redelik maklik. Dieselfde ding. Ons het ook 'n nuwe funksie hier genoem GetString (), ook ingesluit in die CS50 biblioteek, dat al wat dit doen is gevra die gebruiker vir 'n string, wat net 'n stel van die karakters, so soos 'n sin of soos 'n naam. So in hierdie geval, sou ons twee het plekhouers% s vir string en% i vir heelgetal. En ons gaan om te volg wat deur die twee veranderlikes Ons wil ingesluit, in die volgorde dat dit in die sin. So byvoorbeeld, my naam is leeg, ek wil 'n naam daar so ek gaan eers die naam. En dan daarna, ek wil ouderdom, wil ouderdom tweede het. En so as ek wou om insette, Hello, my naam se Andi, en ek is 20 jaar oud. As ek ingevoer Andi en 20, die presies dieselfde ding sou druk; Maar nou het ons het twee gestoor veranderlikes naam, sowel as int. Ja. SPREKER 8: Sou dit in staat wees om te hardloop as jy oorgeskakel naam en ouderdom aan die einde van daardie? ANDI Peng: Ja. Dit is regtig 'n goeie vraag. So lang storie kort, no. Omdat naam en age-- wat tipe veranderlike naam? SPREKER 8: String. ANDI Peng: En wat tipe veranderlike ouderdom? SPREKER 8: Integer. ANDI Peng: So hier het ons 'n tydelike vir string en heelgetal, reg? So as jy op hierdie skakel, die rekenaar gaan nie om te weet. Dit gaan om te kyk vir 'n string, en as jy probeer om dit gee 'n int, dit gaan wees soos wag Ek is verward, jy het vir my gesê ek moet wees toewysing geheue vir 'n int. En reg hier, wanneer dit verwag 'n heelgetal en jy gee dit 'n naam en 'n string plaas, dit gaan ook baie verwarrend wees, is dit sal nie presies die manier waarop jy dit nodig het. So hier, benoeming en sintaksis is baie belangrik vir die bestuur van die kode. Almal goeie? Ja. Maddie. Maddie: Hier, ek weet ons het gekyk voorbeelde in die klas, waar hulle vra Wat is jou ouderdom, wat is jou naam. Hier sal dit wees dit doesn't-- as ons hierdie kode hardloop, dit sou nie vra vir wat? Maar jy wil net insette twee getalle en dan sal dit loop soos wat? ANDI Peng: Ja, presies. So as jy wil om dit te vertoon, tik asseblief jou ouderdom, jy kan net voeg 'n printf () funksie wat sê: Gee jou ouderdom, bo dit. Dit is 'n goeie vraag. Ja. SPREKER 9: So, sou reeds ingesluit in GetInt () [onhoorbaar]. ANDI Peng: Nee, dit is eintlik nie. So al hierdie doen is net vra 'n leë skerm aan die gebruiker om insette iets. As jy dit wil hê, as jy dit wil hê om te druk iets wat die gebruiker vertel soos, gee asseblief vir my jou ouderdom, dan moet jy sou hê om printf () wat jouself. Want almal gebruik hierdie funksie vir verskillende dinge, jy kan stoor ouderdom, jy kan stoor adres, jy kan stoor telefoonnommers. En so is dit werklik aan individuele gebruik jou ouens se vir wat jy wil hê dit moet sê. Ja. SPREKER 10: So, net om te verduidelik, waar doen jy die invoer van die naam en die ouderdom sodat dit toon in die plek van% s? ANDI Peng: Soos in die gebruiker? SPREKER 10: Ja, soos hoe ek maak it-- Waar sit ek Andi, en waar Ek sit 20? ANDI Peng: Ja. So as jy was om te eintlik hierdie kode hardloop, Ek is nie eintlik die bestuur van die kode, dit is net hier nou. As ek die kode hardloop, sou ek stel die kode, maak die lêer, hardloop die kode, en dan sou daar net twee ruimtes vir my om insette nie. Ja. Julle sal sien wanneer jy speel rond met die kode jouself. Alle regte ons gaan om te beweeg in die volgende afdeling van wat ons sal wees wat vandag. Ons gaan om te gaan oor wat voorwaardelike stellings. So as jy ouens onthou en onthou uit lesing voorwaardelike stellings, hulle is almal is 'n stel instruksies aan die rekenaar in wat as 'n sekere toestand is waar, jy die kode uit te voer binnekant van die toestand. So in wese Scratch-- die groot tema van vandag af is dat jy ouens het reeds al gesien die logika agter alles dat ons wat. En al wat ons doen, is iets vertaling dit was baie intuïtief in Nuuts af, en hard kodering dit in die sintaksis ons sal gebruik word om vir die klas wat is C. So logies, al hierdie blok was is dat die stuk van die kode reg daar. Ja. OK. Ons het ook anders kry in 'n as ... verklaring wat net 'n bykomende laag van kompleksiteit om die verklaring as waar die rekenaar neem 'n blik op hierdie en sien, as hierdie toestand is waar, doen net die binnekant van hierdie twee hakies, else-- so soort van soos die verstek indien dit nie voldoen aan die condition-- dit te doen. Dit is soos 'n vurk in die pad. As dit reën buite, ek op 'n reënbaadjie, anders enigiets anders wat ek nie op 'n reënbaadjie. Maak daardie logika sin maak om almal? Koel. Alles reg. Dus, net soos 'n harde voorbeeld van dit wat ons in C sou sien is as ek wou 'n te skep veranderlike genoem huiswerk uur. En as huiswerk uur minder as vyf, sê ek Life is groot. Dit is wonderlik. Maar, sê die stryd is real-- en dit is wat ons almal op hierdie Maandag middag up Science Hill is waarskynlik reg doen now-- GEHOOR: [ROOIBORSDUIFIE] ANDI Peng: Hulle manier waarop ons sou, dankie vir dit. Die manier waarop ons sou hardcode dit in C is if-- laat ons veronderstel Ons het reeds 'n veranderlike van tipe int genoem huiswerk uur hier. Indien huiswerk uur is minder as vyf printf (), Life is groot. Onthou hou / n gevolg jy wil 'n nuwe lyn na. Anders druk, Die stryd is real. Maak almal verstaan ​​hoe Ek transitioned van hierdie blok in hierdie blok van die kode? Koel. Alles reg. So nou gaan ons 'n blik op te neem verskeie As state heeltemal. So laat ons veronderstel die doel van hierdie program was ons die gebruiker vir 'n graad gevra. Ons vinnige behulp GetInt () vir 'n graad, en hulle insette 'n waarde, en jy wil om te wys watter tipe graad hulle het. So as ek 'n program te ontwerp, het ek beteken tipies in almal van ons oë, 90-100 is 'n A, 80-90 is 'n B, en so meer en so aan. Wat is verkeerd met hierdie stuk kode wat dit is nie doen wat ek wil om dit te doen nie. Ja. SPREKER 11: Hulle het 'n laer perke, maar hulle het nie die boonste perke. ANDI Peng: Presies. Het almal hoor wat sy sê? Daar gaan boonste wees perke, maar geen onderste grense. Jammer, andersom, onderste grense, geen boonste perke. So sal jy graag wil neem 'n steek op te sê wat op hierdie sou gedruk screen as ek hierdie kode te hardloop. SPREKER 11: 'n Fout? ANDI Peng: 'n Fout? Groot raaiskoot, nie heeltemal reg. Het enige iemand 'n ander steek? Ja, Aaron. AARON: As jy in iets groter as 90, dit sou al die grade wat jy het wys. Dit sou wys jy het 'n A, jy het 'n B, jy het 'n C. ANDI Peng: Ja. Dit is presies reg. So, sou dit wonderlik wees. Hulle is egter wedersyds eksklusiewe, dink ek. As ek hierdie stuk van die kode uit te voer. En dan laat ons net sê, ek ingevoer die graad 95. So 95 word nou gestoor in die Int genoem graad. En so C is 'n taal wat loop tot bo tot onder, so dit gaan altyd aanloop tot onder. So dit gaan om hier te kom, lees as graad is groter as of gelyk aan 90, printf () jy het 'n A. Groot, ek 'n 95, dit is groter as 90. Dit gaan druk, Ek het 'n A. Dit gaan om 'n blik op hierdie neem as, dit gaan sê, goed 95 is ook meer as 80, dit gaan druk jy het ook 'n Got 'n B uitroepteken, en so aan en so meer. So as ons almal kan sien, dit is 'n algemene fout wat mag voorkom wanneer ons kode skryf om uit te kyk vir. Enigiemand enige vrae oor waarom dit gebeur het? Groot. OK. So hoe kan ons dit regmaak, is natuurlik die logiese volgende vraag. Wel, ons het hierdie pragtige dinge genoem as anders as die ander As anders state. Sodat jy kan sien, as jy wou dat die probleem te verander, jy wou elk van die maak voorwaardes wedersyds eksklusiewe, sou jy 'n ander by te voeg ... as verklaring. En dit van course-- hulle dink as lere, of soos sporte op die ladder-- jy kan soveel voeg van hierdie as jy wil vir soveel voorwaardes as wat jy wil. So hier, as ek ingevoer graad te wees 95. As graad is groter as 95, printf (), het ek 'n A. Grote. Dit gaan 'n ander te sien ... as en dit gaan om te weet, O nee, Ek het reeds uitgevoer die eerste anders. Ek know-- of die eerste if-- Ek weet dat Ek hoef nie te kyk na enige van hierdie omdat een van hulle het reeds waar is. So dit gaan om te loop van top-down. Sodra die eerste een is waar, dan dit gaan slaan oor al die res van die anders ... ifs. Maak wat sin maak? So, op hierdie manier wat jy het verskillende vlakke van kontrole en so gou as een van hulle vals is, die res is ook, sal hulle nie eens te gaan. Koel. Alles reg. So, dit is 'n voorbeeld van 'n ander soort voorwaardelike verklaring sien ons minder dikwels, maar ons sal hulle sien en gebruik hulle. En hulle is dikwels meer doeltreffend vir sekere gevalle. So het ons wat genoem 'n skakelaar verklaring. So voordat ons gedek wat is 'n ander verklaring, 'n as ... anders verklaring. Hier het ons wat genoem skakelaar state. So wanneer gebruik ons ​​skakelaar state is die sleutel? So in 'n skakelaar verklaring, jy gewoonlik, tipies, eintlik jy kan net insette heelgetalle vir jou veranderlike wat jy nagaan is. So as ek wou om te kyk om te sien As 'n sekere number-- byvoorbeeld 'n graad, as ek 'n 90. Ek wil dit om te sien of dit is 'n A, B of C. ek kon 'n geval hier nie. Maar die saak het na 'n ander konstant wees. So in hierdie sin, die skakelaar verklaring kan net gaan vir die gelykheid van twee getalle. Dit maak nie kyk vir iets anders. So dit is iets baie wees versigtig wanneer jy die gebruik van hierdie. So hier, as ek wou om te kyk om te sien As my graad 90 is gelyk aan 90 of 80 of 70 of 60, en dan druk die ooreenstemmende graad, Ek sal in staat wees om te skryf wat in 'n skakelaar verklaring. So dit gaan om hier te kom, tjek hierdie heelgetal gelyk aan hierdie konstante? Indien nie, gaan dit oor te slaan. Is dit gelyk aan konstante twee, en so aan en so voort, totdat jy die standaard getref, As een van hulle is gelyk. Sodra een van hulle is ingestel om gelyk te wees, dit gaan om dit te doen reël van die kode en breek. Wat beteken dit gaan om te tref dat hardloop, breek, en net heeltemal oor te slaan aan die onderkant van die kode. So in daardie sin is die soort van funksies soos 'n as anders as anders as verklaring. So hier is 'n konkrete voorbeeld vir julle ouens. So laat ons veronderstel dat ek wou skep 'n veranderlike genaamd jaar gestig. En ek wil hê dat die gebruiker om insette gevra die jaar wat hul skool is gestig. So kan ek 'n skakelaar verklaring hier te skep. En laat ons net sê, ek insette 1636. Hierdie kode hier gaan skakelaar te sien jaar gestig wat 1636 gelyk. Dit gaan geval sien 1636, oh diegene gelyk is, printf () Indien u nie by die skool in die noorde? Omdat ons aanvaar dat hulle dit nie doen nie gaan hier as hulle gaan om Harvard, breek en slaan tot die einde. As ek om insette 1701, wat Ek neem aan almal van ons sou insette, dit sou hierdie geval slaan, kom af na die geval twee wat 1701, en druk Welkom by Yale! Breek, slaan tot die einde. Anders wat jy waarskynlik hierdie kursus neem aanlyn in wat case-- ongelooflike welkom om Yale-- dit gaan om te gaan na die standaard druk, Hello Internet! En breek. Ja. SPREKER 12: Kan jy anders gebruik in plaas van die standaard daar? ANDI Peng: Nee, want die manier dat hierdie hele funksie skakelaar gebou is, die sintaksis jy nodig is om te gebruik, is die geval geval verstek. Dit is soos die as anders as hierdie een is dit die geval geval verstek. Ja. SPREKER 13: Jy dalk reeds hierdie gesê, maar kan jy meer as twee gevalle? ANDI Peng: Ja, jy kan het so baie gevalle as wat jy wil. Dink aan dit as net graag oneindig voeg. SPREKER 14: As jy oorgeskakel 1701 met 1636, dit maak nie regtig maak 'n verskil reg? Dit is net gaan om te beheer word vir dit. ANDI Peng: Dit is 'n regtig 'n goeie vraag. En ons sal raak op hierdie later, maar net weet dit is die skakelaar stelling infinitely-- dit meer doeltreffend as dit en as anders as omdat dit bedryf met behulp van 'n ander soort funksie wat kan jy om in wese, net spring reguit na die geval wat jy nodig het om te wees by. Ja. SPREKER 14: Cool. Dankie. ANDI Peng: Ja SPREKER 14: En jy kan nie doen gevalle soos en groter as. ANDI Peng: No. So, dit is wat die beperking van die skakelaar verklaring is dat jy om konstantes het net, net heelgetalle. Ja. OK. So, dit is iets wat jy ouens sal minder dikwels teëkom van, maar ek wou net stel dit in die geval. Ons het hier, wat is bekend as 'n drieledige operateur. Waar in wese, is dit net soos 'n As verklaring saamgestel in een lyn. Hier sal ek gaan na die volgende lyn, die volgende bladsy, want dit is makliker om te sien. Dus het ons al hierdie reg gesien? Dit is redelik maklik om te volg. As ek wou 'n veranderlike genoem te maak string naam s, as 'n sekere aantal Ek gee dit is minder as 100, ek wil lae te ken aan die tou, anders wat ek wil toewys hoog. Dit is hier doen presies dieselfde ding diegene agt reëls van die kode doen. So hier is ek wil skep 'n veranderlike string. En dit is die toestand ek is nagaan, as 'n aantal minder as 100, dan moet jy die waarde van 'n lae toewys, anders sal die waarde van 'n hoë toewys. Hierdie skyfies sal aanlyn wees, geen bekommernisse as jy dit nie doen nie ouens af kry. Dit is net 'n eenvoudiger manier, 'n meer doeltreffende manier van skryf kode. OK. So nou gaan ons betree wat vir die meeste mense is soos 'n baie, baie verwarrend ding om te dink oor by die eerste. Die artikel lus. So vandag, ons gaan om te praat sowat drie tipes lusse. Ons gaan begin met 'n rukkie lus, dan praat oor 'n doen while lus, en dan praat oor vir loops. So in wese, vir die meer visuele leerders daar buite, ons het, in wese, 'n grafiese uitbeelding van wat 'n while lus nie. So in 'n programmeertaal, sou jy begin en betree die lus op 'n sekere punt. Jy gaan 'n toestand. En as die toestand is waar, jy sal die kode in te voer. En jy terug om te kom en jy kyk. As dit is steeds waar jy bly voortbestaan hierdie kode om en om in 'n lus. Maar die tweede wat die toestand word vals is, jy gaan om te breek en die einde van die lus. En dit is in wese die sintaksis jy gaan gebruik. Terwyl 'n sekere toestand is ware doen dit, as dit is nie waar nie, jy gaan om oor te slaan na die einde en vorentoe beweeg met jou program. OK. Is daar iemand het 'n voorbeeld oor wat kan gebeur potensieel as ek probeer om hierdie stuk kode loop? By the way, dit is SAJ-- Scaz, Andi, Jason-- ons sal afteken ons e-pos, Liefde, SAJ. Dit is vir ons. OK. Enigiemand het 'n voorbeeld, of 'n idee van wat dit sou druk? Soort van 'n truuk vraag. So hier, onthou die toestand Ons monitor vir is, terwyl die ware. Dus, terwyl dit waar is, is dit gaan druk, ek hou van SAJ! Is daar enige punt in wat ons wil verander dit na iets anders? Nee, reg? So hier het ons teëgekom wat waarskynlik gaan afluister baie jou programme, die oneindige lus. Jy sal vind dat as jy hardloop hierdie stuk van die kode, dit is net gaan om te hou druk, ek hou van SAJ! Terwyl ons waardeer die ondersteuning, ons wil nie jou rekenaars om te crash omdat jy hou druk Ek hou SAJ! So asseblief, asseblief, vermy die oneindige lus want dit gaan nooit om te evalueer vals en jy gaan nooit om die lus te verlaat. En jy gaan word ingesuig in ewigheid. Koel. OK. Die tweede tipe lus ons sal praat oor vandag is die doen terwyl loop, doen terwyl loop. En dit is bekend as 'n doen terwyl lus want jy het 'n doen en 'n rukkie. So dit is redelik soortgelyk aan 'n rukkie lus, maar 'n bietjie anders. Hier, jy gaan om dit te doen net die binnekant van hierdie terwyl 'n sekere toestand is waar. So as ek en C van die rekenaar Ek is loop af hierdie stuk van die kode, Ek neem 'n blik op die top. Ek gaan na C, sê ek dit doen. En dan gaan ek, terwyl dit is waar, ek het om dit te herhaal. Maar terwyl dit is vals, dan het ek vorentoe beweeg en ek het nooit terug na daardie lus weer gaan. Kan iemand neem 'n steek na wat die verskil tussen hierdie lus en die een wat ons net gekyk na feitlik. Ja. SPREKER 15: Die toestand kom nadat plaas van voor? ANDI Peng: Presies. So het sy gesê die toestand kom nadat, nie voor. Uiteindelik, die verskil tussen hierdie en die while lus is dat jy net gaan doen net die binnekant van hierdie ongeag of jou toestand is waar, en dan gaan die toestand. So in hierdie geval, is jy always-- op hierdie manier, Jy is altyd om seker te maak net die binnekant loop ten minste keer voor om te kyk as jy dit wil hê om weer te loop. En hier is 'n voorbeeld van wanneer ons dit sal gebruik. So byvoorbeeld, as ek wou hê 'n veranderlike van tipe int naam ouderdom, en ek wil aanspoor die gebruiker vir hul ouderdom, Ek gaan printf te doen () Wat is jou ouderdom? ouderdom = GetInt (), wat is waarna die gebruiker. En sommige mense sal regtig irriterende. En jy hoef nie foute wil in jou program iemand skryf soos, oh Ek is negatief 4 jaar oud of wat ook al. In welke geval as hulle doen, hierdie evalueer waar, wat beteken dat ek gaan te hou om terug te gaan en dit te doen. So dit gaan hou re-waarna die gebruiker om jou te gee soos 'n ware ouderdom nommer en dit is gaan hou om terug te gaan en herhaling totdat hulle gee jou 'n ware ouderdom groter as een, of nie nul. So wenk, wenk. Dit sal baie, baie nuttig wees vir een van jou PSet probleme. Ja. SPREKER 16: Oeps, jammer. ANDI Peng: Yep. SPREKER 16: Is daar nie om 'n asshole wees, but-- ANDI Peng: Geen sorge. SPREKER 16: --are daar verskillende reëls hier of het jy net vergeet om die kwotasie te sit? ANDI Peng: Oh Yeah. Jammer, dit is heeltemal my sleg. Dit was beslis veronderstel om 'n kwotasie te wees. Goeie vangs. Dit sou nie hardloop nie. OK. So die laaste tipe lus sal ons praat oor en, uiteindelik, soort van die mees kompleks is die lus. Moenie bekommerd wees as jy nie doen nie weet wat dit beteken. Dit is redelik verwarrend op die eerste. Ons gaan oor 'n voorbeeld. Al wat gebeur in 'n lus vir die is dat jy drie stellings dat jy gaan om in te sluit. So vir 'n sekere ding, jy is gaan 'n veranderlike inisialiseer. Jy gaan die toestand te voeg tot wat hierdie lus sal bly voortbestaan. En dan, aan die einde van die lus, jy gaan om dit te werk. Jy kan die veranderlike te werk wat jy wil om tred te hou. Sodat ons tipies gebruik vir sirkelroetes vir wanneer ons wil 'n lus vir 'n loop sekere bedrag van die tye en ons reeds weet, O ek wil hierdie lus om uit te voer soos 10 keer, dan do-- jy ek sal gaan oor 'n voorbeeld op die volgende bladsy. So hier byvoorbeeld in Scratch, as jy wou iets tot 10 keer herhaal, al wat jy te sê gehad het was, herhaal 10 keer Ek is mal SAJ! wat is 'n meer aanvaarbare show van ondersteuning vir ons eerder as die oneindige lus. Hier hoe jy sou oorgang na C en skryf dit is vir int-- ek gaan om te skep of verklaar 'n veranderlike van tipe int i vernoem. Ek gaan inisialiseer dit 0, so i = 0; en dit gaan my toestand. So ek is minder as 10. En dan aan die end-- die laaste stelling is jy gaan hê is die werk van die wat gebeur met die veranderlike i aan die einde van jou lus. So dit is soort van verwarrend, want verskillende dele van die lyn gebeur op verskillende tipes van die lus. Maar ek sal gaan oor 'n pseudokode voorbeeld van wat en dit miskien verduidelik net 'n bietjie beter. So hier. Dit is die lus sien ons net. Wese in pseudokode, wat gebeur in hierdie program, is die eerste wat ek skep i, initializing dit 0. Ek is om te kyk of ek is minder as 10, in welke geval die eerste keer is dit want 0 is minder as 10. So het die lus gaan loop. En dan gaan ek hierdie lyn te druk. En dan aan die einde van die lyn, reg hier, ek gaan inkrement i, i ++ te doen, Dit beteken egter die verhoog dit vir een. So ek is nou 1. Want dit was een keer 0, as ek inkrementeer dit is, dit is nou 1. En dan gaan ek om terug te gaan na die begin van die lus en ek gaan die toestand. Is die toestand nog waar? Ja, 1 is steeds minder as 10. So dit gaan om dit weer te druk, gaan en dan inkrementeer i, en kyk die toestand voortdurend, aanhoudend, totdat jy uiteindelik tot op die punt waar ek is 10. Jy gaan hierdie keer druk 10 en dan is ek gaan gelyk 10. Jy gaan die toestand te monitor. Is 10 minder as 10? Nee, dit is onwaar. So, is hierdie lus nie gaan om te hardloop, dit gaan om te breek, en jy gaan voortgaan met jou kode. So as jy ouens kan dit sien is 'n baie goeie voorbeeld van 'n lus wat jy kan program in wat loop vir 'n bepaalde bedrag van die tye. Elkeen duidelik? Ja. SPREKER 17: Hoe gaan inkrement eksponensieel, is dit anders kodering? ANDI Peng: Jy can-- ons gaan oor dit in die volgende skuif. Goeie vraag. Is anyone-- voordat ek on-- iemand te alle verward, want dit is 'n baie moeilike konsep. Geen sorge, as you're-- OK. Koel. Alles reg. Net 'n algemene skuif. Dit terwyl lus is om te doen die presies dieselfde ding die lus was. Dit is net anders geskryf. Julle kan die skyfies deur lees op jou gemak later. Maar net weet dat daar verskeie maniere van skryf in dieselfde ding gebeur met verskillende loops. OK. So, nou kry ons in die vraag van wat as ons 'n lus binnekant van 'n lus. Ons kry in die werklike Ontstaan ​​tipe dinge hier. As jy wil om dinge te doen verskeie keer binnekant van ander dinge dat dinge doen verskeie kere, het jy wil 'n sogenaamde geneste lus. Vir dié van julle wat hierdie eerste sien en kry baie verward, is al wat ons hier doen is met 'n lus vir die waar ons het 'n veranderlike van ry. Maar binnekant van dit, het ons 'n ander het ook lus van 'n kolom veranderlike genoem. En ek hoogs stel voor julle almal wat verwar eerste hou track-- hierdie trek uit, teken dit uit. Moet nie probeer om net rede deur dit, trek dit uit. In jou kop, op hierdie stuk papier, of wat ook al, skryf ry, hou van wat ry is gelyk aan. Skryf kolom, hou van wat kolom is gelyk aan. En hou van wat uit te druk met elke iterasie. Elke iterasie van hierdie lus, elke iterasie van daardie groter lus, hou net ná die logika. En ek waarborg jou, jy sal hou van wat jy sien, want dit is ook 'n baie toepassing vir jou probleem stelle. Koel. Alles reg. So is die belangrikste ding dat julle ouens is waarskynlik al dink oor die oomblik, is jou probleem Stel 1s, wat as gevolg is Donderdag / Vrydag. In jou water.c program, wenk jy gaan te hê aan die gebruiker vir 'n vinnige insette. Binne jou mario.c program jy gaan te hê om 'n geneste lus vir wat 'n lus vir die binnekant van 'n lus, om 'n blok piramide te druk, in wese soos wat Mario het om deur te spring. En dan in jou greedy-- of dalk Maak Verandering, indien enige van julle ouens het al ooit gehoor van that-- jy gaan hê om baie wees versigtig eerste drywende punt waardes. Onthou swaai desimale en heelgetalle is nie dieselfde ding nie. Bly op hoogte van watter een is wat. En jy gaan gebruik voorwaardelike stellings, as well. Alle reg, laaste ding. Ek het 'n paar minute oor. Styl. So, dit is iets wat nie eintlik die uitwerking van die doeltreffendheid, of die werklike verloop van jou kode. Maar dit effekte ons as jou skrapers, as jou lesers. Dit effekte jouself, as jy probeer om 'n probleem te vind. Dit effekte die leesbaarheid van jou kode. So styl, soos wanneer jy probeer om te styl 'n opstel vir Engels, as jy het paragrawe nie, jy het alles soort saam deurmekaar op een lyn, is dit maak dit moeilik vir enigiemand regtig om jou opstel te lees, selfs as jou punte is logies klank. Dieselfde ding in programmering. Jy kan verskriklik duister het kode wat Scaz sal dek, en dit kan nog steeds loop en funksie. Maar vir ons, as jou pragtige Tas, wat sal lees en evaluering van jou PSets, dit is nie baie mooi. So asseblief, ter wille ons en jouself, wanneer jy probeer om op te los 'n probleem in jou kode, en jy probeer om lees jou eie kode, maak seker dat jy 'n paar konvensies te volg dat ons gaan om te gaan oor. So die eerste. Gee jou veranderlikes betekenisvolle name. As jy wil 'n heelgetal te stoor genoem ouderdom, asseblief noem dit die ouderdom. Moenie noem dit hoog. As jy probeer om stoor 'n ouderdom in die hoogte, dit maak alles baie verwarrend vir ons. Ons hou nie verwar word. Jy wil nie verwar word. Niemand hou daarvan om verwar. As jy gaan om iets te skep, noem dit iets betekenisvol. Maar in vir lus, enkele karakter veranderlikes is gewoonlik fyn. En in vir lus, as jy wil net i, en j, k, voel vry om dit te doen. Konsekwent inisialisering. So wat beteken dit? Dit beteken tegnies, teoreties, jy kan inisieer en te skep verskeie veranderlikes op dieselfde lyn. So byvoorbeeld, kan ek 'n heelgetal genoem scaz_age, en heelgetal genoem andi_age = 20, en 'n heelgetal genoem jason_age op dieselfde lyn. En ek kan ook net een van toewys hulle en nie die ander waardes. Ons vra dat u asseblief nie doen nie. Want hier het jy in wese geskep drie veranderlikes, maar net een van hulle het eintlik 'n waarde. En dan wanneer ons probeer om jou kode te lees, of as jy probeer om op te los 'n probleem in jou kode, dit is baie verwarrend om te volg. Dus net vir jou leesbaarheid vir ons leesbaarheid, dit nie doen nie. Konsekwent krullerige draadjies. Sommige mense hou daarvan om hul sit krulhakies op verskillende plekke. Dit maak nie regtig saak nie. Maak net seker jy konsekwent in jou is eie-kode op die plek waar jy wil om hulle te sit. Konsekwente spasiëring. As jy 'n spasie na 'n lus altyd doen nie. Moet nie net graag soort doen dit op sommige plekke, doen dit nie in die ander. Net konsekwent wees. Tweedens, as iemand wil te kyk die CS50 Style Guide, ons het amptelik 'n styl gids wat vertel jy al hierdie konvensies, plus nog baie meer. Dit is online. Dit is soos cs50.net/style of iets soos dit. Jy kan dit Google. Konsekwentheid is die sleutel. So moenie bekommerd wees wat ander mense doen, maak net seker dat jy konsekwent in jou eie kode. Iemand enige vrae oor wat? Ja. SPREKER 18: So het die behoorlike ding te doen met inisialisering is net het hulle almal in 'n aparte lyn, is dat dit wat jy sê? ANDI Peng: So ek selde het dit gebeur. Maar as jy wil, as jy wou om te wees soos die redding ruimte in jou kode, of wat ook al, kan jy dit doen. Ons vra dat jy net nie inisialiseer een ding, en nie die ander. So as jy wil int scaz_age doen int andi_age, int jason_age, dit is goed. Net nie inisialiseer een en nie die ander is nie. Vrae? Alles reg. Ek gaan om te slaag die mikrofoon, en die laser pointer, en die leiding te Scaz op hierdie punt. Dit is ongemaklik. Hier is dit. BRIAN SCASSELLATI: Dankie. Hoe is dit vir 'n goeie? Klank is goed? . Uitstekend. OK. So, hi almal. Ek gaan om te probeer om deur te werk 'n praktiese voorbeeld met jou. En ons gaan CS50 se gebruik ontwikkeling omgewing, wat genoem die Geïntegreerde Ontwikkelingsplan Omgewing. En jy het dit gesien gedemonstreer in lesing. En in Probleem Stel 1, jy is gaan om 'n geleentheid te hê om dit te gebruik, en speel rond met , en kry gewoond aan dit, want ons gaan om dit te gebruik deur die res van die semester. So in hierdie IDE, jy wat lyk soos 'n baie tradisionele lêer leser oor aan die een kant. Jy het 'n gedeelte opgestaan top waar jy gaan om jou bronkode sien jou Cfile, die kode wat jy skryf. En af onder, sal jy het 'n terminale venster wat jy sal gebruik word om te beide jou program saam te stel en om te hardloop of jou program uit te voer. OK. Dus net om te gee ons 'n bietjie van stigting, in daardie terminale venster, jy gaan wees met behulp van 'n stel van opdragte daardie standaard opdragte regdeur is die meeste van Unix of Linux stelsels. En so as jy al ooit gebruik enige vorm van Unix, Ubuntu, of enige van die ander geure, hierdie gaan vertroud te kyk. As jy nie het nie, moenie bekommerd wees nie. Daar is niks ingewikkeld oor hulle. Hulle is maar net 'n ander sintaksis, 'n ander benaming konvensie as jy voorheen gesien. So om die lys uit die lêers binne 'n bepaalde gids, hulle gaan om 'n gebruik opdrag genoem ls, of lys. As jy wil om alles te sien met al die besonderhede, jy sal 'n opdrag te gebruik line argument met ls-l. En dit sal jou alles wys in meer detail, insluitende die regte vir 'n lêer. Om gids te verander, jy sal die cd opdrag gebruik. En jy sal in staat wees om te verander gids beide om te gaan na jou huis gids. Dit is net cd al deur self, cd met twee kolletjies sal jy terugkeer een vlak om jou vorige gids. En jy kan ook 'n CD subdirectory deur te tik in cd en die naam van daardie subdirectory. Jy kan ook nuwe dopgehou te skep. En ons gaan om te loop deur middel van hierdie in net 'n minuut. Maar net om te sit alles op die skerm. Sodat jy kan sien. Jy sal ook die vermoë om lêers direk te manipuleer uit die opdrag lyn. Jy sal in staat wees om hulle te kopieer, te beweeg hulle, of om hulle te verwyder, dit is, effektief, om hulle te verwyder. Die CS50 IDE gee jou die volle krag van command line argumente. En dit beteken dat jy kan ook doen hoogs gevaarlike dinge. OK. Byvoorbeeld, jy kan verwyder, of dit is verwyder, 'n lêer sonder om te vra vir 'n bevestiging. En jy kan selfs verwyder recursively-- dis die paneelbord r flag-- 'n hele subdirectory en al sy inhoud. OK. Hulle is in die rooi gelys omdat jy moet dink "Danger" elke keer jy sien die dinge. OK. Alles reg. Nou uiteindelik, die dinge wat gaan regtig waardevol vir jou wees, is daar 'n paar goeie truuks om te weet as jy opgevolg deur middel van hierdie terminale venster. Eerstens, kan jy die skerm skoon te maak enige tyd deur net te tik in duidelik. En jy gaan om te sien my doen dikwels. Jy kan ook net vertoon die teks van 'n lêer deur te tik en dan meer die lêernaam. Jy sal dan in staat wees om terug te blaai en saam met wat net met die spasiebalk en die pyltjie sleutels. As jy het, soos vandag in lesing 'n program wat voortdurend loop in oneindige lus, jy kan die program te stop uit te voer deur te tik in beheer, wat hou hou Control-C. En jy mag hê om te doen hierdie verskeie kere. Die rekenaar kry ver voor jou. En jy soms moet gee dit 'n paar van die drieë voordat dit werklik sal kom deur. Jy sal ook in staat wees om sorteer deur die opdragte dat jy net getik met die up sleutel, pyl sleutel, en dan die pyltjie sleutel. En wat is die meeste nuttig is in plaas tik uit lang lêername, jy sal in staat wees om die gebruik Tab om outomaties in 'n paar instruksies. Nou gaan ons om te demonstreer al van diegene in net 'n sekonde. So as jy nie kan onthou nie hulle moenie bekommerd wees nie. Dit is dinge wat jy sal haal en gebruik as ons gaan saam. OK. So in C-- anders as in Scratch-- C is 'n saamgestel taal. Dit beteken dat ons gaan 'n bron te neem file-- dit is die teks wat jy skryf, die opdragte wat jy skryf, die printf () state, die loops, alles else-- en ons gaan om die lêer te neem en gee dit af om 'n program genaamd die samesteller. Die samesteller sal dan dat die teks wat jy geskryf het en vertaal dit in die binêre instruksies dat jou rekenaar is eintlik gaan gebruik. Dit is die voorwerp genoem of die uitvoerbare lêer. As jy kyk na hierdie lêer, jy gaan om die kode wat jy geskryf het te sien. As jy kyk na hierdie lêer, jy gaan om 'n ewekansige volgorde van karakters wat geen sin maak hoegenaamd nie. Dit is omdat dit is die binêre. Dit is nie bedoel vir jou om te lees. Maar, enige tyd wat jy wil hardloop iets wat jy gaan te loop is hierdie voorwerp lêer. So wanneer ons werk met hierdie lêers, sal ons 'n lêer in C. skryf Ons sal dan stel dit, met behulp van 'n opdrag soos make wat roep samesteller klang vir die C-taal. En dit sal 'n voorwerp lêer, soos 'n uit, of in hierdie geval, die naam, my lêer, dat ek in gesit het. Alles reg. So laat eintlik dit te probeer. So ek het met 'n voorbeeld van wat ek wou probeer. En een van die dinge wat my fassineer is animasie. So ons gaan om te probeer om te doen 'n bietjie van animasie met net ASCII karakters. Karakters wat ons kan maklik nou druk. So hier is my beste poging op die skep vir jou die animasie van 'n bunny wat deur die lang gras. Daar is hy. OK. So hy is nog nie loop nie, maar hy is daar staan ​​in die lang gras. Nou as ek 'n animeerder, in die ou skool weergawe van animasie, wat ek sou doen, is ek sou produseer 'n foto van hierdie bunny in die gras. En dan sou ek produseer 'n ander picture-- 'n ander wat hulle genoem dat cell-- het die hasie net effens verskuif. En dan 'n derde een wat moes die bunny beweeg 'n bietjie verder. En ek sou 'n hele produseer volgorde van hierdie selle. Sommige waar die bunny is verby op die linkerkant. En dan beweeg stadig, een deur die een teen die middel. En dan van die middel oor na regs. En as ek dan regtig gelukkig, ek kon dit saam te stel en ek kon hulle lewendig. En daar is my bunny hardloop deur die gras. Dit is my groot PowerPoint mislei vir die dag. OK. So, dit is so goed soos dit kry. OK. So, hier nog een keer, hier is ons bunny hardloop deur die gras. SPREKER 19: Weereens. BRIAN SCASSELLATI: Een meer tyd, alles reg. Daar is jou haas. OK. So vandag wat ons gaan te doen, is ons gaan om te probeer om die proses te outomatiseer van die vervaardiging van hierdie selle. Ons sal nie heeltemal tot op die punt van in staat is om hulle almal saam te stel. Maar, ons gaan om te probeer om die outomatiseer proses vir die opwekking van die ry. En dit is baie van wat animasie vandag is soos. Dit beteken dat jy nie dinge doen noodwendig deur die tekening alles met die hand. Ons gebruik 'n rekenaar te outomatiseer dele van die proses. OK. So laat my oorskakel nou ons CS50 IDE. En Ek geskape het tot us-- en laat my zoom hier 'n bietjie bit-- Ek het geskep vir ons 'n beginpunt. Elke keer wat ons jou vra om te sit af en skryf 'n stukkie van die kode, wat ons jy regtig vra om te doen is ons vra om 'n probleem op te los. En die weg wat jy moet dink oor om dit te doen is deur te begin met 'n paar eenvoudige deel van die oplossing. En dan bou uit daardie deel. En dit is wat ons gaan doen vandag. So eerder as om alles op een slag te skryf die hele klomp van die kode wat gaan daardie produseer 10 animasie selle, ons gaan plaas begin met een stuk wat werk. En dan sal ons 'n bou bietjie rond wat en 'n bietjie meer en 'n bietjie meer. Nou is die goeie ding oor probleme op te los hierdie manier is dat dit sal jou toelaat om te begin altyd met iets wat jy weet werk en stel een geleidelike verandering. En dit is 'n goeie manier om te leer hoe om die kode, want elke keer as jy 'n verandering, jy sien watter impak dit het. OK. So hier is ons uitgangspunt. OK. So aan die begin van my lêer, Ek het hash #included stdio.h. Dit is so dat ek kan kry die printf () funksie is om te werk. Ek het toe ek my hoof funksie. En dit lyk nog 'n bietjie arcane of onduidelik om sommige van jou. Dit is OK. Al wat dit sê is dat Die belangrikste funksie neem geen arguments-- leemte middel niks in C. En opgawes deur konvensie 'n heelgetal. Main terug altyd 'n heelgetal is, gewoonlik 'n kode te sê dinge het goed gegaan of het nie goed gaan nie. OK. Maar belangrikste moet daardie vorm vir ons nou. Ek het toe in drie reëls van die kode. En saam met elke lyn van kode, het ek 'n kommentaar. Nou een van die dinge wat Ons sal aandring dat jy dit doen, en dit is so 'n belangrike programmering praktyk, is om altyd jou kode kommentaar lewer nie. Skryf altyd in 'n English kommentaar iets wat jy dink die kode is veronderstel om te doen. Op dié manier, later wanneer jy terug te kom dit, kan jy kyk na dit en jy kan sê, o, ek onthou wat ek was probeer om te doen met hierdie. Of wanneer 'n TA sit met jou probeer om jou te help op kantoorure, hulle kan kyk na hierdie en gaan, ek sien wat jy probeer om te doen, maar in plaas daarvan is dit wat regtig gebeur het. OK. So ek het drie dele om my kode, Ek gaan in die eerste plek druk uit 'n paar punte aan die begin. Ek sal dan druk my uiters fancy haas. En dan 'n paar bietjie kolletjies aan die einde. En hierdie drie druk state moet kyk vir jou bekend op hierdie punt. Al wat ek doen in elkeen van hulle is ek is uit te druk 'n reeks van karakters. Daar is geen veranderlikes betrokke. Alles is net plat. OK. So as ek neerdaal nou na my terminal-- Kom ons kyk of ek dit terug kan kry out-- en ek gaan weer tik duidelik. SPREKER 20: Het ons gebruik die dubbel slash om kommentaar te lewer? BRIAN SCASSELLATI: Kan gebruik die double-- ja. Daar is verskeie maniere om laat kommentaar in C. Een manier is om die dubbele streep te gebruik. Die ander is om 'n streep en 'n ster te gebruik en dan sluit af met 'n ster en 'n streep. Alles reg. Eerste van alles, ek gaan begin opgevolg hier rond. So as ek gaan na my tuisgids, Ek het dopgehou daar verander, Ek gaan om te kyk en te sien wat in daardie gids, LS, lys uit. Ek gaan om te sien dat ek het twee subdirectories. Kom ons maak dit 'n bietjie groter hier sodat ons almal kan dit sien. Ek kan sien dat Ek het het twee subdirectories. Ek sal directory verander om te gaan in werkspasie. En ek gaan net tik deel daarvan, en dan net getref Tab. En dit sal die res voltooi vir my. Fancy. Ek sal kyk en kyk in werkspasie. En nou, ek werk op die SuperSection dat ons nou is onderrig. So ek gaan in daardie gids. En uiteindelik, kyk en sien. En Ek het die lêer bunny.c. Alle regte so laat my duidelik weer. En ek gaan weer ek is now-- bly nog in daardie gids en dit is vir my vertel ek is in dat SuperSection gids. Ek gaan om voort te gaan en maak my program haas. En dat opdrag, maak bunny, terwyl klink 'n bietjie vreemd, beroep ook die klang samesteller. En dit is vervaardig vir my 'n uitset wat 'n uitvoerbare funny-- n uitvoerbare lêer genaamd haas. OK. Ek kan dan, en dit klink nog erger, uit te voer haas. OK. En laat ons sien wat dit doen. OK. Dit is 'n bietjie van wat ek verwag het. Ek het my bunny prentjie het daar, maar ek wou dit al die soort van self. Wat het ek mis? SPREKER 21: Sny l of streep n. BRIAN SCASSELLATI: Sny n. OK. So laat teruggaan hier. En ek sal uit daardie. En ek sal terug te gaan in hierdie een. En laat ons nou 'n blik uit my hoof funksie hier. So, wat moet ek doen? Ek wil die lyn te beëindig. So sal ek in 'n kommentaar te plaas. Ek sal in 'n printf sit (). En wat het ek in te sit? / n. OK. Wat doen ek dit eindig met? Kommapunt. Alles reg. Nou, een van die werklik belangrike dinge is seker te maak elke keer as jy 'n verandering te maak in jou kode, wat jou red nie. As jy jou kode nie gered is, is jy gaan 'n bietjie star daar te sien. En dat die ster sê jy het nie hierdie kode gered. As ek stel dit nou, dit is nie van plan om enige van hierdie veranderinge te weerspieël, omdat die samesteller kyk na die lêer dit is op die skyf, nie die lêer wat oop te maak in jou editor. Alles reg. So laat dit stoor en dan sal ons gaan regs op hier, kom terug uit. Kom af na my terminale. En laat ons weer duidelik die ruimte. En ons kan voort en een gaan tyd om ons bunny program. En voer die haas. Dit het nie gewerk nie. Verkeerde slash. So as jy kyk na wat ek het, het ek 'n / n in daar, maar ek het die verkeerde slash. Alles wat jou rekenaar doen, is baie duidelik. OK? Een klein fout punktuasie en skielik jy nie kry wat jy wil. Alles reg. So laat se rug zoom weer. Ons sal terug te gaan. Wel maak dat baie vinnig herstel. Ons sal die regte slash in te sit. Ons sal dit red. Ons sal terug zoom in. Vir een of ander rede, dit is nie gelukkig, maar laat ons gaan voort en ons sal terug na die terminale hier gaan. Duidelik dit op. Ons sal in zoom. En nog een keer, sal ons bunny te maak. En nou seker genoeg, dit werk. Hoera. OK. So kom ons probeer om hierdie te maak 'n bietjie meer algemeen. Kom ons kyk of in plaas van net druk 'n bepaalde raam, Kom ons kyk of ons dit kan maak sodat ons almal kan kry 10 van daardie geanimeerde rame wat ons wou hê. So weer, laat ons dit 'n stap in 'n tyd. Kom ons eerste veralgemeen nie, nie sodat ek al die rame, maar so het ek 'n mens doen raam dat ek dalk wil. So wat is die verskil tussen die rame? Is die bunny dieselfde? Gehoor: Ja. BRIAN SCASSELLATI: Ja. Wat is die verskil? GEHOOR: Posisie. BRIAN SCASSELLATI: Sy posisie, reg? En hoe kan ek sy posisie te beheer? Hoeveel kolle Ek is om aan die begin en hoeveel kolletjies Ek is om aan die einde. So ek het vyf by die begin en vyf aan die einde. Kom ons vervang dat vyf met 'n lus. OK. En ek gaan om 'n te skep vir lus nou wat gaan om te sê, Ek gaan 'n paar nommer druk kolletjies aan die begin. Ek gaan 'n veranderlike te gebruik. Kom ons sê, hoe ek as die toonbank in my lus. En ek gaan om dit te verklaar tot bo. En dan in die lus Ek nodig het om drie dinge te doen. Die eerste ding wat ek nodig het om te doen is wat ek nodig het om i inisialiseer. Wat moet ek inisialiseer dit begin om te wees? 0. OK. Dan moet ek sê, wat is die toestand beëindiging? Wanneer moet ek ophou? Wel hoeveel kolletjies doen jy wil druk op hierdie een? GEHOOR: Five. BRIAN SCASSELLATI: Vyf weer? Hoe gaan laat iets te doen anders, ons het vyf. Kom ons wys dat dit anders is. SPREKER 22: Twee. BRIAN SCASSELLATI: Twee. OK. So as ek wil twee punte, wat moet ek hier sit? GEHOOR: Drie. BRIAN SCASSELLATI: Drie. OK. Hoeveel keer is dat gaan om te gaan deur middel van? Dit gaan om te gaan deur middel van drie keer, 0, 1, 2 en, reg? Alle reg, laat ons gaan terug na twee. Nou sal ons twee kolle kry. En wat wil ek elke doen keer as ek gaan deur die loop? Wat het verander elke keer as ek gaan deur? SPREKER 23: Voeg 'n dot. BRIAN SCASSELLATI: Ek het om aan te hou. Ek gaan 'n punt toe te voeg. Ek gaan 'n punt te druk, elke keer deur die loop. Maar hoe ek die dop van hoe baie keer Ek het deur die lus was? Ek gebruik i, wat veranderlike, wat toonbank. So elke keer deur, ek gaan om die toonbank te inkrementeer een. Nou, dit is dieselfde vir my gesê i = i + 1. Dit is OK. Ek kan dit doen that-- Ek hou van die snelskrif, so ek gaan om te sê I ++. OK. Kom ons doen dieselfde ding af hier aan die onderkant. Net ek het soort van daardie een. Ek gaan julle ouens laat hierdie een heeltemal te doen. Alles reg. So, wat moet ek hier skryf? Hier is my lus. Ek gaan 'n printf (doen) en ek gaan om dit te maak sodat ek net een dot druk op daardie bodem. Wat moet ek skryf binne hierdie lus nou? Wel, die eerste van alles wat veranderlikes moet ek gebruik? SPREKER 24: j. BRIAN SCASSELLATI: Ek kon j gebruik. Kan ek dieselfde een te gebruik? Kan ek weer gebruik ek? Ja. Dit is OK, want die is wat ek gebruik hier, Ek het hulle nie weer wanneer nodig Ek kry op hierdie punt. So, wat moet ek inisialiseer i om? SPREKER 25: 10. BRIAN SCASSELLATI: 0. Wat moet ek gaan? Hoeveel kolle moet ek nou aan die einde as ek twee kolle het aan die begin? Ek moet agt aan die einde, so wat Ek moet gaan, ek minder than-- GEHOOR: Sewe, agt, nege. BRIAN SCASSELLATI: Ek het gehoor sewe. Ek het gehoor agt. En ek hoor nege. OK. So ons is almal in die regte ball-- Jason sê 10. OK. As ek nodig twee kolle vir die eerste een, hoeveel te doen I-- en ek moet agt punte vir die laaste one-- Ek het 'n twee bo, wat moet ek hieronder neer te sit? GEHOOR: Agt. BRIAN SCASSELLATI: Agt. Want dit gaan tel nul deur sewe. En dit is agt keer deur die loop. OK. En wat moet ek doen aan die einde? GEHOOR: i ++. BRIAN SCASSELLATI: i ++. Alles reg. So dit is op soek na mooi goed daar. Kom ons probeer dit en laat ons sien wat dit doen. OK. So ons gaan om dit te red. Nice en gered word nie. Ons sal terug uit zoom. Ons sal hier probeer in die terminale. Ons sal in zoom. Oops. Ons sal, een keer, maak ons ​​bunny program. En gaan voort en voer haas. En dit is daar. So daar is ons haas. Waar dit het twee kolletjies aan die begin en agt punte aan die einde. Almal nog met my? OK. So het ons dit op. Ons gebou een bunny, een spesifieke raam. Nou het ons in staat was om veralgemeen wat om te bou meer, verskillende soorte rame. Nou laat gaan voort, en het dit genereer nie net een raam, maar laat genereer 10 rame, waar ons stadig maak die bunny beweeg al die pad oor die veld. Alles reg. Kom ons gaan terug. En ons sal nou probeer. So, wat moet ek regtig hier te verander? Wat het ek nodig om te verander? SPREKER 26: Jy moet eers verander die aantal kolletjies maksimum Aan die begin. Want as ons doen 10 punte, dit gaan nodig het om te skaal. BRIAN SCASSELLATI: Ja. So nou het ek dit soort van geprogrammeer om altyd te doen twee kolle aan die begin en altyd agt punte aan die einde. Ek wil 'n ander loop bou, reg? Want ek wil nie bou net een bunny prentjie Ek wil 10 bunny foto te bou. So ek moet na 'n ander te bou lus, en as ek gaan deur daardie lus, Ek wil om te verander hoeveel kolletjies ek druk aan die begin en hoeveel kolletjies ek druk aan die einde, gebaseer op wat siklus deur die lus Ek's in. Alles reg. So laat ons kry 'n ander toonbank. Iemand het gesê voordat j, so ons sal 'n ander j te maak. En nou, ons gaan bou 'n ander vir lus. Wat gaan binne-in dat lus? Hierdie dinge het om te gaan binne die lus, reg? Maak die bunny het om te gaan binne die lus? Het ek 'n bunny in elk van die 10 rame? GEHOOR: Uh-huh. BRIAN SCASSELLATI: Ja. Ek wil 'n bunny in elke van die 10 rame, reg? Hoe oor die kolletjies op die einde, doen ek dit nodig? OK. So ek gaan almal van hulle keep. Ek gaan al beklemtoon hierdie, en ek gaan om te tref Tab. En wat gaan hulle almal oor stoot 'n bietjie, sodat dit maklik vir my om te sien wat in die lus. En dan sal ek dit te beëindig. Kom ons sê. OK? Nou, in hierdie lus wat Ek is building-- Oeps, maak wat so kan jy see-- Ek het my counter j. Ek sal dit begin by 0. Hoeveel keer wil ek om te gaan deur middel van hierdie lus? GEHOOR: 10 keer. BRIAN SCASSELLATI: 10 keer. So watter getal moet ek hier sit? GEHOOR: 9, 10. BRIAN SCASSELLATI: 9, 10, iemand se het om te sê 11, reg? Ek wou twee kolle voor en sit i minder as 2. Ek wou agt punte, Ek sit i minder as 8. Nou wil ek gaan deur 10 tye, so ek het j minder than-- GEHOOR: 10. BRIAN SCASSELLATI: 10. Daar gaan ons. En wat doen ek aan die einde j? ++, Inkrementeer dit. OK. Nou, hier is die moeilike deel, wat is gaan nou as ek dit doen gebeur? Gaan ek 10 rame druk? SPREKER 27: Ek dink hulle sal almal dieselfde wees. BRIAN SCASSELLATI: Hulle sal almal dieselfde, reg? Omdat almal van hulle is nog steeds gaan twee punte aan die begin sit. Maar ek weet nie alles wil het twee kolletjies die begin. Hoeveel kolle ek wil aan die begin? GEHOOR: verander. BRIAN SCASSELLATI: Ek dit wil verander, reg? So, wat moet ek hier dat die veranderende elke keer as die lus gaan deur? GEHOOR: Aantal punte, j. BRIAN SCASSELLATI: j, die aantal kolletjies. So ek kan dit verander om j wees. Die eerste keer deur die lus, wat is dit gaan wees? Wat kan ek j ten eerste? GEHOOR: 0. BRIAN SCASSELLATI: So hoeveel keer gaan ek dit doen? 0. Die tweede keer deur die lus, j se gaan wees 1, want ek inkrementeer dit. Hoeveel kolle gaan ek druk? 1. Die derde keer deur die lus, Hoeveel kolle gaan ek druk? GEHOOR: Drie. BRIAN SCASSELLATI: j gaan wees 3. Hoeveel kolle gaan ek druk? O, jammer, j gaan wees 2. Hoeveel kolle gaan ek druk? GEHOOR: 2. BRIAN SCASSELLATI: 2. OK, so ek gaan hou die verhoog dat as ons gaan saam. Hoe gaan daaronder? Wat gaan hier af? Ek wil nie altyd 8 aan die einde nie? SPREKER 28: 10. BRIAN SCASSELLATI: Ek wil 10 punte? Ek wil dit verander, ook. So hoe kan ek dit wil hê om te verander? GEHOOR: [onhoorbaar]. BRIAN SCASSELLATI: Wel, as ek het vyf punte aan die begin, hoeveel dot se kry ek aan die einde? GEHOOR: Five. BRIAN SCASSELLATI: As ek ses punte aan die begin, hoeveel kry ek aan die einde? GEHOOR: Vier. BRIAN SCASSELLATI: As ek sewe punte aan die begin, hoeveel kry ek aan die einde? GEHOOR: Drie. BRIAN SCASSELLATI: As ek het het j kolletjies aan die begin, hoeveel kry ek aan die einde? 10-j. OK. So kom ons probeer dat uit. So ek gaan om ons bunny program te red. Weereens sal ons uit te zoem. Ons sal afgaan om ons terminale. Ons sal dit skoon te maak. En zoom in. Ons sal ons bunny program weer te maak. En ons sal dit uit te voer. Uh Oh. Hou op, laat ons zoom uit. Het ek 10 rame? Wel, hoeveel hasies sien ek daar? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Ek het 10 rame. Is hulle almal dieselfde? GEHOOR: Ja. Geen. BRIAN SCASSELLATI: No. Daardie eerste een is, die bunny is ver aan die linkerkant. En hier, die bunny is ver oor die SPREKER 29: Right. BRIAN SCASSELLATI: So, wat het ek vergeet om te doen? SPREKER 30: Begin 'n nuwe lyn. BRIAN SCASSELLATI: ek vergeet om 'n nuwe lyn te begin, weer. Dieselfde fout wat ek voor gemaak word. Alle reg, laat ons gaan regmaak. Nou, het ek nog steeds het die kode daar 'n nuwe lyn te maak. Hoekom het dit nie werk nie? SPREKER 31: Dit is nie binne die lus. BRIAN SCASSELLATI: O, dit is nie binne die lus. Dis reg. Dit is buite sit hier. En die lus vir 'alles dit is binne-in die teks. So ek gaan om te beweeg hierdie binne-in die lus. En ek sal Tab in die voorkant van dit toon dat dit is in die regte plek. En nou, ons sal dit weer te red. Ons sal uit te zoem. Ons sal aan ons terminale skakel. Zoom in. Ons sal ons bunny program remake. En nou, nou is ons het ons 10 rame. [Klap] BRIAN SCASSELLATI: OK. Doen. Hier is ons nes vir loops. Ons was in staat om te genereer in die innerlike lus hoeveel kolletjies Ek wou druk op die begin, aan die einde. En die buitenste lus beheer hoeveel rame ek bou. Ons het begin met 'n klein kern van die probleem, en ons het uit daardie punt. Alles reg. Kom ons doen 'n stap. Jy gereed? Daar is een ding hier waar Ons het eintlik soort van het meer kompleksiteit as wat ons nodig het. Kom ons neem 'n blik. So in ons bunny program, as ek hier zoom uit, Ek het eintlik 'n paar van die dieselfde te doen ding oor en oor weer. Wat doen ek dit is soort van dieselfde ding twee keer herhaal? SPREKER 32: Druk die punte. BRIAN SCASSELLATI: Ja Ek druk die kolletjies twee keer. Regtig, moet ek hierdie opmerking hier af. Ek druk 'n paar punte by die begin, reg hier. En dan 'n paar kolle druk ek aan die einde. En ek doen soort van presies dieselfde ding. Wat ons gaan begin werk in die volgende paar weke is in staat om die blokke te neem kode wat ons gebruik oor en oor weer, en deur 'n proses genoem abstraksie, ons gaan hulle trek uit en skryf dit een keer, sodat ons kan dan hergebruik hulle oor en oor weer. So kom ons probeer dit. Gereed? Ons gaan hierdie blok van die kode te neem. En ek gaan om dit te neem daar uit. En ek gaan define-- af aan die onderkant, Ek gaan 'n nuwe funksie te skryf. Dit is nie van plan om iets terug te keer. En ek gaan om dit te noem printDots. Dit gaan om een ​​te neem argument, 'n heelgetal wat sê howManyDots ek moet druk. En nou in plaas van druk j kolletjies, sal ek druk howManyDots ek moet druk te vertel. En daar is hier een klein probleem. Enigiemand wat weet wat dit is? Wat moet ek dit is gelys hier dit is nie gedefinieer? GEHOOR: [onhoorbaar] BRIAN SCASSELLATI: Wel hoe baie kolle gedefinieer reg hier, maar ek gebruik dit veranderlike i. So ek gaan daardie veranderlike neem i en ek gaan om dit af te definieer in hier plaas. Dus is dit nou gaan stay-- oops, het die caps lock op somehow-- Ek is gaan i laag te hou hier. So nou hier is my klein funksie of sub-roetine, en dit sê, Hoeveel kolle gaan ek druk? En dit sal gaan deur hierdie lus en druk hulle oor en oor weer. Ek kan dan my program hier verander het. En wat het ek noem daardie funksie? printDots. So ek sal printDots noem. Hoeveel kolle ek wil druk die eerste keer voor die bunny? GEHOOR: j. BRIAN SCASSELLATI: j. Hoeveel kolle ek wil druk aan die einde, na die bunny? 10-j. En daar is een ding wat ek mis. As jy gesien het in lesing vandag ons gaan printDots verklaar bo die prototipe te gee. OK. So, wat ek gedoen het is ek het probeer om isoleer wat hergebruik deel van die kode dat ek oor en oor weer gedoen het. En ek het probeer om dit uit te trek sodat al wat is vervat in 'n plek. Op dié manier, as ek 'n fout gemaak het iewers, Ek het net om dit op te los in een plek. Alles reg. So laat dit red. En laat ons seker maak dit werk. So laat uitgaan. Ons sal weer na ons terminale. Ons sal in zoom. Ons sal dit bunny proses te maak. Oh. En dit is aan my gegee 'n waarskuwing. Wat is dit vir my vertel? Wel, in enige van hierdie tye, jy wil altyd om te beweeg na die heel eerste error-- nou op hierdie een, het ek nog net een gekry. Dit sê vir my in bunny.c, op die lyn 8, 9 kolom, daar is 'n probleem. Dit sê, jy dit verklaar het veranderlike i en julle het dit nie gebruik nie. Nou gewoonlik, dis nie die ergste fout. Dit is 'n maklike een om op te los. En in die feit, kan ons terug gaan. Ons kan terug te gaan na haas. En in hierdie geval, al wat ons hoef te doen is om ontslae te raak van die i, omdat ons nie die gebruik van i binne belangrikste nie. Ons is net om dit te gebruik binne ons sub-roetine. So laat red. Ons sal terug te gaan. En zoom in. Ons sal nog een keer te maak bunny. En weer daar is ons 10 rame. OK. Enige tyd wat jy gegee 'n procedure-- Ja. SPREKER 33: Ek het a-- Ek is verward. Kan jy terug na die kode gaan? BRIAN SCASSELLATI: Yep. SPREKER 33: So, wanneer jy skryf jou prototipe, die argument wat jy het dit die naam is howMany genoem? Maar, below-- BRIAN SCASSELLATI: O ja. SPREKER 33: --called hulle iets anders, ek verstaan ​​nie. BRIAN SCASSELLATI: Hoekom is hulle anders. So dit is 'n groot vraag. So die vraag is, tot hier het ek geskryf howMany, en onder af, het ek geskryf howManyDots. Die rede hiervoor is dat in jou prototipe, dit is eintlik nie aandag om die name wat jy sit in. Al wat dit regtig omgee oor is dat dit 'n heelgetal. Dit wil die vorm weet van wat jy om in. Nou stylistically-- oops-- wat ek moet nie, is ek graag hierdie wedstryd te maak. OK. Want dit sal hou dit makliker vir my om te onthou. Maar dit was my fout Ja. SPREKER 34: En so vir die prototipe te werk, net skryf dat die lyn, die skryf van die prototipe, kan daardie funksie wat kom reg onder dit om te gaan na die einde en haal wat dit beteken? BRIAN SCASSELLATI: Wat dit beteken is wanneer die samesteller gaan deur, dit gaan van die top van jou kode aan die onderkant. En wat dit prototipe is, is dit is basies 'n belofte. Dit sê, daar gaan wees 'n funksie iewers gedefinieer. Dit gaan 'n beroep printDots wees. En dit gaan 'n argument te neem wat gaan om 'n heelgetal wees en dit gaan om terug te keer niks, nietig tipe. OK. Ek belowe jou dit gaan wees iewers gedefinieer in die pad af. Maar enige tyd wat jy sien dat as jy gaan af deur die res van my hooffunksie, ek wil jy behandel wat as 'n funksie wat neem een ​​heelgetal insette. En so wanneer die samesteller gaan af deur middel van hierdie, is dit sien dat die belofte. En wanneer dit af, hou gaan, gaan hou, dit vind die eerste keer printDots genoem word. En dit sê, O, jy gee my j. j is 'n heelgetal. Wel, jy my belowe dat sou 'n heelgetal en dit is reg. Dit is OK. En dan uiteindelik, af aan die onderkant, voordat ek by die einde van my lêer, Ek maak goed op my belofte en ek definieer. OK? SPREKER 35: So, is dit die saves-- program sal oop ruimtes te red dat dit gaan terug en vul aan die einde? BRIAN SCASSELLATI: Dit is nie oor die geheue toekenning. Dit is eintlik net oor wat tipe is wat jy verwag om te sien. Moet hierdie ding het een argument, of vyf argumente? Moet hê dit heelgetalle gegee word nie, of snare? Dit is al wat dit is op soek te doen, is om seker te maak, jy gee my die regte soort argument. OK? Alles reg. Laat ek jou verlaat met een ander bietjie na te kyk. ASCII art is nie die groot model animasie soos dit vandag is. Maar sommige mense natuurlik dinge en hulle stoot dit aan hul uiterstes. Dit is, soos David gedemonstreer in lesing, 'n stukkie van die kode dat jy moet onder geen omstandighede probeer om julle te dupliseer. Want dit is verskriklik stilisties. In werklikheid, is dit ontwerp om te wees as moeilik as moontlik te lees. OK. So, om weer te doen, laat ons in zoom hier. Ek gaan nou gaan, verandering gids. Ek gaan om te gaan een vlak, terug na my werkplek. Ek sal dan verander na hierdie gids ander gids wat ek gemaak het. En dit is die International Verborge C Programming Contest. Verborge middel so hard as moontlik te verstaan. So asseblief, moenie bang wees nie as jy kyk op hierdie en gaan, kan ek nie lees nie. Dit is die punt van dit. OK? Maar, ons het hierdie wonderlike program wat ek is gaan om te kyk na deur net te tik meer. En laat ons sien of ek uit kan zoom net 'n bietjie, sodat jy kan dit sien En dit is die program. Dit is vernoem endo.c. En dit lyk soos hierdie emmer met soort van die letters F-L-U-I-D in. Dit is eintlik 'n program. Dit is geskryf in die mees obskure manier dat die skrywers kon moontlik skryf dit. Maar dit is 'n wonderlike stukkie wat genereer 'n model van vloeidinamika. En so gaan ons om te gee dat die model 'n inset wat lyk soos hierdie, van 'n staired stel van houers met 'n paar vloeistof, 'n paar vloeistof, by die top. En ons sal dit simuleer wat gebeur om dit te. So ek sal dit funksie, endo. En ek sal dit gee wat insette lêer wat ek gehad het. En daar is ons toonbeeld van ASCII art. 'N Volledige vloeistof dinamiese simulator hardloop in net 'n paar reëls van die kode. Nou wat is eintlik regtig ongelooflike oor hierdie klein program is dat ek wil dit nou stop, so ek gaan om dit wat opdrag gebruik? GEHOOR: Control-C. BRIAN SCASSELLATI: Control-C. OK. So sal ek Control-C te gebruik. C Dit sal dit stop. Ek sal weer skoon te maak. En nou gaan ek die beroep program, uit te voer die program, gebruik van homself as insette. En ons sal die vloeistof dinamiese sien simulasie van dit smelt. OK. Moet asseblief nie laat die program wees die ding wat jy verwar. Dit is net so dat ons kan eindig op iets koel en interessante. OK. Sterkte met jou probleem stelle. Ons sal gelukkig wees om te antwoord vrae na die klas. Dankie baie, ouens.