[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]