>> [Musik spiller]
>> SPEAKER 1: Dette er CS50 og dette er starten på uge to.
Så lad os dykke lige ind i noget der er fejlbehæftet, så at sige.
Så herovre er CS50 IDE og jeg har trukket op på forhånd dette screen-- pokkers
det.
Spoiler alert.
Okay.
Jeg har trukket op denne skærm her, som har et meget simpelt program.
Hvis vi rulle ned, de fleste dette er bare kommentarer,
men her i linje 13 gennem 17 har vi et program.
>> Det er syntaktisk gyldigt, hvilket betyder, at hvis Jeg kompilere det, det vil kompilere og køre,
men det er fejlbehæftet.
Dette program hævder i kommentarerne op toppen, at det skal printe 10 stjerner,
men det gør det ikke.
Og baseret på din oplevelse, eller snart at være erfaring med C,
kan du logisk skelne hvorfor dette er i virkeligheden, buggy?
Ja?
PUBLIKUM: Det går fra nul til 10.
Det er 11 iterationer.
SPEAKER 1: Ja.
Så går det fra nul op gennem og lig med 10,
hvilket naturligvis er 11 iterationer.
Så det vil print, ja, 11 stjerner.
Så datalogi konvention i de fleste programmeringssprog
er faktisk blot at begynde at tælle ved nul,
men tælle op til, men ikke gennem værdi, som du rent faktisk bekymrer sig om.
>> Nu, dette er en ting, tager lidt at vænne sig til
og endda Scratch, udformet som det er for ikke programmører eller ikke computer
forskere og for børn stort set, er designet til at have
du begynde at tælle generelt ved en.
Og det er fint.
Du kan absolut begynde at tælle på en, hvis det er mere behageligt.
Og tælle op til og gennem 10, men du vil indse især i denne uge
og ud over det bare så mange ting i programmering
antage, at 0 er den første ciffer, som du tælle,
at du kommer til at finde det lettere bare for at komme ind i denne vane med udgangspunkt
fra nul og tælle op til værdien du interesserer dig lige nu fra
Hent gå.
>> Så har det fast, at.
Vi har ændret mindre end eller lig med bare mindre end.
Lad os tage et kig på et andet eksempel her.
>> Så dette program også hævder i sin kommentarer op toppen, at det skal udskrives
ti stjerner, men det gør ikke.
Hvad er fejlen her?
>> Så Hvad-- og undskyld, lad os være klar.
10 stjerner.
En pr linje, men det gør ikke.
Så i virkeligheden, lad mig gå videre og kompilere denne ene, fordi det er en smule mindre
rydde baseret på denne beskrivelse.
Lad mig gå ind i vores kilde mappe.
Gøre buggy én prik skråstreg, buggy én.
OK, jeg kan se 11 stjerner, som er stadig problematisk,
men de er også alle i én linje.
Hvad er problemet her?
Ja.
PUBLIKUM: [uhørligt].
SPEAKER 1: Ja.
Så dette er en underfundighed, som du kan genkalde mig at gøre kort omtale af.
Selvom alt ser smuk, og det er pænt indrykket,
og den slags ser Scratch-lignende i denne linje 16 og 17 er,
ja, indrykket under dette for-løkke.
Det er uden betydning.
Computeren ikke kender eller se hvide rum.
Hvide rum er bare for os mennesker, stilistisk.
Computeren kender, når du har krøllede parenteser, som ville, ja,
løse dette problem.
>> Så hvis vi faktisk gik ind og udtrykkeligt sat i disse krøllede parenteser
der ville løse dette problem ved at gør det klart for compileren
at jeg faktisk ønsker at udføre to linjer kode igen,
og igen og igen.
Men hvad er den grundlæggende forklaring?
Højre?
Vi har ikke strengt brug krøllede seler hele tiden,
selvom det er nok bedst praksis for at komme ind i denne vane alligevel
selvom det tilføjer to tegn til din kode. hvorfor?
>> PUBLIKUM: [uhørligt]?
SPEAKER 1: Ja, så er en anden løsning helt.
Højre?
Især hvis ved første øjekast du ikke virkelig værdsætte, hvad der foregår.
Nå, helt sikkert vi kunne bare gøre to ting på én gang
og blot undgå problemet helt.
Og det er fint, men nu, for nutidens formål, hvad
er forklaringen på fejlen?
Hvorfor var alle de stjerner på én linje?
Ja?
>> PUBLIKUM: Det ser ud til, at hvis du har en linje kode,
du kan gøre det uden dem.
SPEAKER 1: Præcis.
Dette er blot et menneske konvention.
Folk indser, at det er en lidt irriterende eller kedelige
at nødt til at sætte krøllede parenteser alle af tiden, hvis alt du ønsker at gøre
er udføre en linje kode.
Så besluttede mennesker nogle tid siden, at det er fint.
Hvis du ønsker at lægge alle dine løkke på bare, at én linje som dette,
det er fint med en enkelt semikolon i slutningen.
Men du kan kun gøre én sådan linje uden de krøllede parenteser.
>> Så når CS50 stil guide som vil henvise dig til,
vil du se, at der generelt det er god vane
at komme ind i dette, indtil du er ganske behageligt forvilde
fra disse former for konventioner og gør dine egne ting.
Så længe du er selv konsekvent.
Og vi vil tale mere om style en lille smule senere i dag.
>> Så lad mig åbne et andet program.
Selvfølgelig bør vi fastsætte, at 10 så godt.
Lad mig gå videre og skrive en reel hurtig program, som jeg vil kalde,
lad os sige, loop dot C. Så loop dot C. Og i loop dot C jeg har tænkt mig at have,
omfatter standard I / O dot H int main tomrum.
Og lad os nu bare gøre, ja, en løkke.
Så 4 int jeg får nul.
I er mindre end f.eks 50.
Jeg plus, plus.
Og derefter i her lad os gå videre og gøre udskrive F.
Og så er jeg ønsker at udskrive I og en ny linje, semikolon.
>> Og dette skulle udskrive alle de tal fra nul op til 50?
Et par hoved nikker.
Et par nos.
Hvad er fejlen allerede?
Hvad er den nemme fejl gjorde jeg?
Ja.
>> PUBLIKUM: [uhørligt].
SPEAKER 1: Ja.
Så selvom det ser som dette er, hvad jeg agter,
minde om, at jeg også er bare en ASCII-tegn.
>> Så hvis jeg siger, print "I."
Det er bogstaveligt talt går at udskrive I. Så hvis jeg
ønsker at plug-in en pladsholder værdi, jeg faktisk nødt til at gøre dette
og derefter plug-i værdi af I dynamisk.
Ellers er jeg bare gå til få 50 i'er på skærmen.
>> Så lad mig gå videre og gør denne løkke, køre den,
og faktisk har vi alle vejen op gennem 49.
Og hvis jeg går tilbage i tid, jeg ser tallet nul ved begyndelsen.
>> Nå, hvad hvis jeg slags skrue op?
Hvad hvis jeg gør dette?
Bare fordi jeg ikke tænker.
Hvad er dette program.
Når re kompileret og køre, vil gøre logisk?
>> PUBLIKUM: Ingenting.
>> SPEAKER 1: Ingenting.
Hvorfor det?
>> PUBLIKUM: Jeg er designet til nul.
Så betingelsen er falsk.
SPEAKER 1: Ja, præcis.
Al koden er korrekt, syntaktisk.
Dette vil kompilere, det kode vil køre, men det er ikke
vil gøre noget nyttigt fordi jeg initialisere jeg til nul.
Vi derefter kontrollere, er jeg mere end 50?
Det er klart, nej, det er ikke.
Så løkken aldrig udfører overhovedet.
>> Hvad hvis vi gør noget lidt mere hensynsløs?
Så hvad hvis vi bryder int jeg får nul.
Og lad mig bruge imens loop, som var en anden tilstand.
Og mens jeg siger, mens jeg er større end eller lig med nul, og derefter i her jeg
gå videre og gemme filen, gør løkke.
Og jeg er ved at køre den.
Hvad skal jeg se denne tid med en while-løkke?
Ja.
>> PUBLIKUM: En uendelig løkke?
>> SPEAKER 1: En uendelig løkke?
Ja, og hvorfor?
PUBLIKUM: Fordi det er altid nul.
SPEAKER 1: Ja.
Så bliver jeg initialiseres som nul.
Selvfølgelig har jeg er altid større end eller lig med 0 som følge heraf.
Så jeg bare at se uendeligt.
Og nu har det kommet op en gang eller to gange for at kursets hoveder.
Hvad sker der, når du har en uendelig løkke?
>> PUBLIKUM: Kontrol C.
SPEAKER 1: Ja.
Så Kontrol C i sidste ende vil reagere.
Desværre har vi udskrives Millioner og atter millioner af nuller allerede
og så computeren har slags fik foran mig.
Så går det til at ignorere mig for en lille smule.
Men hvis du bare slå Kontrol C et par gange på din Mac eller pc-tastatur,
til sidst skal det, ja, opsige.
Og hvis ikke, vil vi vise dig nogle teknikker inden længe, ​​hvor du
kan faktisk magt dræbe programmer, meget gerne i Windows og Mac OS,
hvis nødvendigt.
Men lad os prøve noget andet.
Lad os faktisk tilvækst I. Er dette stadig vil være uendelig?
Lad mig køre dette.
Og nu kan du slags se, hvad der sker.
Dette er også er en uendelig løkke.
Men det er lidt af et trick spørgsmål.
Er det kommer til at udskrive tal for evigt?
>> PUBLIKUM: Nej.
SPEAKER 1: Nej.
Hvorfor?
Jeg hørte nogle nos herovre.
Someone-- Ja.
PUBLIKUM: Du har ikke nok bits til virkelig holde ud.
SPEAKER 1: Okay.
Så jeg har ikke nok bits til at holde ud.
Så, hvad der kommer til at ske?
Det er bare kommer til at stoppe?
>> PUBLIKUM: På et tidspunkt det vil lukke til--
SPEAKER 1: Det vil lukke løkken ned, men hvorfor?
Hvad vil der ske på allersidst i sine grænser?
Ja?
PUBLIKUM: Det vil cykle tilbage til negative tal.
SPEAKER 1: At negative tal, eller hvis vi bare behandle positive,
nul i det mindste.
Så ja, absolut.
Husk på, at vi så sidste gang, at hvis du tilvækst dine bits en alt for mange gange,
og dig der forgrunden overløb kapaciteten af ​​din int
eller hvad den datatype er, du er kommer til at ombryde omkring, sandsynligvis,
to negative tal.
Eller hvis du har angive, at din rækkevidde bør kun være positiv,
som du kan gøre, men vi ikke har set det endnu,
du måske ender i det mindste tilbage på nul.
Selv om der faktisk ja.
I dette tilfælde negative tal, i hvilket tilfælde
løkken kommer til at afslutte fordi jeg er ikke i virkeligheden,
større end eller lig med nul, hvis det er negativt.
>> Så desværre, hvordan længe vil vi vente?
Lige nu er vi op til hvad, 2 millioner-ish?
Vi er som 2 milliarder, Vi er nødt til at vente
indtil vi rent faktisk kan se dette symptom.
Men vi kan se det lidt hurtigere, maybe-- lad os se om vi kan afbryde.
Kom nu.
Selv menuerne dukker langsomt.
Okay.
Så vil vi komme tilbage til det inden længe.
Det er en god time-- fanden, hvalpe.
>> Det er et godt tidspunkt for nogle annonceringer.
Så hvis du kan lide at engagere sig i YHack,
som er en begivenhed at være sponsoreret af vores venner på Yale.
Og faktisk nogle af kursets TF'er på Yale er involveret i dette.
YHack er en international hack-a-thon hosted af og holdt
på Yale, der samler 1.500 ligesindede hackere og annoncer alle
over hele verden.
Hvis dette er af interesse, tage et kig her.
Hvis dette er alt for kortvarigt på skærm, tage et kig på dagens dias
til webadressen for yhack.org.
Så også et par hurtige kort.
Så officielt sektioner vil begynde næste uge både her og New Haven.
Husk på, du vil være at få en e-mail senere denne weekend mest sandsynlige.
Det tager lang tid til CS50 til afsnittet
givet alle mennesker i klasse og alle flytte rundt.
Og alle Undervisning Fellows ' skemaer er også stadig størkne,
men stay tuned for en e-mail, og hvis behov være, kan du re-sektion der efter.
>> Study.cs50.net.
Så selv hvis du er en konstant deltager på sektioner, indse, at næsten alle
af de ressourcer, vi bruger i sektioner er offentligt tilgængelige på CS50
Studere på denne URL her.
Så hvis du ville nogensinde lyst til at re bedømmelse materiale fra afsnit, eller læse videre,
eller du kan ikke gøre det nogle uge, indse, at prøve dias,
og problemer, og definitioner, og flere er alle der.
>> Kontortid genoptage dag, og i morgen, og onsdag,
og torsdag kontrollere kursets hjemmeside for tidsplanen.
>> Og også, lancerer nu i dag er CS50 Diskuter.
Så hvis og når du har spørgsmål til hinanden eller for kurset personale,
og er generelt arbejder på nogle problemer sæt,
indse, at du ikke nødvendigvis nødt til at henvende sig til den menneskelige næste dig.
Hvis der er ingen der, kan du nå ud til os og klassekammerater
online ved CS50 Diskuter.
Så dette er en diskussion bord for kurset,
og indse, at dette er måske det bedste
sted at starte, når du har spørgsmål, når uden for kontortid
i særdeleshed.
>> Frokoster vil starte op i denne uge også.
Hos Fire and Ice [Uhørligt] i New Haven.
Tag et kig på kursets hjemmeside for at RSVP.
Komme først, først tjene for det.
Hvis du ikke får i denne uge vi vil gøre disse mest hver fredag
løbetid.
>> OK, og nu et ord om sortering.
Især da vi træder problem sæt en, som er ude i denne uge,
og problemet sæt to og derefter.
Hvordan vi går om at evaluere P sæt og evaluering af kvaliteten heraf?
Så det er fire akser, som vi bruger i CS50, og de er disse fire her.
>> Anvendelsesområde, som fanger på en numerisk basis, hvor meget af P sæt
har du tackle.
Det er nogenlunde svarer til indsats, og det er vores måde at fange
har du forsøger halvdelen af ​​P sæt, alle P sæt.
Dette er en nem en til at få perfekt scores på hvis du gør, ja,
prøve hver aspekt af P sæt.
Så holder det i tankerne.
>> Korrekthed er nøjagtigt.
Har din kode arbejde som specifikationen og da stabe 'prøveopløsning
tyder på, at din kode bør faktisk arbejde.
Check 50, hvis du ikke har mødt den endnu, er i P indstille en specifikation
og vil generelt give dig ja / nej svar
om, hvorvidt din kode er korrekt.
Mindst så vidt vi skal hen at evaluere det baseret på tests
at vi kører inden for programmet.
>> Design er meget mere subjektive.
Dette er, hvor godt skrevet, er din kode.
Og det er noget, får du bedre til over tid,
og det er noget, som vi vil give mere kvalitativ feedback på.
Og ved design jeg måske betyde inden længe du
kunne blive fristet i nogle P indstillet til at gøre noget loopingly,
men at have måske tre eller fire, eller fem indlejrede forgrunden sløjfer eller indlejret mens
loops.
Det bør generelt begynde at gøre dig krybe
og vil generelt være betragtes som dårlig design.
Og du vil begynde at se i klassen og ud af klassen gode måder at gøre tingene på,
dårlige måder at gøre ting, som kunne alle være korrekte, men ikke
nødvendigvis godt designet.
Ligesom at skrive et essay.
Du kan være i stand til at sætte ord på en side, der er grammatisk korrekt,
men essay eller afhandling, de er i, er bare
helt usammenhængende eller overbevisende.
Og så der kan være analogen i skriftlig verden af ​​dårlige eller gode design.
>> Og stil, også er temmelig subjektive.
Men i det mindste vi forventer konsistens.
Dette er hvor smuk er din kode.
Er tingene pænt indrykket?
Er dine variabler godt navngivet / Er alle af dine parenteser og krøllede parenteser
linie som de burde være?
Vi har en CS50 stil vejledning som problemet sæt vil pege dig på.
De mere komfortabel er velkommen til at afvige fra det
så længe du er selv konsekvent.
Og også dette er en lektion vi vil styrke i afsnit.
Så hvis alt dette var lidt hurtig, indser P sæt og sektioner
vil gå mere i dybden inden længe.
>> Men generelt har vi meget få skovle til CS50.
Resultaterne er generelt på en skala af en til tre, eller 04:59.
Vi er literally-- og jeg kan ikke sige det nok i den første uge.
Tre er god.
Så selvom, ja, tre ud fem normalt, matematisk,
kunne være en 60 procent eller som en D minus.
Tre er faktisk godt.
Og i virkeligheden, vi forventer de fleste elever i klassen
at starte udtrykket omkring toere og treere og firere.
Sandsynligvis ikke så mange femmere.
Ikke alt for mange dem.
Men generelt at starte i at sweet spot i kurven
således at som tiden skrider frem, der er faktisk plads til,
og muligheder for øvre progression.
Så skal du ikke sætte lighedstegn mellem tre med 60%.
Det er meget mere abstrakt end det.
Formlen som beregner vi kvaliteter vægtes som følger.
Korrekthed er værd mest.
Design er lidt mindre værd.
Stil er lidt mindre værd.
Og det generelt indfanger den tid,
der går ind i at få hver af disse akser lige højre.
Style er super nemt, bør være super hurtig,
men det er en nem vane at få doven om.
Korrekthed kan tage du det meste af tiden.
Jagter ned nogle fejl måske tage den ekstra time eller mere,
og så, scoring sidste ende indfanger det.
Og ja, nu er en mere alvorlig ord.
Da CS50 har skelnen, for bedre
eller værre, at være måske bedre bekendtskab
med spørgsmål om akademisk ærlighed end de fleste andre kursus.
Og ja, det er at min viden, der vi sender flere studerende, desværre,
af disciplinære formål hvert år som følge. Så
af hensyn til fuld videregivelse, lad os tale kort
om, hvad der foregår i CS50, og hvad du kan gøre, og hvad du kan være opmærksom på.
>> Så her siden 2007, hvor Jeg arvede kurset,
er antallet af Ad Board sager.
Ad Board er Harvards disciplinære krop, eller nu Honor Counsel,
til hvilke tilfælde der er nævnt, når studerende gør noget, at kursets
pensum anser urimeligt.
Der er ingen reel mønster her, vil jeg sige.
Det svinger over år, men generelt
Dette er antallet af sager, der er nævnt.
Antallet af studerende der er involveret?
Det også varierer.
Typisk sidste år for Eksempelvis 29 studerende på Harvard
var Ad Boarded, så at sige.
29 af dem nuværende studerende, to af dem forud studerende,
der var samarbejde på en eller anden uheldig måde.
Og derefter i form af procentdel, er det normalt omkring 3%
af klassen, som desværre gør disse former for beslutninger.
>> Så sidste år var 3,5% af CS50 s studerende
der var Ad Boarded, så at sige.
>> Så hvad betyder alt dette betyde?
Og hvad gør vi rent faktisk gør?
>> Så for fuld offentliggørelse, vi absolut, som dataloger,
har softwareværktøjer til vores rådighed og det er meget let for os, i retfærdighed,
at andre klassekammerater, der ikke krydser disse linier til at krydse sammenligne
hvert indsendelse i år mod enhver indsendelse til de seneste otte år.
Software gør dette.
Og i sidste ende er det menneskers øjne, der beslutter
om der skal henvise nogle noget for yderligere jury,
men softwaren sikkert hjælper.
Og dette, helt ærligt, er grunden til, at jeg tror, vi har så store tal i CS50.
Det er ikke fordi CS50 studerende eller CS studerende mere
generelt er mindre ærlig end nogen andre studerende,
det er bare vi har den værktøjer og teknikker
med til at tage denne første passage.
>> Men vi gør holde øje på alle disse ting
samt igen af ​​hensyn til anerkender det arbejde, der bliver lagt
i en super flertal af klassen.
Og kurset politik på akademisk ærlighed,
selvom det er en flok af stk lang med en masse af kugler
som er forhåbentlig ganske læsbart, det virkelig koges ned til at være rimelig.
Og den bedste tommelfingerregel, at vi tilbyde op inden pensum
er det, essensen af alt arbejde, som du
underkaste sig dette kursus skal være din egen.
Og ja, i næsten alle de nævnte tilfælde for disciplinære foranstaltninger
Det var på grund af nogle studerende sent en nat typisk vendte hans eller hendes kode
løbet direkte til en klassekammerat, som derefter blev vedtaget den
i sin helhed eller betydeligt deraf.
>> Men virkelig, det er OK.
Og ja, på kontoret timer, de sedler
du er blevet udleveret, hvis du kom med kontor timer i sidste uge opfordrer så meget.
Du er absolut velkommen og opmuntret
for at diskutere problemet sæt med klassekammerater.
For at hjælpe hinanden, når snuble.
Men generelt den tommelfingerregel bør være dette, "når du beder om hjælp,
du kan vise din kode til andre, men du kan ikke se deres. "
Så med andre ord, hvis jeg kæmper med nogle P sæt
og jeg sidder der i spisesal, eller i biblioteket,
eller i klasseværelset forsøger at finde nogle fejl,
Jeg kan helt sikkert vise min kode på min skærm
til den person, der sidder ved siden til mig, helt sikkert personalet,
men også en klassekammerat.
Men hvis den løsning, min klassekammerat tilbyder er, åh,
her bare tage et kig på, hvad Jeg gjorde, som krydser linjen.
>> Og jeg ville turde sige, det er generelt en rimelig ting for de fleste mennesker
til meget nemt få øje på linje.
Og så se pensum for flere detaljer.
Og nu en af ​​de mere kontroversielle aspekter
af CS50 pensum, som jeg troede, jeg ville tale til afslutningsvis her
er den såkaldte beklagelse klausul.
Så her er alt det med småt.
Men generelt har vi set løbet af de sidste 8 plus år
at, ja, næsten alle CS50 s tilfælde af eksamenssnyd
har været resultatet af lige fattige beslutningstagning sent om natten.
Resultatet af stress, resultatet på grund af manglende spise, mangel på søvn,
for mange P-apparater, alt for mange deadlines, for mange forpligtelser.
Stress opbygning i en 2:00, 03:00 AM, 04:00, med en deadline truende.
De fleste elever i disse tilfælde har lige lavet dårlige beslutninger
at de kan meget vel beklager Næste morgen hvis ikke minutter senere,
men indtil sidste år var der ingen frigivelse ventil, disse studerende kunne
faktisk åbne op til faktisk behandle problem hoved på uden frygt for at blive
startet fra college helt.
>> Og, ja, vi introducerede denne beklagelse klausul sidste år,
som siger, at hvis der inden 72 timer, tre dage,
krydse nogle linje foreskrevet i pensum
du kommer frem til en af ​​kursets hoveder, og vi vil få en snak om det.
Der er stadig være nogle udfald, i modsætning til, hvad der er
blevet rapporteret for det modsatte.
Der er stadig nogle resultat, som er handlingsrettet af kurset,
generelt nulstilling en P sæt eller tage en anden handling,
men vi vil, ja, håndtere det selv og ikke
henvise det højere var resultatet kan være meget mere alvorlige.
Og, ja, til at dele, hvad der skete sidste år, i de otte år, og nu
ni år, for at undervise dette kursus og efter fifle med forskellige knapper,
dreje forskellige skiver i det forløbne flere år på akademisk ærlighed,
og se pr dataene ikke tilsyneladende indvirkning, selv af taler som denne,
dette var hænder ned den bedste ting Vi har introduceret pædagogisk
i otte år sammen disse linjer i CS50.
>> 19 studerende kom frem under denne klausul sidste år.
Vi tog ingen handling for syv af de studerende,
fastslå, at de var unødigt bekymret.
De havde faktisk ikke, krydset en linje, men det
var en god snak at have alligevel.
Vi nulstilles 11 af de scoringer der blev indsendt.
Og i et tilfælde vi stillede et studerende til at gøre et problem indstillet.
Men mere overbevisende, ærligt, med disse 19 chats,
som var måde mere, end jeg forventes at have, hver af dem
10 minutter til måske en time lange, bragte også
at tænde en række spørgsmål vedrørende familiære problemer, ven spørgsmål,
psykiske problemer at vi så i indgreb,
med den studerendes velsignelse, bosiddende dekan eller venner, eller et andet nummer
af support ressourcer.
Så at dette var langt en af de bedste anvendelser af vor tid
og en af ​​de bedste interventioner.
>> Med det sagt, nej det havde indgang på opklaringsprocenten
af akademisk uredelighed mere generelt.
Og jeg tør sige, denne delmængde af studerende sidste år
var en demografisk, at vi tidligere aldrig identificeret før
og havde aldrig forbundet med før.
Og så, disse var vidunderlige succeshistorier
selv om de blev bragt frem i lyset i mindre end optimale forhold.
Så holde dette i tankerne som du gør, måske,
nogle fattige beslutning selv sent om natten,
at der er brug så længe som den studerende i denne situation
ejer op og kommer frem, så vi kan have den slags chat og beskæftige sig med det
på en måde, der er pædagogisk, og derefter vi kan sætte det bag os den næste dag.
>> Så uden videre, tage brodden af ​​denne samtale,
grunden er hvalpene op sige bare for at bryde isen et øjeblik.
Og desværre, de er alle søvn, men hvad skulle ske her
var alle skulle til ærefrygt og art slappe
efter at meget tunge samtale.
Men tilsyneladende jeg sætte hvalpene til at sove.
Men hvis du går til CS50 s hjemmeside skråstreg hvalpe,
du kan se dem hele dagen lang.
Især måske 2:00 eller 03:00, eller 4:00 om natten
at se lidt afstresning der.
Så det er skråstreg hvalpe.
Okay.
Var det ikke sjovt?
OK.
Så tilbage til nogle computer videnskab, hvis jeg må.
>> Så minde om, at sidste gang vi startede ser ikke blot på main, som
var standard funktion, når grønt flag klikkede tilsvarende,
men vi har også begyndte kort skrive nogle af vores egne funktioner.
Og således har ingen af ​​disse funktioner har været særligt store eller kødfulde.
Du får i dem større funktioner formentlig, P sæt 2, P sæt 3,
absolut P sæt 4 og fremefter.
Lige nu er de fleste af dine programmer, hvis ikke alle af dem, i hvert fald for P
sæt 1 kan helt gøres i main.
Hvis dit program er kun fem linjer, 10 linjer,
endda 20 linjer lang, perfekt rimeligt at skrive det
alle i main og ikke at over komplicere din kode, men hvad vi laver i dag
og senere forsøger også at indføre nogle gode design teknikker
således at så din kode bliver mere kompliceret og da problemerne
du ønsker at løse får sværere og mere interessant du har, en slags,
værktøjerne i din værktøjskasse, som at designe gode løsninger til dem.
>> Så lad os tage et hurtigt kig tilbage på dette program fra min sidste uge, som
var funktioner nul dot C og bemærke, at ganske enkelt
det ser sådan ud med to funktioner, vigtigste og udskrive navn.
Og tænker tilbage eller måske reverse engineering i dag,
hvad var motivationen for at indføre en funktion på linje 28 kaldes,
Print navn?
Eller hvad var dette et eksempel på i form af et princip eller takeaway,
hvis du ville.
Nogle mumler.
Hvad?
>> Ja så Funktionel nedbrydning er lidt af den fancy måde at sige,
nedbrydes dit program i dens bestanddele
og derefter bruge de dele at samle en helhed.
Så det er også bare lidt af en mundfuld allerede
men det er måske endda en bedre eksempel på noget
lige ringet abstraktion.
Højre?
Abstraktion bliver en af de tilbagevendende temaer i CS50
og også datalogi mere generelt, da det er
en teknik, som du kan løse problemer mere effektivt, fordi du
kan skrive løsninger mere intuitivt og på en måde, der skalerer
og er forståeligt af andre mennesker.
Hvad mener jeg med det?
>> Så velsagtens det er meget mere læsbar at se på et program som dette,
super kort, selvom det er.
Når du ser på linje 22, at der er en funktion kaldes, print navn.
Det navn alene siger, hvad den gør.
Denne funktion tilsyneladende tager input mellem dens parenteser,
og tilsyneladende gør noget, formentlig udskriver navnet.
Og så, selvom vi absolut kunne have
gjort, hvad vi gjorde for en uge siden, hvilket var bare tage denne faktiske linje kode,
slippe af med denne, og få slip for denne alle sammen,
vi slags abstraheret væk begrebet udskrive et navn.
Jeg er ligeglad, hvis du bruger print def.
Jeg er ligeglad, hvis du har en procent S og en omvendt skråstreg N. Disse
er utroligt mystiske detaljer.
Hvad jeg ligeglad som en programmør udskriver et navn.
Og ja, hvad bedre måde at gøre det end ved at kalde en funktion, print navn?
Og ja, der var en af ​​de motivationer for at gøre noget som dette.
Gøre koden mere læselig, mere genbruges, og også selvstændig beskrivende.
Lad os nu tage et kig på et andet eksempel,
som var funktioner én, som vi havde herovre.
>> Så denne ene er måske endnu mere overbevisende, fordi i dette tilfælde,
Jeg ønsker ikke at bare få en int.
Jeg ønsker at få en positiv int.
Og det viser sig at få en positiv int du skal gøre en masse benarbejde.
Højre?
Det er ikke en simpel én linje kalder ligesom print navn var,
hvilket er ganske vist mindre overbevisende.
>> For at få en positiv int, logically-- lad mig rulle ned for at skjule dette.
Hvad har du at gøre?
Ligesom alle de værktøjer, vi har i øjeblikket er
ting som print def fra Standard Bibliotek og også fra CS50 bibliotek
vi har Få Int, og få Float, Få Lang Lang, får String,
men den eneste, germane, lige nu er Get Int.
Så hvis det eneste værktøj, du har i dit værktøjskassen er Get Int,
hvordan vi går om at gennemføre det for at få positiv int?
>> PUBLIKUM: Opret en log og tjek om de input, de gav
var positiv eller ej.
>> SPEAKER 1: Perfekt.
Præcis.
Et andet værktøj, vi har i vores værktøjskasse fra en uge eller to siden
er bare looping konstruktion.
Og så, ja, hvis vi bruger et stykke loop, eller en gør while-løkke, eller en forgrunden
loop vi kunne sandsynligvis komme væk med en af ​​de i en eller anden form.
Vi kan implementere begrebet get positiv int ved bare at bruge Get Int,
og så bare holde kalde det igen og holde chikane brugeren
indtil han eller hun faktisk giver os, hvad vi ønsker.
>> Og så nu, dette indvinding af processen
for at få en positiv int i en funktion kaldet
Få Positiv Int er lidt mere overbevisende, fordi se på dette.
Disse er ligesom 10 plus linjer kode, der
er involveret i at få en positiv int, og jeg ved ikke rigtig pleje, hvordan du gør det.
Alt, hvad jeg ligeglad er, at du kan gøre det, og så har jeg
skjulte alle disse detaljer bag et funktion kaldet Få Positive int det,
ja, har denne gøre, mens løkke.
>> Og se i sidste uge for syntaksen der, men det bare erklærer N,
og det udskriver det instruktion til brugeren.
Det opfordrer Få Int og derefter kontrollerer denne betingelse igen og igen,
og igen, indtil brugeren samarbejder.
>> Så nu, et par sundhedstjek.
For dem måske kender med nogle programmering,
hvorfor er N erklærede, hvorfor jeg opretter N uden for gøre, mens løkken?
Hvorfor er det på linje 29 og ikke på den måde 33, for eksempel.
>> PUBLIKUM: Fordi når du erklære den udenfor, den slags
mere, jo større scope--
>> SPEAKER 1: God.
>> PUBLIKUM: DET-- hvis du erklærer det inde i løkken, [uhørligt]
fordi den ikke kender til det.
SPEAKER 1: Præcis.
Hvis jeg kan simplify-- det er et spørgsmål om omfanget.
Og omfang refererer til den sammenhæng, som en variabel eksisterer eller er anvendeligt.
Og dejligt tommelfingerregel er, at generelt, når du erklærer eller oprette
en variabel, du kan kun bruge det inde af de nærmeste omfavne krøllede parenteser.
Så hvad betyder det?
Hvis jeg i stedet fortryde denne og gå med noget, der føles lidt enklere.
Højre?
>> Linje 32 bare ser renere for mig nu.
Jeg gør begge ting på gang og derefter tildele
højre til venstre.
Problemet er nu baseret på denne definition af anvendelsesområdet
er, at N kan anvendes i linjer 31 og 32 inde i denne sløjfe,
men hvor ved denne definition kan det ikke bruges?
På linje hvad?
Ja.
>> PUBLIKUM: 35.
>> SPEAKER 1: 35.
Bestemt ikke 35.
Og også hvor ellers?
PUBLIKUM: 34.
SPEAKER 1: Selv 34 er problematisk, fordi det er
uden for krøllede parenteser.
Og så i virkeligheden, så lad os se hvad der sker.
Højre?
Dette kan virke lidt intuitiv eller måske ikke,
men lad os se, hvad compiler har at sige, når
vi går ind i dagens kilde mappe.
Make-funktion én.
Åh gud.
Nå, jeg endelig færdig at, ved den måde.
Okay.
Og hvad er problemet her?
Meget mystiske at se på.
Men her er hvad jeg typed-- gøre funktionen én.
Her er, hvad gør induceret, som faktisk er
ved hjælp af compiler klang med nogle af disse flag
at vi vil se igen inden længe.
Og igen, ser altid ved den første fejl,
fordi det måske bare have en cascading meningsløs effekt på andre linjer.
>> Så hvad dette betyder, at den Problemet er i funktion 1.c.
Det er på linje 32.
Og det er i kolonne eller karakter, 13.
Så når din tekst editor, der kan hjælpe dig med at identificere, hvor problemet er.
Så hvis jeg rulle op, hvad der er linie 32?
Det er faktisk denne ene der er allerede fremhævet
lige her-- ubrugt variabel n.
Men det er ikke ubrugt.
Jeg bruger det.
Men compiler er forvirret, fordi det eksisterer kun inde i dette omfang.
Og så jeg kan ikke bruge det her.
Jeg kan ikke bruge det her.
Og compiler derfor ikke engang passe, at jeg prøver.
Det synes at være ubrugt inden for sit faktiske omfang.
>> Så vi kan udvide anvendelsesområdet ved at gøre præcis, hvad vi startede med-- int n.
Og selv om det ikke ser så elegant, måske,
og vi tager en ekstra linie her, nu er det i omfang overalt.
Så lad os prøve igen.
Så gør funktionen én.
Nice.
Og nu hvis jeg hvis jeg løber funktion en, lad os give det negative 10,
negative 1, 0, 1, og det faktisk virker.
>> Så der er en anden løsning her.
Du ved hvad?
Hvad hvis jeg virkelig er brydning med dette?
Jeg ved ikke, hvor den n er meningen at gå.
Du ved hvad?
Jeg bare at sætte det hele måde på toppen af ​​min fil her.
Hvad ville det gøre, tror du?
Ja?
>> PUBLIKUM: [uhørligt].
SPEAKER 1: Ja.
Så jeg har gjort det globale, så at sige.
Hvis du har en variabel, der er udenfor alle dine funktioner, der er tilladt,
og koden skal kompilere, og n vil nu være tilgængelig ikke kun i get
positive int, men også i main-- som er lidt bekymrende, fordi der er
allerede et n i main, så mere på, at på bare et moment--
men dette ville blive betragtet som dårligt design.
Okay.
Hvis du nødt til at ty til noget lignende, åh, jeg vil
bare sætte det op her, fordi koden synes at kompilere
er generelt ikke den bedste praksis.
Snarere du ønsker at vælge den snævrest mulige omfang
til dine variabler, hvilket ville betyde gå med vores oprindelige design, som
er lige her.
>> Nu som en sidebemærkning, hvis du havde en identisk navngivet variabel her,
vejen C ville håndtere denne-- selv om dette ikke vil ske for often--
er, at dette stadig helt fint ind her.
Men denne definition af n i overensstemmelse 22 vil skygge den globale én.
Så denne ene vil arbejde inden for vigtigste, og den globale én
rent faktisk vil gælde, når du er i få positiv int men mere om det
en anden gang, men blot for dem nysgerrige.
>> Så kort sagt, vi løse dette her.
Lad os nu drille hinanden to andre stykker før vi ser på en sidste linje kode
i dette program.
Få positiv int.
På venstre side af sit ord er det ord int.
Hvad betyder det betyde tror du?
Indtil videre har vi mest set ugyldige.
Ja?
>> PUBLIKUM: Det er den type variabel, du spørger om.
>> SPEAKER 1: Ja det er den type, lad mig ikke sige variabel, men den type af værdi
at jeg beder tilbage til.
Og ja, det er intuitiv her, forhåbentlig.
Højre?
Hvis du ønsker at få en positiv int, hvad er det du
ønsker function-- ligesom vores frivillige fra sidste uge
at aflevere dig tilbage et stykke papir med en int på det?
Og så har vi præciseret, at såkaldte returtype af denne funktion
er at få positiv int.
Hvis vi ikke ønsker, at det returnere noget, du siger ugyldig.
Hvis du vil have det til at vende tilbage en streng, du siger streng.
Hvis du vil have det til at vende tilbage en flyder, siger du flyde.
Men den eneste, der gælder her logisk, fordi jeg bruger get int,
selvom jeg begrænser det til positive værdier, er at vende tilbage en int.
>> Så omvendt, hvad betyder det at der er et tomrum i parentes?
Hvad gør parentes generelt definere?
Ja?
>> PUBLIKUM: Det betyder funktionens faktisk ikke få det.
>> SPEAKER 1: Det betyder funktionens faktisk ikke at få hvad?
>> PUBLIKUM: Et input.
>> SPEAKER 1: Et input, overhovedet.
Så ja, hvis parentes her du angiver ugyldig,
det betyder bare jeg ønsker ikke nogen input.
Jeg vil løse problemet selv.
Og ja, behøver du ikke at fortælle få positiv int noget.
Du skal bare sige, få positiv int, og at Funktionen vil gå ud og gøre sit ting.
>> Men der har været et lille trick jeg har spillet her hele denne gang
for at sikre denne kode samler.
Bemærk at int-- få positiv int void-- er på linje 27.
Men for nogle tilsyneladende underlige grund det er også heroppe på linie 16.
Og bare for god foranstaltning vil jeg gentage dette, så er det helt identiske.
Og jeg har sagt prototype med en lille en-line kommentar.
Hvad sker der, hvis jeg sletter det, og nu køres igen gøre funktionen 1, ind.
Hovsa.
Vent et minut.
Hvor er min fane?
Huh?
Stå ved.
Make-funktion 1.
Der vi går.
OK.
Havde ikke gemt det ordentligt.
Så tænk, jeg der er en lille bug her, hvor jeg ikke er
se fanen navn i øjeblikket.
Så hvad der foregår her?
Implicit erklæring om funktion få positiv int er ugyldig i C99.
Så forvirrende igen.
Så hvad er dette vejledende for?
Tja, det viser sig, at C er temmelig dum.
Tja, det er programmering sprog, eller rettere compiler er.
Det kun ved, hvad du har lærte det, og det er kun
går noget at vide Hvis du lært det før.
Med andre ord, i vigtigste i øjeblikket, jeg er
forsøger at kalde en funktion kaldes få positive int.
Men compileren ikke vil at bemærke, at få positiv int
Der findes indtil linie 26.
Og så hvad compileren gør, er bare fejl, så snart det bliver til linje 17,
siger implicit erklæring af at få positive int, som
er bare en fancy måde at sige, jeg ikke ved, hvad får positiv int er endnu.
>> Andre sprog som Java og Python og Ruby kunne se fremad.
C ikke.
Og så den måde, vi løse dette er en af ​​to måder.
Enten en, hvis problemet er, at få positiv int er ikke set før,
godt, lad mig bare flytte det til toppen.
Det ville løse dette problem.
Men generelt er det betragtes som bedre teknik
at sætte din vigtigste funktion i det toppen, så et menneske at læse din kode
ved, hvad programmet gør, fordi vigtigste er ikke begravet alle
vejen på bunden eller i midten.
Det er helt i top.
Så der ikke føler sig ideelt.
Og du kan faktisk få i situationer, hvor
Hvis en funktionskald en anden, der kalder en anden,
du kan komme ind et problem, hvor hverken kan gå over den anden, logisk.
Det er bare ikke muligt.
>> Og så vej til arbejde omkring dette er at bare tage
funktionen underskrift, så at speak-- den første linje, hvor det er declared--
og bare kopiere, indsætte den i top, men ikke med krøllet braces--
bare med et semikolon.
Det er ligesom en lille hint af hvad der skal komme.
Og faktisk hele denne tid, hvor vi har set ting som standard io.h
og cs50.h, Tilsvarende i disse prik h-filer er der andre prototyper.
Og vi vil se, at inden længe.
>> Så kort, når du har et program i en fil med flere funktioner
udover vigtigste, du næsten altid ønsker at erklære dem
blot ved hjælp af deres første line, efterfulgt af et semikolon,
på toppen af ​​filen.
Det var en masse på én gang.
Nogen spørgsmål?
Okay.
>> Så lad os gå videre derefter til noget som hoste.
Oh.
Hvor montering.
Okay.
Hoste.
Så her er en C gennemførelse af et program
vi gjorde den anden dag i Scratch netop simpelthen bare
siger hoste, hoste, hoste.
Okay.
Og nogen sagde et par dage siden, at der er
en måde at rense denne kode op allerede.
Okay?
Så snart du kopierer og indsætte sandsynligvis dårligt design.
Mindst en gang vi kommer til fire eller fem eller 20 hoste, det føles dårlig praksis.
Vi bare holde kopiere, indsætte.
Hvad er den oplagte løsning til rengøring af dette program op?
>> PUBLIKUM: Loop.
>> SPEAKER 1: Ja.
Så brug en løkke.
Og vi kan bruge en til-loop, et stykke loop, helst antal fremgangsmåder.
Og ja, det er hvad vi gør i version en her.
Jeg har i stedet omskrevet det i version en af ​​cough.c
at være lige hoste inden for en for-løkke.
Okay, men der er en mulighed nu at slags starten
at udforme det lidt mere som den lektie, vi lærte et øjeblik siden,
som er denne-- antage, at jeg ønskede at skabe en funktion kaldet hoste,
Lad os overveje for bare et øjeblik hvad det kommer til at se ud.
Så hvis jeg vil have noget til at hoste, jeg har bare brug for
at bruge print f inde i funktion.
Og faktisk er jeg.
Og i virkeligheden, alt dette tid, hver gang du er
udskrivning noget at skærmen, en programmør
ville kalde det en bivirkning.
Det er mig ikke rakte tilbage nogen en værdi.
Det er mig at tage nogle handling der kan være visuelt indlysende.
Men denne funktion hoste, betyder det tilbage noget baseret på dens første linje?
Nej, fordi den type som er ugyldig, hvilket betyder blot
det er ikke rakte mig noget tilbage.
Det kan gøre noget visuelt, men det er ikke rakte mig
bakke et stykke papir ligesom sidste uge.
>> Er det brug for input?
Nej.
Og så det er ugyldigt her også.
Så dette er også slags over-engineering dette problem.
Højre?
Jeg har lavet programmet mere komplekse, flere linjer kode,
Jeg har ikke gjort det nogen mere funktionel, men det
ville være et springbræt, måske for en bredere
forbindelse med mere komplicerede kode.
Men hvad med det her?
Hvad har jeg done-- bare et blik på dette uden at se på kommentar
på toppen af ​​file-- hvad har Jeg fundamentalt gjort her med min hoste
implementering, der er anderledes?
Ja, i tilbage?
>> PUBLIKUM: Gør det, så du kan har en karakter slukke.
SPEAKER 1: Ja.
Så det føles slags rart.
Højre?
Det er ligesom at tilføje en funktion til din program eller din funktion, i dette tilfælde.
Det er stadig returnerer ingenting.
Det kunne have en visuel bivirkning, fordi det kalder print f.
Men nu har jeg parametriseret den funktion, som
betyder, at jeg har angivet taget input af typen int og kalder det n,
men jeg kunne kalde det noget, jeg vil.
I virkeligheden kunne det bare være gange for at være endnu mere eksplicit.
Og så kunne jeg bare ændre dette her.
Men pointen er, at det er sådan jeg oprette en funktion, der tager input.
Og hvis du husker spejlvende gennem måske online i en
af walk-throughs, den fjerde og sidste hoste eksempel
du vil opdage her jeg har generaliseret min kode further-- slags abstraheret
det yderligere.
Ligesom hoste og nyse, begge er om ligesom at sige noget eller gøre
en slags lyd.
Gem ville være svarende Scratch blok.
Og så hvad jeg gjorde i denne version, som vi kan bare blik på,
er hoste er ligesom at sige, [hoste], hoste, og i mellemtiden, nysen er
som at sige, [Achoo].
Og så jeg har generaliseret gennemførelsen af ​​dem
ved nu at gennemføre denne generiske funktion,
sige, som er interessant for nutidens formål
kun fordi det stadig ikke har en returtypen.
Men hvor mange indgange har det?
PUBLIKUM: Two.
SPEAKER 1: Two.
Og så hvis du ønsker at tage i to argumenter,
bare adskille dem med et komma.
Og hvis du vil derefter kalder denne funktion,
bemærke, at du bare kalder sige, tilbud, citat slut,
for det første argument, fælles n, for det andet argument.
Så igen, vi bare har nu byggesten, så vi rent faktisk kan
gennemføre nogle af vores egne funktioner.
Okay.
Eventuelle spørgsmål om disse?
>> Så lad os nu skrælle et lag i så fald tilbage.
Og målet i sidste ende, er næste uges problem sæt
kommer til at være på cryptogrophy-- kunsten scrambling oplysninger.
Og specifikt oplysningerne vil få dig kryptere eller dekryptere
bliver tekst.
Og så den slags invitationer Spørgsmålet i dag ligesom godt,
hvad der foregår under kølerhjelmen med tekst uden ASCII fra uge nul,
og hvordan kan vi faktisk begynde at manipulere den?
Så her er Zamyla navn.
Og i tekst, som kunne indlæses ind ligesom get strengen funktionen.
Og starter nu, når du ser en streng som denne-- Z-A-M-Y-L-en--
begynde at tænke på det som om hver af disse tegn er i en kasse med dens
egen.
Og ja, i en uge eller så er tid, idet hver af disse kasser
kommer til at repræsentere meget specifikt en blok af memory-- en bid af hukommelse.
Så hver af disse breve, I sidste ende vil repræsentere 8 bit.
Og vi vil faktisk se, hvad der foregår på undersiden af ​​emhætten i min computer.
>> Men for det ikke tilstrækkeligt bare for at se på Zamyla
gennem denne linse, hvorved hver af disse breve er i sin egen boks.
Og pænt nok i C vi kan adgang til hver af disse kasser direkte.
Så hvis du ønsker at få den første bogstav i hendes navn, super nemt i C.
Hvis du ønsker at få det sidste brev, super nemt såvel
med et stykke ny syntaks.
>> Så jeg har tænkt mig at gå videre ind i CS50 IDE og åbne op strengen nul prik C.
Og i dette eksempel her, der er et par nye ting foregår.
Så først på linje 19, vi har set denne before-- get streng.
Så bare som en hurtig tilregnelighed check, hvis nogen kunne tilbyde op verbalt
en lægmand forklaring på hvad der foregår på linje 19.
Ligesom bare omsætte dette til Engelsk, at en værelseskammerat ikke i CS50
kunne forstå.
Ja.
>> PUBLIKUM: Have brugeren indtaster en snor og gemme det i en variabel s.
SPEAKER 1: God.
Har brugerinput en streng og gemme det i en variabel s.
Det er godt.
Så på højre hånd side, kalder vi får streng.
Der returnerer en værdi der ikke fik tildelt
fra højre side til venstre side ind i en variabel kaldet s, der er
designet til at gemme en streng.
Præcis.
>> Så nu linje 22, pr kommentaren på linje 21,
naturligvis udskriver denne streng et tegn per linje.
Men hvordan?
Så først og fremmest, vi initialisere jeg til 0.
Og så hvordan får vi til I slutningen af ​​Zamyla navn?
Nå, i slutningen af Zamyla navn, kunne jeg
manuelt skrive det sidste tegn af hendes navn eller anden måde, eller antallet af det.
Højre?
Hvis vi går tilbage her-- Z-A-M-L-- Y-L-en-- så jeg kunne skrive i.
Hvad er indekset for Zamyla sidste brev?
Hvis dette er 0-- tale som en programmer-- 0, 1, 2, 3, 4, 5,
Jeg heard-- så ja, det sidste bogstav i Zamyla navn er den sjette,
men hvis vi tæller fra 0, Det kommer til at blive nummer 5.
Så holder det i tankerne her.
>> Det viser sig, der er en funktion i C kaldte strlen, og tilbage i dag
og i dag stadig, en masse programmører
vælge at synkronisere navne for deres funktioner, der lyder som ordene
de prøver at sige.
Så strlen er streng længde.
Og så hvad ville streng længde S vende tilbage når Zamyla er input?
>> PUBLIKUM: Five.
>> SPEAKER 1: Z-A-M-Y-L. Seks.
Højre?
Hvad er længden af ​​Zamyla navn?
Højre?
Og netop i virkeligheden seks bogstaver.
Højre?
Og så hvad betyder det for vores løkke?
Vi kommer til at gå fra 0 op til seks, som
kommer til at give os fem iterationer.
Hvad gør vi på hver iteration?
Nå, procent C, nogen gættet den anden dag,
betyder en pladsholder for hvad?
>> PUBLIKUM: Char.
SPEAKER 1: Bare en char.
Så en enkelt character-- ikke flere karakterer som en streng.
Og så her er den nye linje at vi har fået udskrivning ud.
Og så her er den nye syntaks.
Hvis du ønsker at udskrive den i'te tegn i strengen S, så at sige,
kan du blot sige navn på strengen S,
og derefter åbne firkantede beslag, og derefter lukket firkantet beslag, med en i
midten.
Og det er slags rart i, at den slags ligner en firkant
ligesom firkanter, hvor Zamyla s Der findes tegn på, at billedet der.
>> Så hvis jeg rent faktisk køre dette nu, lad os se hvad der sker.
Gøre strengen 0 dot skråstreg snor 0, og så er jeg
kommer til at skrive i Zamyla navn.
Der er ingen hurtig, fordi jeg ikke bruge print f, men det er fint.
Jeg ved bare, hvad de skal gøre.
Og ja, det udskrives Zamyla navn, én pr linje.
>> Lad os nu være lidt letsindigt.
Antag, at jeg ikke vidste om strlen og jeg regnede,
okay, er ingen kommer til at have en navngive større end ligesom 50 tegn.
Lad os gå videre og kompilere dette og gentag det, og skriv derefter i Zamyla
igen.
Logisk, hvad er Programmet vil forsøge at udskrive?
Z-A-M-Y-L-A og derefter som 45 ukendte bytes af hukommelse.
Og ja, vi vil komme tilbage til denne idé om hukommelse.
Men bare logisk, hvis Zamyla navn er denne lange,
som pr billedet her, hvad vi siger
er at holde udskrivning, holde udskrivning, holde trykning, holde udskrivning, holde udskrivning,
hele vejen til den 50. karakter, som der ved, hvad der vil ske.
Så lad os faktisk tage et kig.
Lad os skrive i Zamyla.
Interessant.
Vi fik heldig.
Bare en hel masse hvid plads.
Oh.
Der er en funky karakter.
Det ser lidt ligesom en underlig spørgsmål markere der, men der er Zamyla navn.
Lad os få virkelig hensynsløs.
Hvad med at vi udskriver 500 blokke i det ukendte?
Lad os gå videre og gøre det så godt, og derefter re-run.
Og lad os fuld skærm det, fordi vi nødt til at se mere plads.
Zamyla.
Fik heldig igen.
>> Tør vi får mere hensynsløse?
Lad os få mere hensynsløs.
50.000 tegn.
Dette er mest sikkert ikke en god idé.
Okay.
Make strengen 0.
Dette vil være vores sidste demo.
Zamyla.
UH.
OK.
Så min hukommelse er virkelig tom lige nu, som er faktisk slags praktisk.
Hvad jeg forsøger at få at-- okay.
Og nu er jeg bare kommer til at blive hensynsløs.
500.000.
Make-- lad os fuld skærm det.
Enter.
Zamyla.
Der vi går.
Jeg har ingen idé om, hvad det er, men det lyder slemt.
Okay.
Og i virkeligheden, snart, hvis du er blandt de få heldige i kontortiden
og problemet indstille en, du kan meget vel støde dette.
Segmentering fejl faktisk gør har en veldefineret mening.
Det betyder, at nogle slags fejl vedrørende et segment af hukommelse.
Og i lægmandssprog, det betyder, at vi rørt
memory-- vi brugte RAM i min computer at jeg ikke skulle have haft adgang til.
Og det er, hvad der er både kraftfuld og også farligt
om C er, at du rent faktisk har uhindret adgang
til hele dit program hukommelse eller byte eller RAM, mere specifikt.
>> Så selv om Zamyla navn er kun seks tegn,
Jeg kan stadig gå nogen steder i hukommelsen, jeg ønsker.
Og som en sidebemærkning, hvis du har nogensinde læst nogle artiklen
i årenes løb om nogle server eller nogle program
blive revnet eller hacket, der er draget fordel af noget
kaldes en buffer overflow udnytte, at vi vil faktisk
tale om i et par uger, det er generelt at henvise til en eller anden måde snyder
en computer til at gå godt ud over grænserne for hukommelse
at det skal have, og at finde noget saftigt
ved, at en memory-- adgangskode, måske, en måde
omgå nogle serienummeret check eller blot generelt i stand
at narre computeren udfører kode, som ikke var hensigten.
Men lad os vende tilbage til realitet for bare et øjeblik
hvor dette program blev implementeret med strlen,
og introducere en ting op her.
Hvad er nyt blandt disse tre bedste linjer?
>> Så string dot h.
Det viser sig, at der er dette bibliotek kaldet String Dot H eller String Bibliotek,
hvis header fil, så at sige, er streng dot h, der giver mig
adgang til denne strlen funktion.
Hvis jeg udelader, at compileren er kommer til at råbe på mig i en eller anden form.
Men ved du hvad?
Lad os nu få virkelig nuanceret.
På linje 22, er der noget slags af inefficient-- dårligt designet,
arguably-- om denne linje kode.
Tænk tilbage på, hvordan for-løkke gennemføres
og hvilke skridt ske igen og igen og igen-- initialiseringen,
tilstanden, kode, får udført, så tilvækst
eller ændringen, så tilstanden, så koden, så ændringen, så
tilstanden, så koden, derefter ændringen, og så videre.
Så hvad der kunne være en lille bekymrende eller dårligt gjort her?
Ja, i blåt.
PUBLIKUM: strlen er kaldte mange, mange gange.
SPEAKER 1: Ja.
Så strlen kaldes mange gange, men hvad er
længden af ​​Zamyla navn for første gang løkken udfører?
>> PUBLIKUM: Seks.
>> SPEAKER 1: Seks.
Nå, hvad er længden af ​​hendes navn anden gang koden henretter?
>> PUBLIKUM: Seks.
>> SPEAKER 1: Okay.
Det er stadig seks.
Højre?
Zarla navn har ikke ændret sig, selv om jeg søger
på kun en del af bogstaverne i hendes navn.
Og så det faktum, at jeg er effektivt stille dette spørgsmål, hvad er
længden af ​​Zamyla, hvad er længden af Zamyla, hvad er længden af ​​Zamyla,
seks separate gange, eller syv selv, er bare dum,
fordi det er uforanderlige det svar.
Og så hvad jeg kunne faktisk gør, er denne-- i snor én
Jeg har en marginalt bedre version her.
There-- whoops-- snor to jeg har en marginalt bedre version, hvor
Jeg gør denne-- stedet for bare initialisering jeg til 0, jeg også med et komma
erklære en anden variabel kaldet n- Jeg behøver ikke at sige int igen.
Jeg burde ikke i virkeligheden.
Men jeg siger n.
Og så er jeg initialisere n til Den strlen af ​​n, så der nu
hvor mange gange har strlen gå udføres i alt?
Bare én gang.
Og så dette er, hvad vi mener tidligere om bedre design.
Faktisk, når din kode er korrekt, gå tilbage og tænker igennem,
bruger jeg så lidt hukommelse eller så få sekunder
eller millisekunder af computer tid som muligt at gennemføre nogle problemer?
Og jeg har tænkt mig at rulle op og blot nævne
at der er denne omtale af null i denne version,
men vi vil vende tilbage til inden længe.
Fordi for nu, lad os tage et kig på, hvor det kommer til at lede os.
Så man viser det sig, at nu hvor vi har mulighed for
at se på de enkelte tegn, vi kan udnytte noget
fra uge 0, der var meget mystiske og slags uinteressant på det tidspunkt.
Men nu, og især når vi komme til at kryptering i en uge,
det vil være temmelig kraftig.
Det viser sig, at med nogle data types-- ints og flåd
og tegn og strenge og andre things-- nogle af dem
kan meget nemt omdannes til en anden.
>> For eksempel, når vi talte om ASCII nogen tid ago-- her
den store bogstaver A gennem M, prik, prik,
dot-- vi sagde, at der er en kortlægning mellem disse bogstaver og tal.
Og i virkeligheden, det gælder, til små bogstaver samt.
Små bogstaver a er 97, hovedstaden a er 65.
Og der er en række i ASCII, som er lige denne kortlægning
system til alle de andre bogstaver.
Så hvad betyder det?
Tja, jeg har tænkt mig at gå videre og åbne op reelle hurtigt noget, der hedder
ASCII 0, hvoraf de fleste er kommentarer.
Og igen online kan du altid blik gennem kommentarerne.
>> Og tage et kig hvad dette vil gøre.
Så det har fået en hovedfunktion.
Jeg har hårdt kodet numrene bare for nu, fordi jeg ved, hvad jeg laver.
Jeg ved, hvad jeg ønsker at se her.
Og jeg har initialiseret I til 65.
Og jeg tælle op gennem 26 bogstaver i alt.
Og hvad skal jeg udskrive én linje ad gangen
hvis du kan fortolke dette fremhævede linje?
Hvad bliver udskrevet?
Ja.
>> PUBLIKUM: Skal du at udskrive det brev,
svarer til kort over brev værdi og heltal?
SPEAKER 1: Præcis.
Jeg har tænkt mig at udskrive brevet svarende til heltal,
og omvendt, som følger.
Nå det, nogen sagde tidligere, er blot en pladsholder for en char.
Er det stadig.
Dette er naturligvis en pladsholder for en int-- ikke en ny linje.
Og nu mærke til, min første værdi, Jeg tilslutte til denne pladsholder
er ikke bare I. Jeg siger, i parentes, char I,
som i parentes char er fortæller compileren, behandler jeg
ikke som hvad det er, som er et tal.
Behandle det som en faktisk karakter.
Hvorimod den anden værdi jeg tilslutte in-- jeg-- skal bare være et tal.
>> Så hvis jeg kompilere denne program-- så dette er lave ASCII 0,
dot skråstreg ASCII 0-- jeg bare få denne handy lille diagram, der
viser mig alle de mulige tilknytninger uden at skulle tænke det
igennem eller finde ud af det på min egen.
Og jeg er også udskrive, mærke til de små bogstaver,
fordi et par linjer senere, jeg også udskrive denne kortlægning
så godt, som er lige til siger, at når du forstår
hvad der foregår nedenunder hætten, kan du
automatisk konvertere frem og tilbage.
Og i virkeligheden, hvis nogen af ​​jer nogensinde gjorde det i folkeskolen
eller hørt om nogen, mythically tage en note
og sende den til sin eller hendes ven i klassen,
men du scrambled den breve med som A bliver B,
og B bliver C, eller noget mere kompliceret end som så, ja,
hvordan ville du gå om gennemførelsen af ​​denne som barn?
Nå, du lige slags vide A bliver B, B bliver C,
men matematisk, hvad var det barn gør?
Hvad lavede du tilføje til hvert bogstav?
Effektivt, 1.
>> Så når du skifter A til B, det er slags som at skifte fra 65 til 66,
hvilket matematisk betyder blot tilføje 1.
Og så hvis du skulle implementere at lidt misvisende teknik
til din lærer i kode, du kunne gøre lige netop det bare
ved tilsætning af et enkelt bogstav sammen.
Så inden længe er vi kommer til at se, hvordan vi
kan drage fordel af det faktisk virkelig scramble og unscramble
information.
I mellemtiden, ved, at vi har startet at indføre en par andre biblioteker
her-- strengen én dag.
Og en meget hjælpsom websted forhåbentlig vil du finde
kaldes reference.cs50.net, som lærerstaben har sat sammen,
så hvis du ønsker at se op hvordan strlen værker,
du kan begynde at skrive funktionens navn,
klik strlen der, og derefter en mindre behagelig forklaring
kommer til at blive vist.
Eller hvis du ønsker det officielle Linux-baserede forklaring,
du kan klikke mere comfy øverst til højre, og det
vil præsentere de samme oplysninger, men i mere komplekse udtryk.
Det er en nyttig ressource til faktisk ved, hvad alt gør.
>> Næste gang vi kommer til at tage et kig på Ovaltine
og mere, og introducere os selv til en verden af ​​kryptografi.
Inden da, vil vi se du senere i denne uge.
Og nu, Colton Ogden.
Se dig på onsdag.
>> [Musik spiller]
>> SPEAKER 1: Hvad [BLEEP] laver du?
>> SPEAKER 1: jeg spiser min dessert?
Hvordan du spiser det?
Med hænderne?
>> [Musik spiller]