>> [Speel van musiek]
>> Spreker 1: Dit is CS50 en dit is die begin van die week twee.
So, laat ons duik reg in iets dit is karretjie, so te sê.
So, hier is CS50 IDE en ek het opgetrek in advance hierdie screen-- damn
Dit.
Spoiler waarskuwing.
Alles reg.
Ek het die skerm opgetrek hier wat het 'n baie eenvoudige program.
As ons rol af, die meeste van hierdie is net die kommentaar,
maar hier in lyne 13 deur 17 Ons het 'n program.
>> Dit is sintakties geldig, wat beteken dat as Ek stel dit, sal dit op te stel en uit te voer,
maar dit is karretjie.
Hierdie program eise in die kommentaar up top dat dit moet druk 10 sterre,
Maar dit beteken nie.
En gebaseer op jou ervaring, of binnekort ervaring met C wees,
kan jy logies onderskei waarom dit is, in werklikheid, karretjie?
Ja?
GEHOOR: Dit gaan van nul tot 10.
Dit is 11 iterasies.
Spreker 1: Ja.
So, dit gaan van nul up deur en gelyk aan 10,
wat natuurlik is 11 iterasies.
So, dit gaan om druk, inderdaad, 11 sterre.
So, die rekenaarwetenskap konvensie in die meeste programmeertale
is inderdaad net om begin tel op nul,
maar tel tot maar nie deur die waarde wat jy eintlik omgee.
>> Nou, dit is een ding wat neem 'n bietjie gewoond raak aan
en selfs Scratch, ontwerp as dit vir nie-programmeerders of nie rekenaar
wetenskaplikes en vir kinders grootliks, is ontwerp om
jy begin algemeen tel by een.
En dit is goed.
Jy kan absoluut begin tel by een as dit is meer gemaklik.
En tel tot en deur 10, maar jy sal veral hierdie week besef
en as dit nie net sodat baie dinge in programmering
aanvaar dat 0 is die eerste syfer waarmee jy tel,
wat jy gaan om dit makliker vind net om te kry in die gewoonte van die begin
van nul en tel tot die waarde jy omgee nou uit die
kry gaan.
>> So, wat vaste daardie.
Ons verander die minder as of gelyk aan net minder as.
Kom ons neem 'n blik op 'n tweede voorbeeld hier.
>> So, hierdie program beweer ook in sy kommentaar op top dat dit moet druk
tien sterre, maar dit beteken nie.
Wat is die fout hier?
>> So, what-- en jammer, laat ons duidelik wees.
10 sterre.
Een per lyn, maar dit beteken nie.
So, in werklikheid, laat my gaan voort en stel hierdie een, want dit is 'n bietjie minder
duidelik gebaseer op die beskrywing.
Laat my gaan in ons bron gids.
Maak karretjie een dot streep karretjie een.
OK, ek sien 11 sterre wat is nog steeds problematies,
maar hulle is ook al in 'n lyn.
Wat is die probleem hier?
Ja.
GEHOOR: [onhoorbaar].
Spreker 1: Ja.
So dit is 'n subtiliteit dat julle onthou my om kort melding van.
Selfs al lyk alles mooi, en dit is mooi ingekeep,
en dit soort van kyk Scratch-agtige in daardie lyn 16 en 17 is,
inderdaad, ingekeep onder daardie lus.
Dit is onbelangrik.
Die rekenaar nie weet of sien wit ruimte.
Wit spasie is net vir ons mense, stilisties.
Die rekenaar het weet wanneer jy krulhakies, wat, inderdaad,
los hierdie probleem.
>> So, as ons werklik in gegaan en uitdruklik gestel in hierdie krulhakies
wat sou hierdie probleem op te los deur duidelik te maak aan die samesteller
dat ek eintlik wil uitvoer twee reëls van die kode weer
en weer en weer.
Maar wat is die belangrikste verklaring?
Reg?
Ons het nie nodig streng krullerige draadjies al die tyd,
selfs al is dit waarskynlik die beste praktyk in elk geval in daardie gewoonte
selfs al is dit voeg twee karakters om jou kode. hoekom?
>> GEHOOR: [onhoorbaar]?
Spreker 1: Ja so dit is ander oplossing heeltemal.
Reg?
Veral as die eerste oogopslag jy nie waardeer regtig wat aangaan.
Wel, ons kon sekerlik net twee dinge doen op 'n keer
en net vermy die probleem geheel en al.
En dit is goed, maar nou, vir vandag se doeleindes, wat
is die verduideliking vir die fout?
Hoekom was al die sterre op 'n lyn?
Ja?
>> GEHOOR: Dit blyk dat indien jy het 'n reël van die kode,
jy kan dit doen sonder daardie.
Spreker 1: Presies.
Dit is net 'n menslike konvensie.
Mense besef dat dit 'n klein irriterende of vervelige
hê om krulhakies al sit van die tyd as alles wat jy wil doen
is voer 'n reël van die kode.
So, besluit mens sommige tyd gelede dat dit is goed.
As jy wil al jou lus sit op die net dat een lyn soos hierdie,
dit is fyn met die enkele kommapunt aan die einde.
Maar jy kan net een so 'n lyn sonder die krullerige draadjies.
>> Dus, wanneer CS50 styl gids as jy verwys na,
Jy sal sien dat die algemeen Dit is goeie gewoonte
te kry in hierdie totdat jy baie gemaklik dwaling
van hierdie soort van konvensies en doen jou eie ding.
So lank as wat jy self konsekwent.
En ons sal meer oor praat styl 'n bietjie later vandag.
>> So, laat my oop een ander program.
Natuurlik moet ons los dat 10 as well.
Laat my gaan voort en skryf 'n werklike vinnige program wat ek sal noem,
kom ons sê, loop dot C. So, lus dot C. En in lus dot C Ek gaan om te hê,
sluit in standaard I / O dot H int main nietig.
En nou, laat ons net doen, inderdaad, 'n lus.
So, 4 int Ek kry nul.
Ek is minder as, sê, 50.
Ek plus, plus.
En dan hier kom ons gaan voort en doen druk F.
En dan wil ek ek druk en 'n nuwe lyn, kommapunt.
>> En dit moet al die druk getalle van nul tot 50?
'N Paar hoof knik.
'N Paar nos.
Wat is die fout reeds?
Wat is die maklike fout wat ek gemaak?
Ja.
>> GEHOOR: [onhoorbaar].
Spreker 1: Ja.
So selfs al is dit lyk soos hierdie is wat ek van plan is,
onthou dat ek ook net 'n ASCII karakter.
>> So, as ek sê, druk "I."
Dit is letterlik gaan I. So druk, as ek
wil plug-in 'n tydelike waarde wat ek werklik nodig het om dit te doen
en dan plug-in die waarde van I dinamies.
Anders is ek net gaan kry 50 Ek se op die skerm.
>> So, laat my gaan voort en maak hierdie lus, hardloop dit,
en, inderdaad, ons het al die pad deur middel van 49.
En as ek blaai terug in die tyd wat ek sien die getal nul aan die begin.
>> Wel, wat as ek soort van skroef?
Wat gebeur as ek dit doen?
Net omdat ek nie dink.
Wat is hierdie program.
Sodra weer saamgestel en hardloop, gaan logies doen?
>> GEHOOR: Niks nie.
>> Spreker 1: Niks nie.
Hoekom is dit?
>> GEHOOR: Ek is ontwerp vir 'n nul.
So, die toestand is onwaar.
Spreker 1: Ja, presies.
Al die kode korrek is, sintakties.
Dit sal stel, is hierdie kode sal loop, maar dit is nie
gaan niks nuttigs doen want ek inisialiseer ek na nul.
Ons het toe gaan, is ek groter wees as 50?
Natuurlik, nee, dit is nie.
So het die lus voer nooit nie.
>> Wat as ons iets doen 'n bietjie meer roekelose?
So, wat as ons te doen soos int Ek kry nul.
En nou, laat my gebruik die tyd lus, wat 'n ander toestand was.
En terwyl ek sê, terwyl ek is groter as of gelyk aan nul, en dan hier ek
gaan voort en stoor die lêer, maak lus.
En ek is op die punt om dit uit te voer.
Wat gaan ek om dit te sien tyd met 'n while lus?
Ja.
>> GEHOOR: 'n oneindige lus?
>> Spreker 1: 'n oneindige lus?
Ja, en hoekom?
GEHOOR: Want dit is altyd nul.
Spreker 1: Ja.
So, is ek wat as nul.
Natuurlik het ek altyd groter as of gelyk aan 0 as 'n resultaat.
So, ek is net gaan om te sien dit oneindig.
En nou, dit het een keer kom of twee keer aan die hoofde van die kursus se.
Wat gebeur wanneer jy het 'n oneindige lus?
>> GEHOOR: Control C.
Spreker 1: Ja.
So Control C sal uiteindelik reageer.
Ongelukkig het ons gedruk miljoene nulpunte reeds
en so die rekenaar soort het voor my.
So, dit gaan om te ignoreer my vir 'n bietjie.
Maar as jy net getref Control C 'n paar keer op jou Mac of PC sleutelbord,
uiteindelik moet dit inderdaad beëindig.
En indien nie, sal ons jou wys 'n paar tegnieke voor lank waar jy
kan eintlik geweld programme doodmaak, baie soos in Windows en Mac OS,
indien nodig.
Maar laat ons probeer iets anders.
Kom ons eintlik inkrementeer I. Is dit nog steeds gaan oneindige te wees?
Laat my dit uit te voer.
En nou kan jy soort sien wat gebeur.
Dit is ook, is 'n oneindige lus.
Maar dit is 'n bietjie van 'n truuk vraag.
Is dit gaan om getalle vir ewig te druk?
>> GEHOOR: No.
Spreker 1: No.
Hoekom?
Ek het gehoor 'n paar nos hier.
Someone-- Ja.
GEHOOR: Jy het nie genoeg het stukkies om werklik te gaan.
Spreker 1: Alle reg.
So ek het nie genoeg stukkies om vol te hou.
So, wat gaan gebeur?
Dit is net gaan om te stop?
>> GEHOOR: Op 'n sekere punt dit sal gesluit the--
Spreker 1: Dit sal sluit die lus af, maar hoekom?
Wat gaan gebeur by die einde van sy grense?
Ja?
GEHOOR: Dit sal siklus terug na negatiewe getalle.
Spreker 1: Om negatiewe getalle, of as ons net die behandeling van positiewe,
zero ten minste.
So ja, absoluut.
Onthou dat ons die laaste keer wat dit gesien as jy inkrementeer jou stukkies een te veel keer,
en jy is daar vore oorloop die kapasiteit van jou int
of wat ook al die tipe data is, is jy gaan draai om, waarskynlik,
twee negatiewe getalle.
Of as jy spesifiseer dat jou reeks moet slegs positief wees,
wat jy kan doen nie, maar ons het nog nie gesien dat,
jy kan uiteindelik ten minste terug by nul.
Alhoewel, eintlik ja.
In hierdie geval, negatiewe getalle, in welke geval
die lus gaan beëindig want ek is nie, in werklikheid,
groter as of gelyk aan nul as dit negatief.
>> So, ongelukkig, hoe lank sal ons moet wag?
Nou is ons tot wat, 2 miljoen-ish?
Ons is soos 2000000000, ons gaan hê om te wag
totdat ons kan eintlik sien dit simptoom.
Maar ons kan dit sien 'n bietjie vinniger, maybe-- laat ons kyk of ons kan onderbreek.
Kom op.
Selfs die spyskaarte is stadig verskyn.
Alles reg.
So, sal ons terug na wat kom kort voor lank.
Dit is 'n goeie time-- dit verdoem, hondjies.
>> Dit is 'n goeie tyd vir 'n paar aankondigings.
So, as jy dalk graag om betrokke te raak in YHack,
wat 'n gebeurtenis is om geborg deur ons vriende by Yale.
En, inderdaad, 'n paar van die kursus se TFS by Yale betrokke is met hierdie.
YHack is 'n internasionale hack-a-thon aangebied deur en gehou
aan die Yale, saam te bring 1500 soos minded hackers en skeppende al
oor die hele wêreld.
As dit is van belang is, neem hier 'n blik.
As dit is te kort op die skerm, 'n blik op skyfies vandag se
vir die URL vir yhack.org.
So, ook 'n paar vinnige aankondigings.
So, amptelik afdelings sal begin volgende week hier en New Haven.
Hou in gedagte wat jy sal kry 'n e-pos later hierdie naweek waarskynlik.
Dit neem 'n lang tyd vir CS50 artikel,
gegewe al die mense in die klas en almal rond te beweeg.
En al die Onderrig Fellows ' skedules is ook steeds stol,
maar bly ingeskakel vir 'n e-pos en indien nodig word, kan jy weer-afdeling is daar daarna.
>> Study.cs50.net.
So, selfs al is jy 'n konstante deelnemer by afdelings, besef dat byna al
van die hulpbronne wat ons gebruik in artikels is publiek sigbaar op CS50
Studeer by hierdie URL hier.
So, as jy ooit wil review weer materiaal van artikel, of lees wat voorlê,
of jy kan dit nie maak nie 'n week, besef dat monster skyfies,
en probleme, en definisies, en meer is almal daar so goed.
>> Kantoorure hervat vandag en môre, en Woensdag,
en Donderdag gaan die kursus se webwerf vir die skedule.
>> En ook, nou ' vandag is CS50 Bespreek.
Dus, as en wanneer jy vrae vir het mekaar of vir personeel die kursus se
en is oor die algemeen werk op 'n probleem stel,
besef dat jy dit nie doen nie noodwendig het om te draai na die menslike volgende jou.
As daar niemand is daar, jy kan uit te reik na ons en klasmaats
aanlyn via CS50 Bespreek.
So, dit is 'n bespreking raad vir die kursus,
en besef dat hierdie is dalk die beste
plek om te begin wanneer jy vrae wanneer buite kantoorure
in die besonder.
>> Middagetes sal ook begin hierdie week.
Op vuur en ys [Onhoorbaar] in New Haven.
Neem 'n blik op die kursus se webwerf ten einde te RSVP.
Kom eerste, eerste dien vir daardie.
As jy nie in hierdie week kry nie ons sal hierdie die meeste elke Vrydag doen
gedurende die termyn.
>> OK, en nou 'n woord oor gradering.
Veral as ons die probleem tree stel een, wat hierdie week,
en die probleem sit twee en daarna.
Hoe gaan ons oor die evaluering P stelle en evaluering van die kwaliteit daarvan?
So, dit is vier asse wat ons gebruik in CS50, en hulle is hierdie vier hier.
>> Omvang wat vang op 'n numeriese basis net hoeveel van die P stel
het jy pak.
Dit is rofweg ooreen met inspanning, en dit is ons manier van die opneem
het jy probeer die helfte van die P stel, almal van die P stel.
Dit is 'n maklike een om volmaak tellings op as jy nie, wel,
probeer om elke aspek van die P stel.
So, hou dit in gedagte.
>> Korrektheid is presies dit.
Is jou kode werk as die spesifikasie en as die personeel "monster oplossing
dui daarop dat jou kode moet, in werklikheid, werk.
Check 50, as jy dit nog nie ontmoet Tog, is in P stel een spesifikasie
en sal oor die algemeen gee jou ja / nee antwoorde
om te bepaal of jou kode korrek is.
Ten minste so ver as ons gaan Om te evalueer dit gebaseer op die toetse
dat ons hardloop in daardie program.
>> Ontwerp is baie meer subjektief.
Dit is hoe goed geskryf is jou kode.
En dit is iets wat jy sal beter met verloop van tyd te kry,
en dit is iets wat ons sal bied meer kwalitatiewe terugvoer oor.
En deur die ontwerp ek kan beteken voordat lank jy
kan versoek word in sommige P stel om loopingly iets te doen,
maar om miskien drie, of vier, of vyf geneste lusse vore of geneste terwyl
lusse.
Wat oor die algemeen moet begin te maak jy ineenkrimp
en sou die algemeen beskou as slegte ontwerp.
En jy sal begin om te sien in die klas en uit die klas goeie maniere van dinge doen,
slegte maniere van dinge doen wat kan alles reg wees, maar nie
noodwendig goed ontwerp.
Soos die skryf van 'n opstel.
Jy kan in staat wees om op 'n plaas woorde bladsy wat grammatikaal korrek is,
maar die opstel of die tesis hulle is in net
heeltemal onsamehangende of unpersuasive.
En so wat kan die analoog in die wees geskryf wêreld van slegte of goeie ontwerp.
>> En styl, is ook redelik subjektief.
Maar ten minste verwag ons konsekwentheid.
Dit is hoe mooi is jou kode.
Is dinge mooi ingekeep?
Is jou veranderlikes goed vernoem / Is alle jou hakies en krulhakies
lyn as wat hulle behoort te wees?
Ons doen 'n CS50 styl gids as die probleem stel sal jy wys op.
Diegene wat meer gemaklik is welkom om afwyk van wat
so lank as wat jy self konsekwent.
En dit is ook 'n les ons sal versterk in afdeling.
Dus, as al hierdie was 'n bietjie vinnig, besef dat die P stel en artikels
sal in meer diepte te gaan kort voor lank.
>> Maar oor die algemeen het ons baie min emmers vir CS50.
Tellings is oor die algemeen op 'n skaal van een tot drie of 04:59.
Ons is literally-- en ek kan nie sê dit genoeg in die eerste week.
Drie is goed.
So, selfs al is, ja, drie uit vyf gewoonlik, wiskundig,
dalk 'n 60 persent of soos 'n D minus wees.
Drie is, in werklikheid, 'n goeie.
En, in werklikheid, ons verwag die meeste studente in die klas
om rond te begin die term twees en drieë, en viere.
Waarskynlik nie so baie twintigs.
Nie te veel kinders.
Maar oor die algemeen om te begin in dat lieflike plek in die kurwe
sodat as die tyd vorder, daar is eintlik ruimte vir,
en geleenthede vir die boonste vordering.
So, moet asseblief nie gelyk te stel met drie 60%.
Dit is baie meer abstrakte as dit.
Die formule waarmee ons te bereken grade is soos volg geweeg.
Korrektheid is die moeite werd die meeste.
Ontwerp is 'n bietjie minder werd.
Styl is 'n bietjie minder werd.
En dit algemeen vang die bedrag van die tyd
wat gaan in elke kry van hierdie asse net reg.
Styl is super maklik, moet super vinnig wees,
maar dit is 'n maklike gewoonte te kry lui oor.
Korrektheid te neem jy die meeste van die tyd.
Jaag paar fout mag neem dat die ekstra uur of meer,
en so het die telling uiteindelik vang nie.
En so, nou 'n meer ernstige woord.
Sedert CS50 het die onderskeid, vir 'n beter
of vir slegter, om dalk beter vertroud
met die kwessies van akademiese eerlikheid as die meeste enige ander kursus.
En inderdaad, dit is na my wete dat stuur ons meer studente, ongelukkig,
vir dissiplinêre doeleindes elke jaar as 'n gevolg. So,
in die belang van 'n volledige bekendmaking, laat ons praat kortliks
oor wat gaan aan in CS50, en wat jy kan doen, en wat jy kan bedag wees.
>> So, hier sedert 2007, toe Ek geërf die kursus,
is die aantal Ad Board gevalle.
Ad Raad Harvard se dissiplinêre liggaam, of nou die eer Counsel,
om watter gevalle word verwys wanneer studente iets te doen wat die kursus se
leerplan oorweeg onredelik.
Daar is geen werklike patroon hier, sou ek sê.
Dit wissel oor die jaar maar oor die algemeen
dit is die getal van gevalle wat verwys.
Die aantal studente wat betrokke is?
Dit wissel ook.
Tipies, verlede jaar vir Byvoorbeeld, 29 studente by Harvard
was Ad boord, om so te praat.
29 van hulle huidige studente, twee van hulle voor studente,
wat saam in sommige verkeerde manier.
En dan in terme van die persentasie, is dit gewoonlik sowat 3%
van die klas wat, ongelukkig, maak hierdie soort besluite.
>> So, verlede jaar was dit 3,5% van CS50 se student liggaam
dit was Ad boord, om so te praat.
>> So, wat beteken dit alles beteken?
En wat doen ons nou eintlik?
>> So, vir die volle bekendmaking, ons absoluut, rekenaar wetenskaplikes,
het sagteware gereedskap tot ons beskikking en dit is baie maklik vir ons, in regverdigheid,
klasmaats se ander wat nie kruising hierdie lyne te steek vergelyk
elke voorlegging vanjaar teen elke voorlegging vir die afgelope agt jaar.
Sagteware doen dit.
En uiteindelik is dit menslike oë wat besluit
of om 'n paar verwys saak vir verdere beoordeling,
maar sagteware help beslis.
En dit, eerlik, is die rede waarom ek dink dat ons het sulke groot getalle in CS50.
Dit is nie omdat CS50 studente of CS studente meer
algemeen 'n minder eerlike as enige ander studente,
dit is net ons het die gereedskap en tegnieke
waarmee die eerste pass neem.
>> Maar ons doen hou 'n oog op al hierdie dinge
sowel, weer, in die belang van die erkenning van die werk wat is geplaas
in deur 'n super meerderheid van die klas.
En die beleid van die kursus se op akademiese eerlikheid,
selfs al is dit 'n klomp van die paragrawe lank met 'n klomp van die koeëls
wat hopelik is baie leesbaar, dit regtig nie neer redelik te wees.
En die beste van die duim wat heerskappy Ons bied up in die leerplan
is dit, die essensie van al die werk wat u
aan hierdie kursus moet jou eie wees.
En inderdaad, in byna al daardie gevalle verwys vir dissiplinêre optrede
dit was as gevolg van 'n paar student laat een nag het tipies sy of haar code
oor blatante om 'n klasmaat, wat dan aangeneem
in die geheel of aansienlik daarvan.
>> Maar regtig, dit is OK.
En inderdaad, by die kantoor ure, die strokies papier
jy is oorhandig as jy het deur die kantoor uur verlede week moedig soveel.
Jy is absoluut verwelkom en aangemoedig
probleem stelle bespreek met klasmaats.
Om mekaar te help wanneer struikeling.
Maar oor die algemeen die reël moet wees nie, "wanneer jy vra vir hulp,
kan jy jou kode te wys aan ander, maar jy mag hulle s'n nie te sien. "
So, met ander woorde, as ek sukkel met 'n paar P stel
en ek sit daar in die eetsaal, of in die biblioteek,
of in die klaskamer probeer om 'n paar fout te vind,
Ek kan beslis wys my kode op my skerm
aan die persoon langs vir my seker die personeel,
maar ook 'n klasmaat.
Maar as die oplossing wat my klasmaat bied is, ag,
hier net 'n blik op wat Ek het, dat die lyn kruis.
>> En ek sou waag om te sê dit is oor die algemeen 'n redelike ding vir die meeste mense
om baie maklik sien die lyn van.
En so sien die leerplan vir meer besonderhede.
En nou een van die meer omstrede aspekte
van CS50 sillabus wat ek gedink het ek sou tot in die slot praat hier
is die sogenaamde spyt klousule.
So, hier is al die fynskrif.
Maar in die algemeen het ons gesien oor die afgelope 8 jaar plus
wat, inderdaad, byna almal van CS50 se gevalle van akademiese oneerlikheid
die resultaat van net swak gewees besluitneming laat in die nag.
Die gevolg van stres, die resultaat van 'n gebrek van eet, gebrek aan slaap,
te veel P stelle, te veel deadlines, te veel verpligtinge.
Stres opbou in 'n 02:00, 03:00 AM, 04:00, met 'n sperdatum dreigende.
Die meeste studente in hierdie gevalle het net gemaak slegte besluite
dat hulle baie goed kan spyt die volgende oggend indien nie minute later,
maar tot verlede jaar was daar geen ontlasklep dat hierdie studente kan
eintlik oop om werklik aan te spreek die probleem kop op sonder vrees om
geselflaai van die kollege geheel en al.
>> En, inderdaad, het ons ' hierdie spyt klousule verlede jaar,
wat sê dat indien daar binne 72 uur, drie dae,
kruising sommige lyn in die leerplan voorgeskryf
jy kom uit na een van die kursus se koppe en ons sal 'n chat oor dit.
Daar is nog steeds 'n paar uitkoms, in teenstelling met wat is
is by die teendeel.
Daar nog uitkoms wat is aksie deur die loop,
algemeen Nulstellen n P stel of die neem van 'n ander aksie,
Maar ons sal inderdaad hanteer dit self en nie
verwys dit hoër was die uitslag kan baie meer ernstig wees.
En, inderdaad, om te deel wat gebeur het verlede jaar, in die agt jaar, en nou
nege jaar van die onderrig van hierdie kursus en na geknutsel met verskeie knoppe,
draai verskeie dials oor die afgelope 'n paar jaar op akademiese eerlikheid,
en sien per die data geen oënskynlike impak, selfs van toesprake soos hierdie,
dit was loshande die beste ding ons het pedagogies bekendgestel
in agt jaar saam hierdie lyne in CS50.
>> 19 studente het na vore gekom ingevolge hierdie klousule verlede jaar.
Ons het geen aksie vir sewe van die studente,
bepaling dat hulle onnodig bekommerd.
Hulle het nie, in werklikheid, gekruis 'n lyn, maar dit
was 'n goeie chat om nietemin het.
Ons zeroed 11 van die tellings wat ingedien is.
En in een geval het ons gevra 'n student om 'n probleem te stel nie.
Maar meer dwingende, eerlik, met hierdie 19 geselsies,
wat was die pad meer as wat ek verwag om, elkeen van hulle
10 minute om 'n miskien uur lank, het ook
om 'n aantal kwessies rakende lig familiële kwessies, vriend kwessies,
geestelike gesondheid kwessies dat ons dan besig is,
met die student se seën, inwoner dekaan, of vriende, of enige ander getal
ondersteuning hulpbronne.
Sodat dit was by verre een van die beste gebruik van ons tyd
en een van die beste intervensies.
>> Met wat gesê het, nee, dit het insette oor die koers van die opsporing
van akademiese oneerlikheid meer algemeen.
En durf ek sê, hierdie subset studente verlede jaar
was 'n demografiese dat ons voorheen nooit geïdentifiseer
en het nog nooit in verband met voor.
En so, dit was wonderlike suksesverhale
selfs al is hulle aan die lig gebring in minder as optimale omstandighede.
So, hou dit in gedagte as jy maak, miskien,
sommige arm besluit jouself laat in die nag,
dat daar 'n beroep so lank as die student in daardie situasie
besit en na vore te kom sodat ons kan het dat die soort van chat en dit te hanteer
in 'n manier wat opvoedkundige, en dan ons kan dit agter ons die volgende dag.
>> So sonder meer, neem die rand af van hierdie gesprek,
die rede waarom die hondjies is up is net om die ys vir 'n oomblik te breek.
En ongelukkig, hulle is almal slaap, maar wat veronderstel was om hier te gebeur
was almal veronderstel was om ontsag en soort van ontspan
nadat baie swaar gesprek.
Maar blykbaar het ek die hondjies te slaap.
Maar as jy gaan na CS50 se webwerf slash hondjies,
jy kan hulle die hele dag lank te kyk.
Veral miskien 02:00, of 03:00, of 04:00 in die nag
om 'n bietjie stress verligting daar te sien.
So dit is streep hondjies.
Alles reg.
Was dit nie pret?
OK.
So, terug na 'n paar rekenaar wetenskap, as ek kan.
>> So, onthou dat die laaste keer het ons begin soek nie net by die hoof, wat
was die standaard-funksie, die wanneer groen vlag gekliek ekwivalent,
maar ons het ook begin kortliks skryf sommige van ons eie funksies.
En tot dusver nie een van hierdie funksies het veral groot of vleis nie.
Jy sal kry in die groter funksies waarskynlik, P stel 2, P stel 3,
beslis P stel 4 en verder.
Nou die meeste van jou programme, Indien nie almal van hulle, seker vir P
stel 1 kan heeltemal gedoen in die belangrikste.
As jou program is net vyf lyne, 10 lyne,
selfs 20 lyne lank, perfek redelike om dit te skryf
al in die belangrikste en nie bemoeilik te oor jou kode nie, maar wat ons vandag doen
en verder probeer ook stel 'n paar goeie ontwerp tegnieke
sodat as jou kode kry meer ingewikkeld en die probleme
jy wil om op te los te kry harder en meer interessant wat jy het, soort van,
die gereedskap in jou toolbox waarmee om goeie oplossings vir diegene ontwerp.
>> So, laat ons neem 'n vinnige blik op hierdie program uit my verlede week, wat
was funksies nul dot C. En agterkom dat, heel eenvoudig,
dit lyk soos hierdie met twee funksies, hoof en die naam druk.
En dink terug of dalk reverse engineering vandag
wat was die motivering vir die instelling 'n funksie in lyn 28 genoem word,
druk naam?
Of wat dit 'n voorbeeld van in was terme van 'n beginsel of afhaal,
As jy wil.
Sommige geruise.
Wat?
>> Ja so Funksionele Ontbinding is 'n soort van die fancy manier om te sê,
ontbind jou program in sy samestellende dele
en gebruik dan die dele om 'n hele vergader.
So, ook dit is net 'n soort van 'n mondvol reeds
maar dit is dalk selfs 'n beter voorbeeld van iets
net genoem abstraksie.
Reg?
Onttrekking gaan een wees van die herhalende temas in CS50
en ook rekenaarwetenskap meer algemeen, aangesien dit
'n tegniek waarmee jy kan oplos probleme meer effektief te omdat jy
kan oplossings meer skryf intuïtief en in 'n manier dat skale
en is verstaanbaar deur ander mense.
Wat doen ek daarmee?
>> So, waarskynlik dit is baie meer leesbare om te kyk na 'n program soos hierdie,
super kort al is dit.
Wanneer jy sien op die lyn 22 dat daar ' 'n funksie genoem, die naam druk.
Daardie naam alleen sê wat dit doen.
Daardie funksie neem blykbaar insette tussen die hakies,
en blykbaar iets doen, vermoedelik druk die naam.
En so, selfs al het ons absoluut kan hê
gedoen wat ons het 'n week gelede, wat was net neem hierdie werklike reël van die kode,
ontslae te raak van hierdie, en kry ontslae te raak van al hierdie saam
Ons soort van onttrek weg die idee van die druk van 'n naam.
Ek gee nie om as jy die gebruik van gedrukte def.
Ek gee nie om as jy 'n persent S en 'n backslash N. Hierdie
is ongelooflik arcane besonderhede.
Wat ek wel omgee as 'n programmeerder is druk van 'n naam.
En so, watter beter manier om dit te doen as deur 'n funksie, die naam gedrukte roeping?
En so, dit was een van die motiverings vir iets soos dit te doen.
Maak die kode meer leesbaar, meer herbruikbare, en ook self beskrywende.
Nou, laat ons neem 'n blik by 'n ander voorbeeld,
wat funksies een wat ons gehad het oor hier.
>> So, hierdie een is miskien selfs meer dwingende, want in hierdie geval,
Ek wil nie net kry 'n int.
Ek wil 'n positiewe int kry.
En dit blyk 'n positiewe te kry int jy 'n klomp van die informatieverzameling doen.
Reg?
Dit is nie 'n eenvoudige een lyn noem soos naam gedrukte was,
wat is weliswaar minder oortuigend.
>> Om 'n positiewe int te kry, logically-- laat my blaai terug na hierdie weg te steek.
Wat het jy om te doen?
Soos al die gereedskap wat ons op die oomblik is
dinge soos gedrukte def van Standard Biblioteek en ook van CS50 biblioteek
ons het Kry Int, en kry Float, Kry Long Long, kry String,
maar die enigste een, Duitse, nou is Kry Int.
Dus, as die enigste instrument wat jy het in jou tool box is Kry Int,
hoe kan ons gaan om dit positief int te kry?
>> GEHOOR: Skep 'n log en kyk of die insette wat hulle het
was positief is of nie.
>> Spreker 1: Perfect.
Presies.
Nog 'n instrument wat ons in ons toolbox van 'n week of twee gelede
is net die herhaling konstruk.
En so, ja, as ons gebruik 'n rukkie lus, of 'n doen terwyl loop, of 'n vore
lus ons kon waarskynlik wegkom met enige van diegene wat in een of ander vorm.
Ons kan die idee van get implementeer positiewe int deur net die gebruik Kry Int,
en dan hou net noem dit weer en hou neul die gebruiker
totdat hy of sy eintlik gee ons wat ons wil hê.
>> En so nou is dit onttrekking van die proses
om 'n positiewe int in 'n funksie genoem
Kry Positiewe Int is 'n bietjie meer dwingende omdat kyk na hierdie.
Dit is soos '10 plus lyne van kode wat
betrokke in om 'n positiewe int, en ek het nie regtig omgee hoe jy dit doen.
Al wat ek omgee is dat jy kan dit doen, en so ek het
versteek al hierdie besonderhede agter 'n funksie genoem Kry Positiewe int dat
Trouens, doen dit terwyl loop.
>> En kyk verlede week vir die sintaksis daar, maar dit is net verklaar N,
en dit druk die opdrag aan die gebruiker.
Dit is dan Kry Int en dan is dit tjeks hierdie toestand weer en weer,
en weer totdat die gebruiker saam.
>> So nou, 'n paar gesonde verstand tjeks.
Vir diegene dalk vertroud met 'n paar programme,
hoekom N verklaar, waarom doen Ek skep N buite die doen terwyl loop?
Hoekom is dit op die lyn 29 en nie op soos 33, byvoorbeeld.
>> GEHOOR: Want wanneer jy verklaar dat dit buite, is dit soort
meer, die groter scope--
>> Spreker 1: Goed.
>> GEHOOR: --and as jy verklaar dit binne die lus, [onhoorbaar]
omdat dit nie weet nie.
Spreker 1: Presies.
As ek kan simplify-- dit is 'n kwessie van omvang.
En omvang verwys na die konteks wat 'n veranderlike bestaan ​​of is bruikbaar.
En die mooi reël hier is dat algemeen wanneer jy verklaar of te skep
'n veranderlike kan jy net gebruik dit binne van die naaste omhels krullerige draadjies.
So wat beteken dit?
As ek, in plaas daarvan, ongedaan te maak en gaan saam met hierdie iets wat 'n bietjie eenvoudiger voel.
Reg?
>> Line 32 lyk net skoner nou vir my.
Ek doen beide dinge op een keer en dan toeken
die regterhand na die linkerhand.
Die probleem nou gebaseer op dat definisie van omvang
is dat N gebruik kan word in lyne 31 en 32 in hierdie lus,
Maar waar deur daardie definisie kan dit nie gebruik word nie?
In lyn wat?
Ja.
>> GEHOOR: 35.
>> Spreker 1: 35.
Beslis nie 35.
En ook waar anders?
GEHOOR: 34.
Spreker 1: Selfs 34 is problematies, want dit is
buite die krullerige draadjies.
En so in werklikheid, laat ons sien wat gebeur.
Reg?
Dit kan 'n bietjie lyk intuïtief of dalk nie,
maar laat ons sien wat die samesteller het om te sê wanneer
ons gaan in vandag se bron gids.
Maak funksie een.
O, my God.
Wel, ek uiteindelik klaar dat, deur die manier.
Alles reg.
En wat is die probleem hier?
Baie arcane om na te kyk.
Maar hier is wat ek typed-- maak funksie een.
Hier is wat maak geïnduseerde, wat eintlik
die gebruik van die samesteller klang met 'n paar van daardie vlae
dat ons weer sal sien voor lank.
En weer, altyd kyk by die eerste fout,
want dit mag dalk net 'n waterval betekenisloos effek op ander lyne.
>> So wat dit beteken, is dat die probleem is in die funksie 1.C.
Dit is op die lyn 32.
En dit is op kolom of karakter, 13.
So wanneer jou teks editor wat kan help om te identifiseer waar die probleem is.
So as ek blaai up, wat lyn 32?
Dit is inderdaad hierdie een dit is reeds uitgelig
reg here-- ongebruikte veranderlike n.
Maar dit is nie ongebruikte.
Ek gebruik dit.
Maar die samesteller se verwar, want dit bestaan ​​slegs binne hierdie omvang.
En so kan ek nie hier gebruik nie.
Ek kan nie hier gebruik nie.
En die samesteller, dus nie eens om dat ek probeer.
Dit lyk ongebruikte te wees binne sy werklike omvang.
>> So kan ons die omvang verbreed deur te doen presies wat ons begin with-- int n.
En selfs al is dit nie lyk elegant, miskien,
en ons neem 'n ekstra lyn hier, nou is dit in omvang oral.
So kom ons probeer weer.
So maak funksie een.
Nice.
As ek dan nou as ek hardloop funksie een, kom ons gee dit negatiewe 10,
negatiewe 1, 0, 1, en dit inderdaad werk.
>> So is daar 'n ander oplossing hier.
Jy weet wat?
Wat as ek regtig is stoei met hierdie?
Ek weet nie waar die N veronderstel is om te gaan nie.
Jy weet wat?
Ek gaan net om dit te sit al die manier aan die bokant van my lêer hier.
Wat sou dit doen, dink jy?
Ja?
>> GEHOOR: [onhoorbaar].
Spreker 1: Ja.
So ek het dit globale gemaak, om so te praat.
As jy 'n veranderlike wat buite al jou funksies wat toegelaat word,
en die kode moet saam, en N sal nou toeganklik wees nie net in get
positiewe int, maar ook in main-- wat is 'n bietjie lastig, want daar is
reeds 'n N in die belangrikste, sodat meer oor wat in net 'n moment--
maar dit sou oorweeg slegte ontwerp.
Alles reg.
As jy hê om plek te iets soos, ag, ek sal
net sit dit hier omdat die kode blyk te stel
is oor die algemeen nie die beste praktyk.
Eerder jy wil om te kies die kleinste moontlike omvang
vir u veranderlikes, wat sou beteken gaan met ons aanvanklike ontwerp, wat
is reg hier.
>> Nou as 'n eenkant, as jy gehad het nie 'n identies-naam veranderlike hier
die manier c sal hanteer this-- al is dit nie sal gebeur te often--
is dat dit nog steeds heeltemal fyn hier.
Maar hierdie definisie van N in lyn 22 sal die globale een skaduwee.
So hierdie een sal binne werk hoof, en die globale een
sal eintlik van toepassing is wanneer jy in kry positiewe int maar meer oor dit
'n ander tyd, maar net vir diegene nuuskierig.
>> So in kort, ons dit los hier.
Nou laat terg uitmekaar twee ander stukke Voordat ons kyk na 'n laaste reël van die kode
in hierdie program.
Kry positiewe int.
Op die linkerkant van sy woord is die woord int.
Wat beteken dit dui dink jy?
Tot dusver het ons meestal gesien nietig.
Ja?
>> GEHOOR: Dis die tipe veranderlike wat jy vra oor.
>> Spreker 1: Ja Dis die tipe, laat my nie sê veranderlike, maar die tipe waarde
dat ek vra weer vir.
En inderdaad, dit is intuïtief hier, hopelik.
Reg?
As jy wil 'n te kry positiewe int, wat is dit wat jy
wil die function-- soos ons vrywilligers van verlede week
om jou hand terug 'n stuk papier met 'n int op dit?
En so het ons bepaal dat die sogenaamde terugkeer tipe van hierdie funksie
is te kry positiewe int.
As ons nie wil hê dit moet enigiets, jy leemte sê.
As jy dit wil hê om terug te keer 'n string, jy sê string.
As jy dit wil hê om terug te keer 'n vlot, sê jy float.
Maar die enigste een wat hier van toepassing logies, want ek gebruik get int,
selfs al is die beperking van dit wat ek tot positiewe waardes, is om 'n int terugkeer.
>> So omgekeerd, wat beteken dit dat daar 'n leemte in hakies?
Wat doen die hakies algemeen te definieer?
Ja?
>> GEHOOR: Dit beteken die funksie se nie eintlik om nie.
>> Spreker 1: Dit beteken die funksie se nie eintlik om wat?
>> GEHOOR: 'n toevoer.
>> Spreker 1: 'n toevoer, wat ook al.
So inderdaad, as hakies Hier kan jy spesifiseer leemte,
wat net beteken dat ek nie wil hê enige insette.
Ek sal gaan met die probleem myself.
En inderdaad, het jy nie hoef te vertel kry positiewe int enigiets.
Jy sê net, kry positiewe int, en dat funksie sal afgaan en sy ding doen.
>> Maar daar was 'n bietjie truuk Ek het speel hier hele tyd
om seker te maak hierdie kode saamstel.
Let daarop dat int-- positiewe kry int void-- is op die lyn 27.
Maar vir sommige oënskynlik vreemde rede dit is ook hier op die lyn 16.
En net vir 'n goeie maatreël Ek sal herhaal hierdie so dit is perfek identies.
En ek het gesê prototipe met 'n bietjie een-line kommentaar.
Wat gebeur as ek dit verwyder, en nou tik maak funksie 1, betree.
Oeps.
Wag 'n minuut.
Waar is my blad?
Huh?
Staan by.
Maak funksie 1.
Daar gaan ons.
OK.
Was dit nie behoorlik gestoor.
So, ek dink daar is 'n bietjie fout hier waar ek is nie
sien die blad naam op die oomblik.
So, wat is hier aan die gang?
Implisiete verklaring van funksie kry positiewe int is ongeldig in C99.
So weer verwarrend.
So, wat is hierdie 'n aanduiding van?
Wel, dit blyk dat C is redelik dom.
Wel, dit is die ontwikkeling taal, of eerder die samesteller is.
Dit weet net wat jy het geleer nie, en dit is net
gaan iets weet as jy dit voorheen onderrig is.
Met ander woorde, in belangrikste op die oomblik, ek is
probeer om 'n funksie te roep genoem te kry positiewe int.
Maar die samesteller gaan nie om te sien dat kry positiewe int
bestaan ​​totdat lyn 26.
En ja, wat die samesteller doen is net foute so gou as dit kry om te reël 17,
sê implisiete verklaring te kry positiewe int, wat
is net 'n fancy manier om te sê, ek doen nie weet wat kry positiewe int nog.
>> Ander tale soos Java en Python en Ruby kan vorentoe te kyk.
C nie.
En so het die manier waarop ons los dit is een van twee maniere.
Óf die een, as die probleem is dat te kry positiewe int nog nie voorheen gesien het nie,
Wel, laat ek skuif dit net om die top.
Dit sou hierdie probleem op te los.
Maar oor die algemeen, is dit beskou beter tegniek
jou belangrikste funksie sit by die heel top so dat 'n mens lees jou kode
weet wat die program doen, omdat belangrikste is nie al begrawe
die pad aan die onderkant of in die middel.
Dit is op die heel boonste.
Sodat voel nie ideaal.
En jy kan eintlik kry in situasies waar
As een funksie oproepe 'n ander, wat 'n ander beroep,
jy kan kry in 'n kwessie waar nie kan gaan bo die ander, logies.
Dit is net nie moontlik nie.
>> En so het die manier om te werk om hierdie is net te neem
handtekening van die funksie, so om speak-- die eerste reël waar dit declared--
en net kopieer, plak dit op die top, maar nie met krullerige braces--
net met 'n kommapunt.
Dit is soos 'n klein wenk van wat aan die kom is.
En in die feit, al hierdie tyd wanneer ons het dinge soos die standaard io.h gesien
en cs50.h, insgelyks, in daardie dot h lêers daar ander prototipes.
En ons sal sien wat voor lank.
>> So in kort, as jy 'n program in 'n lêer met verskeie funksies
Behalwe belangrikste, jy amper wil altyd te verklaar
net by wyse van hul eerste lyn, gevolg deur 'n kommapunt,
by die top van die lêer.
Dit was 'n baie op een slag.
Enige vrae?
Alles reg.
>> So laat ons beweeg op dan iets soos hoes.
Oh.
Hoe pas.
Alles reg.
Hoes.
So hier is 'n c implementering van 'n program
ons het die ander dag in Nuuts wat baie eenvoudig net
sê hoes, hoes, hoes.
Alles reg.
En iemand het gesê 'n paar dae gelede dat daar
'n manier van die skoonmaak van die kode up reeds.
Alles reg?
Sodra jy kopieer en plak waarskynlik slegte ontwerp.
Ten minste een keer kry ons vier of vyf of 20 hoes, voel dit slegte praktyk.
Ons hou net kopieer, plak.
Wat is die oplossing voor die hand liggend om die skoonmaak van hierdie program word?
>> GEHOOR: Loop.
>> Spreker 1: Ja.
So gebruik 'n lus.
En ons kan 'n vir-lus te gebruik, 'n rukkie lus, enige aantal benaderings.
En inderdaad, dit is wat ons doen in die weergawe wat hier.
Ek het in plaas herskryf dit in die weergawe van cough.c een
net hoes binne 'n for-lus wees.
Alle reg, maar daar is 'n geleentheid nou soort van begin
om dit 'n bietjie meer soos ontwerp die les wat ons geleer 'n oomblik gelede
wat is this-- veronderstel dat ek wou om 'n funksie genoem hoes skep,
Kom ons kyk vir 'n oomblik wat dit gaan lyk.
So as ek wil iets hoes, ek moet net
te druk f gebruik binne die funksie.
En inderdaad is ek.
En in die feit, dit alles tyd, enige tyd wat jy is
druk om iets te die skerm, 'n programmeerder
sou noem dat 'n newe-effek.
Dit is vir my nie oorhandig terug iemand 'n waarde.
Dit is vir my 'n aksie te neem wat kan wees visueel voor die hand liggend.
Maar hierdie funksie te hoes, beteken dit terug enigiets wat gebaseer is op die eerste lyn?
Nee, want sy terugkeer tipe is nietig, wat beteken net
dit is nie die uitreiking van my niks terug.
Dit mag dalk iets te doen visueel, maar dit is nie vir my oorhandig
terug 'n stuk papier soos verlede week.
>> Is dit enige insette nodig?
Geen.
En so is dit hier leemte ook.
So ook dit is 'n soort van oor-ingenieurswese hierdie probleem.
Reg?
Ek het die program meer gemaak kompleks, meer reëls van die kode,
Ek het dit nie gemaak meer funksionele, maar dit
sou 'n stepping stone wees, miskien, vir 'n breër
konteks met meer ingewikkeld kode.
Maar wat van hierdie?
Wat het ek done-- net skrams by hierdie sonder om na die kommentaar
by die top van die file-- wat het Ek hier fundamenteel gedoen met my hoes
implementering wat anders is?
Ja, in die rug?
>> GEHOOR: Maak dit sodat jy kan het 'n karakter uit te skakel.
Spreker 1: Ja.
So dit voel soort van mooi.
Reg?
Dit is soos die toevoeging van 'n funksie om jou program of jou funksie, in hierdie geval.
Dit gee nog steeds niks.
Dit mag dalk 'n visuele newe-effek het, want dit is 'n beroep druk f.
Maar nou het ek parametrized die funksie, wat
beteken dat ek verskaf het geneem insette van die tipe int en noem dit n,
maar ek kan dit iets wat ek wil noem.
In werklikheid is, kan dit net wees keer om nog meer eksplisiete wees.
En dan het ek kon net dit te verander hier.
Maar die punt is dat dit is hoe ek skep 'n funksie wat insette neem.
En as jy onthou daarby deur miskien aanlyn in een
van die loop-throughs, die vierde en laaste hoes byvoorbeeld
jy hier sien ek het veralgemeen my kode further-- soort abstrakte
dit verder.
Soos hoes en nies, beide is oor soos om te sê iets of maak
'n soort van klank.
Save sou wees om die ooreenstemmende Scratch blok.
En so wat ek gedoen het in hierdie weergawe, wat ons kan net blik op,
is hoes is net soos om te sê, [COUGH], hoes, en intussen, nies is
soos om te sê, [ACHOO].
En so ek het veralgemeen die implementering van die
nou implementering Hierdie generiese funksie,
sê, wat is interessant vir doeleindes vandag se
net omdat dit nog steeds het nie 'n soort terugkeer.
Maar hoeveel insette het dit?
GEHOOR: Twee.
Spreker 1: Twee.
En so as jy wil neem twee argumente,
net hulle te skei met 'n komma.
En as jy wil dan noem daardie funksie,
sien dat jy net roep sê, kwotasie, unquote,
vir die eerste argument, algemene n, vir die tweede argument.
So weer, ons het nou net die boustene sodat ons kan eintlik
implementeer sommige van ons eie funksies.
Alles reg.
Enige vrae oor hierdie?
>> So nou, laat ons skil terug 'n laag indien wel.
En die doel te bereik, uiteindelik, is die probleem stel volgende week se
gaan op cryptogrophy-- die kuns van skommeling inligting.
En spesifiek die inligting sal jy versleutelen
gaan teks.
En so dat die soort uitnodigings Die vraag vandag soos goed,
wat aangaan onder die enjinkap met teks buite ASCII van week nul,
En hoe kan ons eintlik begin om dit te manipuleer?
So hier is die naam Zamyla se.
En in die teks, kan dit wees ingevoer in soos die get string funksie.
En begin nou, wanneer jy sien 'n string soos this-- Z-A-M-Y-L-A--
begin dink dit asof elke van die karakters in 'n boks van sy
eie.
En inderdaad, in 'n week of so is tyd, elk van hierdie bokse
gaan baie spesifiek verteenwoordig 'n blok memory-- 'n hap van die geheue.
So elkeen van hierdie briewe, Uiteindelik sal 8 stukkies verteenwoordig.
En ons sal eintlik sien wat gaan op onder die enjinkap in my rekenaar.
>> Maar vir nie dit voldoende net om te kyk na Zamyla
deur hierdie lens, waardeur elk van hierdie briewe is in sy eie boks.
En mooi genoeg in C kan ons toegang elk van hierdie bokse direk.
So as jy wil hê dat die eerste kry letter van haar naam, super maklik in C.
As jy wil die laaste kry brief, super maklik asook
met 'n stukkie van die nuwe sintaksis.
>> So ek gaan om voort te gaan in CS50 IDE en maak die tou nul dot C.
En in hierdie voorbeeld hier, is daar 'n paar nuwe dinge aan die gang.
So eerste in die lyn 19, het ons gesien hierdie before-- get string.
So net so 'n vinnige gesonde verstand tjek, as iemand verbaal kan bied up
verduideliking van 'n leek se wat gaan aan in die lyn 19.
Soos hierdie net vertaal in English dat 'n kamermaat nie in CS50
kan verstaan.
Ja.
>> GEHOOR: Het die toevoer van die gebruiker 'n string en stoor dit in 'n veranderlike s.
Spreker 1: Goed.
Die toevoer van die gebruiker 'n string en bêre dit in 'n veranderlike s.
Dit is 'n groot.
So op die regterkant kant, bel ons kry string.
Dit gee 'n waarde dit het nie kry wat
van regs na links hand kant in 'n veranderlike genaamd s wat
ontwerp om 'n string te stoor.
Presies.
>> So nou line 22, per die kommentaar in lyn 21,
natuurlik druk wat string een karakter per lyn.
Maar hoe?
So die eerste van alles, inisialiseer ons ek tot 0.
En dan hoe kry ons om die einde van die naam Zamyla se?
Wel, aan die einde van Naam Zamyla se, kon ek
hand te tik in die laaste teken van haar naam of ander manier, of die getal van dit.
Reg?
As ons gaan terug here-- Z-A-M-L-- Y-L-A-- so ek kon tik.
Wat is die indeks van Laaste brief Zamyla se?
As dit is 0-- praat soos 'n programmer-- 0, 1, 2, 3, 4, 5,
Ek heard-- so inderdaad, die laaste brief in die naam van Zamyla se is die sesde,
maar as ons tel van 0, dit gaan nommer 5 wees.
So hou dit in gedagte hier.
>> Dit blyk daar is 'n funksie in C genoem StrLen en terug in die dag
en tot vandag nog, 'n baie programmeerders
kies om name te sinchroniseer vir hul funksies wat klink soos die woorde
hulle probeer om te sê.
So StrLen is string lengte.
En so wat sou string lengte van S terugkeer wanneer Zamyla is die insette?
>> GEHOOR: Five.
>> Spreker 1: Z-A-M-Y-L. Ses.
Reg?
Wat is die lengte van die naam Zamyla se?
Reg?
En net in die werklikheid, ses letters.
Reg?
En so wat beteken dit vir ons lus?
Ons gaan om te gaan van 0 tot ses, wat
gaan ons vyf iterasies gee.
Wat doen ons op elke iterasie?
Wel, persent C, iemand raai die ander dag,
beteken 'n plekhouer vir wat?
>> GEHOOR: Char.
Spreker 1: Net 'n kar.
So 'n enkele character-- nie verskeie karakters soos 'n string.
En dan hier is die nuwe reël wat ons het uit te druk.
En dan hier is die nuwe sintaksis.
As jy wil om uit te druk die i-de karakter in die string S, om so te praat,
jy kan net sê die Naam van die string S,
en dan oop vierkante bracket, en dan gesluit vierkante bracket, met 'n i
die middel.
En dit is soort van mooi in daardie dit soort van soos 'n vierkant lyk
net soos die blokkies in wat Zamyla se karakters bestaan ​​op die foto is daar.
>> So as ek dit eintlik loop nou, laat ons sien wat gebeur.
Maak string 0 dot streep string 0, en dan is ek
gaan tik naam Zamyla se.
Daar is geen vinnige, want ek het nie gebruik gedrukte f, maar dit is goed.
Ek weet presies wat om te doen nie.
En inderdaad, dit druk uit Zamyla se naam, een per lyn.
>> Nou laat 'n bietjie roekeloos.
Veronderstel dat ek nie geweet het nie oor StrLen en ek het gedink,
Alle reg, niemand gaan 'n het noem groter as soos 50 karakters.
Kom ons gaan voort en heropstel hierdie en tik dit, en dan tik in Zamyla
weer.
Logies, wat is die program gaan probeer om druk?
Z-A-M-Y-L-A dan soos 45 onbekend grepe van die geheue.
En inderdaad, sal ons terug te kom hierdie idee van die geheue.
Maar net logies, as Naam Zamyla se is dit 'n lang,
soos per die prentjie hier, wat ons sê
is hou die druk, hou die druk, hou druk, hou die druk, hou die druk,
al die pad na die 50 karakter, wat wie weet wat gaan gebeur.
So laat eintlik 'n blik.
Kom ons tik in Zamyla.
Interessant.
Ons het gelukkig.
Net 'n hele klomp van die wit spasie.
Oh.
Daar is 'n funky karakter.
Dit lyk amper soos 'n vreemde vraag merk, maar daar is die naam Zamyla se.
Kom ons kry regtig roekeloos.
Hoe gaan ons uit te druk 500 blokke in die onbekende?
Kom ons gaan voort en maak hierdie so goed en dan weer hardloop.
En die volle screen nie, want laat ons ons nodig het om meer ruimte te sien.
Zamyla.
Het weer gelukkig.
>> Durf ons kry meer roekelose?
Kom ons kry meer roekeloos.
50000 karakters.
Dit is die meeste sekerlik nie 'n goeie idee.
Alles reg.
Maak string 0.
Dit sal ons laaste demo wees.
Zamyla.
Ugh.
OK.
So my geheue is regtig leë nou, wat eintlik soort gerieflik.
Wat ek probeer om aan- kry alles reg.
En nou is ek net gaan roekelose kry.
500,000.
Make-- full-screen laat dit.
Betree.
Zamyla.
Daar gaan ons.
Ek het geen idee wat dit is nie, maar dit klink sleg.
Alles reg.
En in die feit, gou, as jy onder die gelukkige paar in kantoorure
en in die probleem stel een, het jy baie goed kan dit teëkom.
Segmentering skuld eintlik nie het 'n goed-gedefinieerde betekenis.
Dit beteken 'n soort van fout met betrekking tot 'n segment van die geheue.
En in leketaal, beteken dit dat ons aangeraak
memory-- ons gebruik RAM in my rekenaar dat ek nie toegang tot sou gehad het.
En dit is wat beide kragtige en ook gevaarlik
oor C is dat jy eintlik het onbeperkte toegang
om die geheel van die geheue van jou program of grepe of RAM, meer spesifiek.
>> So selfs al naam Zamyla se is net ses karakters lank,
Ek kan nog steeds oral te gaan in die geheue wat ek wil.
En as 'n eenkant, as jy het ooit 'n artikel te lees
oor die jare oor 'n paar bediener of 'n program
kry gekraak of gekap dis geneem voordeel van iets
bekend as 'n buffer oorloop ontgin dat ons sal eintlik
praat oor 'n paar weke, dit is algemeen verwys na een of ander manier tricking
'n rekenaar in goed gaan buite die grense van die geheue
dat dit behoort te hê, en vind iets sappige
in daardie memory-- n wagwoord dalk 'n manier
ontduiking van sommige reeksnommer kyk, of net oor die algemeen in staat
om te mislei die rekenaar uitvoer kode wat nie bedoel is.
Maar laat ons terug te kom na werklikheid vir net 'n oomblik
waar hierdie program was geïmplementeer met StrLen,
en stel een ding hier.
Wat is nuut onder hierdie top drie lyne?
>> So string dot h.
Dit blyk daar is hierdie biblioteek genoem String Dot H, of die string Biblioteek,
wie header lêer, om so te praat, is string dot h wat gee my
toegang tot hierdie funksie StrLen.
As ek dit laat, die samesteller is gaan op my skreeu in een of ander vorm.
Maar weet jy wat?
Nou laat kry regtig genuanseerde.
In lyn 22, daar is iets soort van inefficient-- swak ontwerp,
arguably-- oor hierdie lyn van die kode.
Dink terug aan hoe vir-loop geïmplementeer
en watter stappe weer gebeur en weer en again-- die inisialisering,
die toestand, die kode wat kry uitgevoer word, dan is die inkrement
of die verandering, sal die toestand, dan die kode, dan is die verandering, dan
die toestand, dan die kode, dan is die verandering, en so meer.
So, wat dalk 'n bietjie te wees kommerwekkende of swak hier gedoen?
Ja, in blou.
GEHOOR: StrLen is genoem baie, baie keer.
Spreker 1: Ja.
So StrLen genoem baie keer, maar wat is
die lengte van die naam Zamyla se die eerste keer die lus voer?
>> GEHOOR: Ses.
>> Spreker 1: Ses.
Wel, wat is die lengte van haar naam die tweede keer die kode voer?
>> GEHOOR: Ses.
>> Spreker 1: Alle reg.
Dit is nog steeds ses.
Reg?
Naam Zarla se het nie verander, selfs as ek soek
slegs deel van die letters in haar naam.
En so het die feit dat ek effektief hierdie vraag, wat is
die lengte van Zamyla, wat is die lengte van Zamyla, wat is die lengte van Zamyla,
ses afsonderlike tye, of sewe die aand, is net dom,
want dit is onveranderlike die antwoord.
En so wat ek kon eintlik doen is this-- in string een
Ek het 'n effens beter weergawe hier.
There-- whoops-- string twee Ek het 'n effens beter weergawe waarin
Ek doen this-- plaas van net initializing i tot 0, het ek ook met 'n komma
verklaar 'n tweede veranderlike genoem n-- Ek hoef nie te int weer sê.
Ek moet nie, in werklikheid.
Maar Ek sê n.
En dan inisialiseer I n te die StrLen van N, so wat nou
Hoeveel keer kom StrLen kry uitgevoer in totaal?
Net een keer.
En so is dit wat ons bedoel vroeër oor 'n beter ontwerp.
Eintlik keer jou kode korrek is, terug te gaan en te dink deur middel,
gebruik ek so min geheue of as n paar sekondes
of millisekondes van die rekenaar tyd as moontlik om 'n probleem te implementeer?
En ek gaan om te blaai en net noem
dat daar hierdie melding van nul in hierdie weergawe,
maar ons sal terug kom voor lank.
Want vir nou, laat ons 'n blik na waar dit gaan om ons te lei.
So een, dit blyk dat nou dat ons die vermoë
om te kyk na die individuele karakters, kan ons iets hefboom
van week 0 daardie arcane was en soort van oninteressant by die tyd.
Maar nou, en veral wanneer ons kry kriptografie in 'n week,
dit gaan mooi kragtig te wees.
Dit blyk dat met 'n paar data types-- SY en dryf
en karakters en snare en ander things-- sommige van hulle
kan baie maklik omskep word in 'n ander.
>> Byvoorbeeld, wanneer ons gepraat oor ASCII geruime tyd ago-- hier is
die hoofletters A deur M dot, dot,
dot-- ons gesê dat daar is 'n kartering tussen hierdie briewe en getalle.
En in die feit, dit waar hou vir kleinletters as well.
Kleine letters is 97, die hoofstad 'n 65.
En daar is 'n aantal in ASCII, wat net die kartering
stelsel vir al die ander briewe.
So wat beteken dit?
Wel, ek gaan om voort te gaan en oop tot ware vinnig iets genoem
ASCII 0, waarvan die meeste is kommentaar.
En weer aanlyn jy kan altyd oogopslag deur die kommentaar.
>> En neem 'n blik wat dit gaan doen nie.
So dit is 'n hooffunksie.
Ek het hard-gekodeerde die getalle net vir nou, want ek weet wat ek doen.
Ek weet wat ek wil hier te sien.
En ek het ek geïnisialiseer tot 65.
En ek tel up deur 26 letters in totaal.
En wat gaan ek druk 'n lyn op 'n tyd
as jy nie kan interpreteer hierdie uitgelig lyn?
Wat kry gedruk?
Ja.
>> GEHOOR: Is jy gaan tot op die letter te druk wat
ooreenstem met die kaart van die brief waarde en getal waarde?
Spreker 1: Presies.
Ek gaan die brief te druk ooreenstem met die getal waarde,
en omgekeerd, soos volg.
Wel, dit is, iemand vroeër gesê het, is net 'n plekhouer vir 'n kar.
Dit is nog steeds.
Dit, natuurlik, is 'n plekhouer vir 'n int-- nie 'n nuwe lyn.
En nou sien, my eerste waarde wat Ek steek in vir daardie plekhouer
is nie net I. ek sê, hakies, char I,
wat die hakies char is vertel die samesteller, behandel ek
nie as wat dit is, wat is 'n nommer.
Behandel dit as 'n werklike karakter.
Terwyl die tweede waarde ek steek in-- I-- moet net 'n getal wees.
>> So as ek dit program-- stel so dit is te maak ASCII 0,
dot streep ASCII 0-- ek kry net hierdie handige klein grafiek wat
wys my al die moontlike afbeeldings sonder om dit te dink
deur of dit uitwerk op my eie.
En ek is ook uit te druk, kennis van die kleinletters,
omdat 'n paar lyne later, het ek ook druk uit hierdie kartering
sowel, wat net om sê dat as jy verstaan
wat gaan aan onder die kap, kan jy
outomaties omskep heen en weer.
En in die feit, indien enige van julle ooit in graad skool het
of gehoor oor iemand mitiese neem 'n nota
en om dit aan sy of haar vriendin in die klas,
maar jy roer die briewe soos A word B,
en B word C, of ​​iets meer ingewikkeld as dit, wel,
hoe sou jy te werk gaan uitvoering van hierdie as 'n kind?
Wel, jy moet net soort van weet A word B, B raak C,
maar wiskundig wat daardie kind doen?
Wat het jy die toevoeging van elke letter?
Effektief 1.
>> So wanneer jy 'n verandering aan B, dis soort van soos die verandering van 65-66,
wat wiskundig beteken net voeg 1.
En so as jy was om te implementeer wat min misleidende tegniek
vir jou onderwyser in die kode, jy mag dit net presies doen
deur die toevoeging van 'n enkele brief saam.
So kort voor lank, ons is gaan ons sien hoe
kan neem voordeel van daardie eintlik werklik scramble ontleden en
inligting.
In die tussentyd, weet dat ons het begin om 'n paar ander biblioteke stel
here-- die string vandag een.
En 'n baie nuttige webwerf hopelik sal jy vind
genoem reference.cs50.net, wat die personeel het saam te stel,
sodat as jy wil kyk hoe StrLen werke,
jy kan begin tik die naam van die funksie se
Klik daar StrLen, en dan 'n minder gemaklik verduideliking
gaan verskyn.
Of as jy wil hê dat die amptelike Linux-gebaseerde verduideliking,
kan jy meer gemaklik klik bo regs, en dit
sal dieselfde inligting aan te bied, maar in meer komplekse terme.
Dit is 'n nuttige hulpbron te eintlik weet wat alles doen nie.
>> Volgende keer gaan ons 'n blik op Ovaltine
en meer, en onsself om die wêreld van die kriptografie.
Voor die tyd, sal ons sien jy later hierdie week.
En nou, Colton Ogden.
Sien julle op Woensdag.
>> [Speel van musiek]
>> Spreker 1: Wat die [Oproep] doen jy?
>> Spreker 1: ek eet my nagereg?
Hoe weet jy dit eet?
Met jou hande?
>> [Speel van musiek]