Spreker 1: Alle reg. Welkom terug. Dit is Week Twee van CS50, en ons het Tot dusver is die gebruik van funksies, maar grootliks geneem om hulle as vanselfsprekend aanvaar. Ons het printf gebruik wat die newe-effek van die druk dinge wat op die skerm. Ons het gewoond raak-int, kry dryf. Maar wat as jy eintlik wil skep jou eie funksies, soos sommige van jy kan reeds begin het om te doen vir Probleem Stel een, al is nie streng nodig? Wel, laat ons gaan voort en heroorweeg wat probleem van net die gebruiker te vra vir hul naam en druk iets op die skerm, maar probeer om te faktor uit 'n paar van die ooreenkomste wat ons het gesien in ons kode dusver. So ek bedoel die volgende. Ek gaan om voort te gaan en die skep van 'n nuwe program, bel dit hello.c as gewoonlik. Ek gaan om voort te gaan en myself te gee sluit in standaard io.h aan die bokant. Ek gaan ook myself preemptively die CS50 biblioteek sodat Ek het nie geskree raak by die samesteller. En nou is ek gaan om voort te gaan en verklaar int, hoof, nietig. En dan in hier, dit is waar ek wil om te begin funksies uit te kontrakteer aan 'n paar ander funksie wat ek self is gaan skryf nie, maar dit beteken nie tans bestaan. Byvoorbeeld, veronderstel dat ek wou Skryf 'n funksie wat dit moontlik maak om my te druk hallo, komma, en dan 'n paar gebruiker se naam. Eerder as om voort te printf doen hallo,% s, sou dit nie lekker wees as Daar was net 'n funksie genoem printf nie, maar druk naam? So in ander woorde, ek wil in staat wees om skryf 'n program wat nie 'n bietjie iets soos hierdie. Eerstens, ek gaan om te sê printf jou naam, en daardeur waarna die gebruiker om gee my sy of haar naam, en dan is ek gaan die bekende string s te gebruik om te verklaar 'n string. Gee my 'n veranderlike van tipe string, noem dit s, en die winkel in wat die gevolg van die roeping kry snaar. Maar nou in weke verlede, sou ek ietwat tediously gedoen hallo,% s / n. En in ander woorde, het ons gesien dat hierdie byvoorbeeld 'n klomp van die tye, en dit is 'n triviale voorbeeld, want daar is net een reël van die kode so dit is regtig nie 'n big deal te hou tik in weer. Maar veronderstel dat hierdie reël van die kode eintlik is besig om 'n las, en dit is nie een lyn van kode, maar dit is 10 reëls van die kode 'n paar weke van nou af, en jy is net moeg van kopieer en plak of tik dieselfde kode. Sou dit nie lekker wees om in plaas daarvan om dit te doen printf hallo,% s en so meer, sou dit nie lekker wees as daar net 'n funksie genoem gedrukte naam wat neem 'n argument - Met ander woorde, wat dit neem om insette - en dan kommapunt. Sodat funksie, sou dit nie lekker wees as wat bestaan ​​het? Dan sou ek nie hoef te bekommer oor wat printf is, wat% s en al hierdie kompleksiteit wat nie alles wat interessant. Dit is nuttig. So druk naam, ongelukkig, was nie uitgevind sowat 40 plus jaar gelede. Niemand het gedink dat dit te skryf. Maar dit is die skoonheid van 'n programmeertaal, net soos in Kras jy kan definieer persoonlike blokke, so in C en die meeste enige taal, kan jy definieer jou eie funksies, kan jy definieer jou eie funksies. So selfs al kry ons hoofsaaklik deur outomaties vir gratis, kan ons verklaar ons eie funksies. So ek gaan 'n paar kamer hier maak tot bo, en ek gaan om te verklaar my eie funksie wat gaan 'n om te kyk bietjie vreemd op die eerste, maar ons sal kom terug na hierdie kort voor lank. Ek gaan leemte te sê, en daardeur dui dat hierdie funksie verrig iets, het 'n newe-effek, maar dit nie terug vir my iets in die dieselfde manier wat kry int of kry string self doen. En ek gaan hierdie funksie gee 'n Naam van gedrukte naam, en ek gaan spesifiseer dat hierdie man gaan neem 'n string, en ek gaan dit te noem string naam. Ek kon noem dit iets wat ek wil hê nie, maar ek wil my kode om self-dokumentasie. Met ander woorde, as een van julle sou Hierdie lêer oopmaak en dit lees, kan jy soort aflei uit die naam van daardie insette watter rol dit veronderstel is om te speel. En nou hieronder wat, ek gaan oop te maak krullerige stut en geslote krullerige stut, en so sien ek dieselfde het gevolg patroon op die lyne vier deur sewe as Ek het na aanleiding van 'n goeie week plus nou tussen, sê, lyne en nege 14 wat komponeer hoof. Met ander woorde, druk naam is 'n ander funksie. Nou, is die samesteller nie gaan om te weet hierdie ding om outomaties bel want ek het letterlik net uitgevind het, maar dit sal weet nog steeds om te bel hoof outomaties, en dan natuurlik in lyn 13, Ek roep my eie funksie. En omdat ek verklaar dat die funksie up on line vier voordat hoof, dit gaan die vertaler te leer wat quote, unquote, "druk naam" beteken en wat dit behoort te doen. So ek is soort van gee dit 'n nuwe persoonlike sluit in die konteks van, sê, krap. So hier is, kan ek sit dit baie algemeen of herhalende patroon van die kode ek hou skryf in die klas, printf % S hallo,% s / n, "- wat wil ek hier sit? S? So ek wil naam te maak in hierdie konteks. So sien 'n bietjie van 'n digotomie hier. Omdat ek verklaar my eie funksie en ek het ietwat arbitrêr genoem druk dit naam, en omdat ek vermeld in hakies dat hierdie funksie neem een ​​argument, die tipe Dit is 'n string - so dit is 'n woord of frase of iets soos dit - en Ek noem dat die argument naam, dat beteken die enigste veranderlike wat in omvang, so te sê, is naam. S bestaan ​​net tussen wat twee krulhakies, natuurlik? Wel, regtig, net soos reël 10 deur 14, so hou net op Maandag kan nie gebruik S, maar wat ek kan doen is verby S in druk naam. Druk naam is net so gebeur dit te gee 'n alias, 'n sinoniem, 'n bynaam, noem dit die naam, en nou gebruik dit in hierdie lyn. So nou laat my red nie, zoom uit. Laat my gaan voort en maak hallo. Lyk goed. Het nie spoeg uit enige foute. / Hallo Tik.. Wat is my naam? David. En hallo David. So nie alles wat opwindend, maar nou net dink. Jy het nou dieselfde bestanddeel soos ons gedoen het in Scratch te maak ons ​​eie funksies. Maar daar is 'n bietjie van 'n Gotcha. Veronderstel dat ek regtig nie gedink het nie dit deur en ek eintlik sonder om werklik te dink oor dit geskryf daardie funksie hier. Voel heel redelik. In Scratch is daar geen idee van die plek in jou skrifte. Jy kan sit een hier, een hier, een hier, en dit kan begin 'n bietjie morsig om te kyk as jy dit nie doen nie lê dit uit netjies, maar dit beteken nie saak waar fisies die skrifte was op die skerm. Ongelukkig in C - en dit is in teenstelling met tale soos Java en Python en ander wat jy dalk vertroud wees met - ongelukkig in C, om nie saak nie, want kyk wat is gaan nou gebeur. Die standaard funksie wat gaan uit te voer, is, natuurlik, hoof. Hoof gaan druk naam te noem op lyn agt, maar ongelukkig is, die samesteller sal nie eens weet dat gedrukte naam bestaan ​​totdat dit kry om lyn 11, wat ongelukkig gaan dit te laat wees. So laat ons doen maak hallo. En nou damn, twee foute gegenereer. So nou laat my blaai tot op die Eerstens, as ons moet altyd doen, en sien dat dit skree op my, "Implisiete verklaring van funksie druk naam. " So het ons hierdie boodskap voor gesien, implisiete verklaring van funksie. Toe het ons gesien dat die soort van fout? Toe ek nie soos 'n biblioteek. As ek vergeet cs50.h en ek sou kry geskree vir kry string of kry int. Maar in hierdie geval, hierdie funksie druk naam is nie in 'n biblioteek, reg? Dit is letterlik in hierdie lêer, sodat wat is werklik die probleem? Wel ongelukkig in C, neem dit wat jy so ongelooflik letterlik dat as jy wil 'n funksie genoem gedrukte naam bestaan ​​nie, jy het om te implementeer daardie funksie by die top van jou kode, sodat dit toeganklik te verlaag funksies, maar eerlik, wat raak slordige baie vinnig. Persoonlik, Ek hou om hoof eerste want dan is dit baie duidelik wat hierdie program nie met die eerste oogopslag. En plus, kan jy in die vreemde hoek gevalle waar as x wil noem y y maar kan noem x, jy moet net fisies kan eintlik nie sit een bo die ander. Maar dit blyk in C, kan ons los hierdie baie eenvoudig. Ek gaan 'n bietjie van die ruimte wat hier, en ek is net gaan om te preemptively, al is dit 'n bietjie kere, gaan die te leer samesteller dat daar 'n funksie genoem gedrukte naam, wat dit neem om 'n string, en ek gaan om te bel dit noem kommapunt. So dit nou in lyn vier, wat ons het nie gesien het nie, is 'n verklaring van 'n funksie gedrukte naam, maar dit is net 'n belofte dat hierdie funksie sal uiteindelik gedefinieer word, uiteindelik geïmplementeer word. Dit is nou ek kan uitlos omdat dit is nou die definisie, die implementering, soort van die laaste myl van die implementering van hierdie spesifieke funksie. So gesê dit is dom, dit is irriterende, maar dit is die manier C is, en dit is want dit neem jou baie letterlik en, soos 'n rekenaar eerlik moet, net nie presies wat jy vertel om dit te doen, en wat bestel is belangrik. So hou dit in gedagte en weer begin om te kennis van die herhaling van patrone. Kans is wat jy wil, as jy nie reeds begin boodskappe te ontmoet soos hierdie wat met die eerste oogopslag lyk heeltemal kripties, maar as jy begin om te kyk vir hierdie belangrike woorde soos "Implisiete verklaring," melding gemaak van 'n funksie in hierdie geval - en eerlik, jy soms selfs 'n bietjie groen wortel simbool wat vir jou vertel waar die kwessie is waarskynlik - jy kan begin om jou manier om te werk deur middel van nog nie gesien fout boodskappe. Enige vrae oor die skryf van jou eie funksie op hierdie manier? Kom ons doen iets wat 'n bietjie meer aantreklik. Eerder as om net iets te doen wat 'n newe-effek van die druk, laat my gaan voor en slaan 'n nuwe lêer, en ons sal noem dit positive.c, selfs al is dit gaan 'n bietjie anders versus laaste tyd. En hierdie keer, ek wil om weer te implementeer laaste keer se positive.C voorbeeld, wat is dwing om die gebruiker te gee vir my 'n positiewe heelgetal. Maar ek het om te gebruik int laaste tyd kry. Sou dit nie lekker gewees het as daar 'n funksie genoem kry positiewe int dat ek kon net uitkontrakteer stukkie van die funksie te? Dus is die verskil hier is ons sal implementeer kry positiewe int, maar in teenstelling met Druk naam wat 'n newe-effek - dit het nie weer iets vir my soos 'n nommer of 'n string - kry positiewe int is, natuurlik, gaan terug, hopelik, 'n positiewe int. So laat ons dit doen. Sluit cs50.h, sluit in standaard io.h. Int main nietig. En nou hier, ek gaan om voort te gaan en kom ons sê int, noem dit 'n, is gelyk aan kry positiewe int. En net soos jy int bestaan ​​reeds omdat die personeel wat dit geskryf het, ek gaan om aan te neem vir die oomblik wat kry positiewe int bestaan, en nou gaan ek om voort te gaan en te sê printf, Dankie vir die% i / n ", n. So as ek nou stel hierdie program, wat gaan gebeur in my terminale venster aan die onderkant van die skerm? Ek gaan waarskynlik dat dieselfde fout as tevore. So kom ons probeer dit. Maak positiewe. En weer, implisiete verklaring van funksie, kry positiewe int. So kan ons los dit in 'n paar van die maniere. Ek gaan om dit eenvoudig te hou en net sit my verklaring hier en kry positiewe int. Ek nodig het om die sogenaamde handtekening. Die handtekening verwys net aan die estetika van die eerste reël van die program. So, wat moet kry positiewe int terugkeer? So 'n int. Ek ideaal bedoel, sou dit terug iets soos positiewe int, maar dat bestaan ​​nie. Ons het nie gesien dat onder ons data tipes, so ons het om te gaan met die feit dat ons baie min data tipes om te werk met. Maar ons kan terugkeer 'n int en net vertrou dat dit positief sal wees. Dit gaan om genoem te word kry positiewe int. En nou hoe oor sy argumente? Neem dit enige insette? Is dit nodig om enige insette? Daarom is dit nie nodig om te weet vooruit nie. Kry string nie, kry int nie. Printf nie - dit moet 'n paar te hê insette geslaag het in dit - en gedrukte naam moes 'n paar insette, maar kry positiewe int nie. So ek gaan uitdruklik vertel die samesteller nietig. Leemte is die afwesigheid van iets anders. So leemte beteken niks gaan binne van die hakies, kommapunt. En nou op die bodem van my lêer - en weer, ek is net 'n soort van anale hier om hoof aan die bokant, wat is goeie praktyk, want op hierdie manier, elke keer as jy of iemand anders open jou lêer, die funksie is reg daar. Jy kan duik in van square one. So nou is ek gaan om dit te dupliseer, kry positiewe int leemte, maar ek is nie gaan 'n kommapunt te nou getref het. Ek gaan krulhakies oop te maak, en nou het ek nodig het om te leen 'n paar idees van Maandag. So as jy onthou, ons het iets graag die volgende doen terwyl iets is waar. En wat het ek gedoen? Ek het so iets gee vir my 'n positiewe heelgetal is, n bietjie van 'n vinnige. Ek kan enige woorde wat ek wil hê. En dan het ek gebruik wat? Int n gelyk kry int, geen argumente om dit te. En kennis van die verskil. Wanneer jy na 'n funksie, wanneer jy gebruik 'n funksie, het jy nie sit in nietig. Jy moet net doen wanneer waarby 'n funksie, die onderrig van die samesteller wat dit moet verwag. So jy hoef nie te sit nietig self daar. Maar nou, wat was my toestand? Wel, n is nie gelyk aan positiewe, maar dit is net pseudo-kode. So hoe druk ek dit meer skoon? So minder as of gelyk aan nul. So weer, sien jy kan doen minder as of gelyk aan. Selfs al is dit twee afsonderlike simbole, kan jy dit doen op jou sleutelbord as sodanig. Maar daar is nog 'n probleem wat Ek verfrommeld laaste tyd ook. Ek het om te verklaar - Presies. Ek het n te verklaar buite van die lus. So ek nodig het om te sit n 'hier, en ek doen nie weer wil verklaar dat dit in hier sodat ek kry 'n nuwe veranderlike. Ek wil net 'n waarde toe te ken in hier. En nou is ek nie heeltemal wat hier gedoen word. Laat my voor myself kry en maak asof ek gedoen het. Maak positiewe, en nou daar is 'n nuwe fout. Beheer bereik einde van nie-leemte funksie. So nuwe fout boodskap, maar as jy soort van terg uitmekaar elk van die woorde, dit waarskynlik sinspeel op wat verkeerd is. Beheer. Beheer beteken net aan die einde werksaamhede in 'n program. Die rekenaar is in beheer en iets wat verkeerd geloop het. So dit bereik die einde van 'n nie-leemte funksie. Watter funksie is dit blykbaar verwys na? Watter funksie is nie-leemte? So kry positiewe int, en 'n bietjie verwarrend in daardie goed, Dit is soort van nietig. Dit het 'n spesifikasie van leemte vir sy argumente, maar sy produksie gaan wees van die tipe n. So het die woord aan die linkerkant is die sogenaamde terugkeer tipe. Die woord aan die binnekant is hier die nul of meer argumente dat 'n funksie neem. So, wat moet ek doen? Op hierdie punt in my kode, lyn 21 waar die flikkerende spoedige is nou, ek het 'n positiewe int binne van die veranderlike genaamd n. Hoe gee ek dit terug na die hoof? Letterlik. Terug n kommapunt. So net soos Colton teruggekeer van 'n stukkie van die papier met 'n antwoord op my deur die val dat die stuk papier in die klein swart boks op die tafel, wat om te doen in kode, kan jy letterlik net skryf, terug n, en dit is asof Colton was uitreiking van my iets fisiese terug. In hierdie geval, wat aan die gebeur is kry positiewe int gaan hand terug wat is vermoedelik 'n positiewe integer aan wie? Waar kom daardie waarde eindig? Wat eindig in hierdie veranderlike, n, en dan sal ons voortgaan met die lyn nege. So met ander woorde, in volgorde van bedrywighede, is hierdie program begin uitvoering, en die samesteller besef, oh, wil jy die biblioteek? Laat my gaan gryp net die binnekant van dit. O, jy wil die standaard IO biblioteek? Laat my gaan gryp net die binnekant van dit. Wat sê die samesteller sê aan homself wanneer dit tref lyn vier? O, jy het belowe om die te implementeer funksie genoem kry positiewe, maar ons sal terug te kry om dit later, iets langs die lyne. Int belangrikste leemte beteken net hier is die ingewande van my program. Line sewe is net 'n krullerige stut. Line agt sê aan die linkerkant, gee me 32 stukkies vir 'n heelgetal is, noem dit 'n. Op die regterkant, is dit sê kry positiewe int. Nou laat breek die storie, want nou Ek hou nie beweeg my wyser af. My wyser gaan nou hier omdat nou kry positiewe int voer. Int n verklaar word. Doen die volgende. Printf gee my 'n positiewe heelgetal. Kry 'n int van die gebruiker, stoor dit in n, en miskien doen dit weer en weer. Dit loop beteken dat hierdie kode mag voer op en af ​​soos hierdie weer en weer, maar wanneer die gebruiker uiteindelik werk saam en gee my 'n positiewe int, ek getref lyn 21, op watter punt die aantal teruggegee word, en watter een moet ek nou uitlig? Nege. Beheer, om so te spreek, terug nege uit te voer. Dit is die lyn wat is nou in beheer. So dit is wat almal is al gebeur hierdie tyd onder die enjinkap nie, maar wanneer ons gebruik funksies soos printf of selfs 'n string wat iemand anders geskryf vir jou, is beheer oorhandig af om iemand anders se kode lyn deur reël vir reël. Dit is net ons kon dit nie sien nie, en ons kon nie regtig beeld dit in hierdie program, want dit is in 'n ander lêer op die hardeskyf unbeknownst aan ons. So laat ons eintlik saam te stel en hardloop dit nou. Maak positiewe. Stel, wat se vordering. / Positief.. Gee my 'n positiewe heelgetal. Kom ons moeilik wees. Negatiewe 1. Zero. Kom ons gee dit 50. Dankie vir die 50, en so beheer het nou teruggekeer. Enige vrae, dan, op daardie? Ja? [Onhoorbaar]. Sê weer. O, goeie vraag. Sodat jy kan 'n parallel hier sien dat Ek is soort van die sny van 'n hoek op. In lyn 12, ek sê, kry positiewe int gee 'n int, maar deur dieselfde logika, is dit nou staan ​​om te redeneer dat in lyn ses, ek sê dat hoof opbrengste 'n int, maar wat het ons nog nooit gehad het in enige van ons programme? Ons het nog nooit melding gemaak van hierdie sleutel woord terugkeer. So dit blyk dat in C, ten minste die weergawe van dit wat ons gebruik het in 1999, tegnies, is dit gebeur outomaties vir jou. Elke keer as jy 'n program te implementeer en jy implementering van 'n funksie genoem hoof, daardie funksie sal terugkeer zero deur verstek as jy nie anders sê nie, en 'n nul is net 'n konvensie. Die wêreld terugkeer nul daardeur wat aandui dat alles goed gaan, effektief laat ons met 4000000000 moontlike dinge wat kan gaan verkeerde sodat as ons terugkeer een, wat dalk 'n kode dui dit beteken dat hierdie ding verkeerd geloop het. Ons kon terugkeer twee, wat beteken hierdie ander ding verkeerd geloop het. Ons kon terugkeer 4000000000, wat beteken dat hierdie ander ding verkeerd geloop het. En as jy nou dink oor jou eie PC of Mac, kan jy onthou dat soms jy kriptiese fout boodskappe van sagteware wat jy gebruik, en soms is dit 'n menslike vriendelike beskrywing, maar daar is dikwels 'n kode of 'n aantal op die skerm? As dit nie na vore kom, hou net 'n oog uit vir dit. Dit is tipies wat hierdie kodes verwys. Hulle is ingesluit in Microsoft Word en ander programme so dat as jy leer om 'n bug verslag met die maatskappy, kan jy hulle sê, o, ek het fout nommer 45. En 'n paar programmeerder terug by die maatskappy kan sien wat in sy of haar kode en sê, o, dit is, want ek het hierdie fout en dit is waarom die gebruiker het hierdie boodskap. Maar eerlik, dit is net 'n bietjie aandag aftrek en 'n bietjie geduld te aflei dat, ten minste op ons eerste paar programme, so ons het is weglating nie. Maar al hierdie tyd elke een van jou funksies hoof het in die geheim het hierdie lyn outomaties bygevoeg vir jou deur die samesteller, net deur die konvensie te red jy 'n geruime tyd. [Onhoorbaar]. Jy hoef nie dit in te sluit in die belangrikste. Dit is fyn. Jy hoef nie om dit te sluit indien jy implementering van 'n funksie soos hierdie. Anders sal die funksie plat uit sal nie werk nie. Maar in die belangrikste, is dit nie nodig nie. In 'n week of twee, sal ons begin om in daardie gewoonte wanneer ons wil begin dui foute. Regtig 'n goeie vraag. So vinnig verbale breek om te noem dat hierdie Vrydag, sal ons nie met 'n middagete per se nie, maar ons sal gesien word ete saam met sommige van die studente en personeel. As jy wil ons aan te sluit, voel vry om te gaan na cs50.net/rsvp. 06:00 die Vrydag. Ruimte is, soos altyd, beperkte, maar ons sal voort te gaan doen dit op 'n byna weeklikse basis as ruimte loop uit hierdie week. So het die fotonische lewe wat ons opgehou het om op Maandag was dat snare kan eintlik word geïndekseer in, wat beteken dat net jy kan kry by die eerste karakter, die tweede karakter, die derde karakter en so meer, want jy kan effektief te dink aan 'n string, soos hallo, as in hierdie geval vyf briewe binnekant van bokse. En jy kan kry by elk van dié bokse met wat sintaksis het ons stel op Maandag? Diegene vierkantige hakies op u sleutelbord. Dit is net bedoel om te gaan na plek nul. Ons begin tel by nul, so bracket zero kenne h, bracket een kenne dat e, en so meer. En so het al die tyd wanneer ons het al met behulp van toue en tik in "hallo" en "wêreld" en ander dinge op die skerm, dit is gestoor in bokse soos hierdie. En neem 'n raaiskoot. Wat beteken elke boks verteenwoordig fisies binnekant van jou rekenaar? [Onhoorbaar]. Jammer? Karakters. So 'n karakter, seker in die geval van snare en 'n karakter is net agt stukkies of een byte. So het jy waarskynlik ten minste vaagweg vertroud is met die feit dat jou rekenaar geheue. Dit het twee tipes geheue ten minste. Een daarvan is die hardeskyf waar jy red stop permanent, en dit is tipies groot sodat jy kan flieks en musiek, en so meer. Dan het jy 'n ander tipe van die geheue genoem geheue, R-A-M, Random Access Geheue, en dit is die tipe van die geheue wat gebruik word wanneer jou rekenaar is hardloop, maar as jy verloor krag of jou battery sterf, enigiets wat gestoor in die geheue verdwyn as jy krag verloor geheel en al, want dit is nie aanhoudend. Jy het gewoonlik, hierdie dae, 'n gig van dit, twee gigs, miskien meer. En die onderstebo van die geheue, is dat dit baie baie, baie vinniger as hardeskywe of selfs soliede toestand dryf hierdie dae, maar dit is gewoonlik duurder so jy het minder van dit. So vandag se gesprek verwys regtig na RAM, dat die tipe van die geheue wat bestaan ​​slegs terwyl daar is krag gevoer word in jou rekenaar. So wanneer jy tik in H-E-L-L-O, Tik op die klawerbord, is die H gaan in een byte van die geheue, is die E gaan in 'n ander greep van die geheue, is as die res van die woord. So onthou wat ons in staat was om laaste tyd om te doen, was dit. Laat my gaan voort en maak die lêer dat ons geroep string.c, en onthou dat dit lyk 'n bietjie iets soos hierdie. Laat my terug eintlik rol en verander dit presies wat dit lyk, string lengte van s. So kyk na die program hier. Ons sluit die CS50 biblioteek so wat ons kan gebruik om tou. Ons sluit standaard io.h sodat ons kan printf gebruik. Hoekom het ons sluit string.h? Dit was 'n nuwe, gister gesê. So ons wou string lengte. Str leng. Mense besluit jaar gelede, laat ons net wees bondige. In plaas van om dit "string lengte," Kom ons noem dit "str leng" en laat die wêreld figuur wat uit, en so is dit wat ons kry toegang tot met string.h. Dit is bekend. Dit is bekend. Dit is bekend. Dit is 'n bietjie nuwe. In lyn 22 - en ons sal terug te kom hierdie, maar vir nou weet - en jy sal net weet dit uit met lees die dokumentasie of indien jy het geweet C reeds - kry string soms kan skroef. As die gebruiker is regtig opponerende of saamwerk nie en hy of sy net nie tik enigiets aan die klawerbord of tipes so baie op die sleutelbord wat dit oorweldig die rekenaar se geheue, in teorie, kry string kon terugkeer iets anders as 'n string van die karakters. Dit kon terugkeer 'n spesiale waarde genoem NULL in hoofletters, N-U-L-L, en dit is net 'n sogenaamde brandwag waarde. Dit is 'n spesiale waarde wat dui iets sleg gebeur in hierdie geval. Dit is die afwesigheid van 'n string. So nul Ek check vir net sodat lang storie kort, str leng en ander funksies wat kom met C, indien hulle verwag 'n string, maar jy verby hulle die afwesigheid van 'n string, as jy slaag dit uitdruklik, die rekenaar of die program sal net blatante crash. Dit sal hang. Dit sal gooi 'n paar fout boodskap. Slegte dinge sal gebeur. Dus, selfs al is dit nog steeds nie goed gedefinieerde - Dit sal meer sin maak in 'n week of twee - in lyn 22, is dit net 'n voorbeeld van self verdediging foutkontroles net in geval een keer uit 'n miljoen iets verkeerd gaan, op minste my program sal nie crash. So as S nie gelyk aan iets wat sleg is, Ek het dit vir lus, en dit was waar ons gehad het dat die ander nuwe stuk van sintaksis. Ek het 'n lus vir iterating uit nul tot die lengte van s. En dan is hier, ek was 'n druk uit s bracket ek nie, maar hoekom het ek gebruik% c al 'n skielike in plaas van% s selfs alhoewel s is 'n string? Dit is 'n karakter, reg? S is 'n string, maar s bracket iets, s bracket ek waar ek is nul of een of twee, dit is 'n individu karakter in die string, en so is dit vir dat, moet printf om ingelig te word dat dit is inderdaad 'n karakter om te verwag. En dan onthou, wat het hierdie program eintlik doen? Gedruk is dit in kolomme. Ja, presies. Dit is net gedruk die woord wat ek tik in 'n kolom, een karakter per lyn. So laat ons sien dit weer. So maak string. Saamgestel OK. / String.. Laat my tik in H-E-L-L-O, ingaan en wel ek dit kry, een per lyn. So laat my nie een optimalisering hier. As jy daaroor dink, veral as jy het geprogrammeer voor, is daar waarskynlik 'n ondoeltreffendheid in lyn 24. Met ander woorde, is dit nie noodwendig die beste ontwerp. Eenvoudig, ten minste een keer jy onthou wat str leng is, maar dit is doen iets stom potensieel. Wat kan dit wees? [Onhoorbaar]. Presies. Dit is kontrole vir die lengte van s elke keer, selfs al is H-E-L-L-O is altyd iets tot vyf karakters. Elke keer deur hierdie lus, die vyf is nie verander. Ek kan die verhoog word ek nie, maar wat is die lengte van s op elke herhaling van die lus? Dit is vyf, is dit vyf, is dit vyf, en maar ek is tog vra om hierdie bevraagteken weer en weer en weer. Nou eerlik, die rekenaar is so damn vinnig, is niemand gaan 'n om op te let verskil in hierdie geval, maar hierdie soort van swak ontwerp besluite te kan begin toe te voeg tot as die opsteller self nie probeer om dit op te los vir jou wat dit gewoonlik nie wil nie, by minste in die toestel. So ek gaan om dit te doen. Ek gaan 'n komma te voeg na my eerste veranderlike, i. Ek gaan om te gee myself 'n ander veranderlike, noem dit 'n net deur konvensie van getalle, en dan is ek gaan om te wys n die waarde van string lengte van s. En dan gaan ek te verander my toestand te wees wat? Ek gaan my toestand te verander aan terwyl ek minder as n. So nou, hoeveel keer is ek die monitor van die lengte van s? Keer, maar dit is OK ek om seker te maak teen n weer en weer, want nou diegene waardes is eintlik nie verander. Nou vir nou, weet net dat wanneer jy noem 'n funksie, is daar 'n bietjie van ' oorhoofse, nie genoeg om jou te ontmoedig regtig ooit met behulp van funksies, maar seker as daar is 'n reël van die kode graag dat - en die lyne sal kry meer interessant voor lank - waar daar is 'n geleentheid om te dink, as ek Hierdie kode, hoeveel keer sal dit uit te voer? Jy sal begin om te sien met verloop van tyd die prestasie van jou programme kan inderdaad verander. Trouens, een van die probleem sit ons het gedoen in die afgelope jare behels implementering, as jy kan onthou uit week nul, 'n speltoetser, maar 'n speltoetser wat bedoel is om te ondersteun 'n woordeboek van 150,000 plus woorde wat ons gee julle. Jy sal 'n kode te skryf wat laai daardie woorde in die geheue, so in bokse soos ons gesien het op die skerm 'n oomblik gelede, en dan so vinnig as wat jy kan, jy moet in staat wees om 'n antwoord vraag van die vorm, is hierdie woord gespel? Is hierdie woord verkeerd gespel? Is hierdie woord verkeerd gespel? En in iets soos dit wat ons het gedoen in die afgelope jare is omskep dit in, al is dit op 'n opt-in opsionele basis, 'n kompetisie van spesies, waardeur die studente wat die minder geheue en minder gebruik tyd, minder CPU siklusse, beland borrel tot by die top van 'n bietjie leier raad of die posisie wat ons aan die kursus se tuisblad soos ons gedoen in die afgelope jaar. So weer, heeltemal opsioneel, maar dit praat met die ontwerp geleenthede wat voorlê sodra ons begin bou bo-op sommige van hierdie basiese boustene. So laat my gaan terug na hierdie diagram vir net 'n oomblik en openbaar 'n bietjie iets meer. Dit is inderdaad 'n string, en ons het geneem voordeel van 'n paar biblioteke, standaard io.h wat - Printf. Printf, onder andere. cs50.h, wat kry int en kry string en so meer, string.h, wat het str leng. Maar dit blyk daar is nog 'n ander. Eerlik, daar is baie, baie van kop lêers wat verklaar funksies vir biblioteke, maar dit is ctype.h eintlik gaan om 'n bietjie te wees voordelig, want ek gaan om voort te gaan en te implementeer 'n ander program hier. Laat my gaan voort en maak iets Ek het vooraf genoem capitalize.c, en laat ons 'n blik op hoe dit werk. Let daarop dat ek gebruik, in hierdie weergawe daarvan, drie bekende lêers. Let daarop dat in line 18, ek is om 'n reël van die teks. Kennisgewing in reël 21, ek beweer dat die volgende kode gaan kapitaliseer s, wat die gebruiker getik in, en hoe doen ek dit? Wel, ek neem - les geleer het uit vorige keer - Ek verklaar ek en N en iterating oor die karakters in die string. En wat is dan die blok kode in lyn 24 deur 27 doen in leketaal? Kleinletter terug. Presies. As s bracket i - so as die i-de karakter van s, wat 'n spesifieke kar in die string, is groter as of gelyk om 'n klein letter en - onthou dat dubbele ampersand gewys en - en dieselfde karakter, s bracket i, is minder as of gelyk Z te onderkas, Dit beteken dit is 'n A-of B of 'n C of dot, dot, dot, of 'n Z, wat beteken dit is klein. Wat wil ek doen in daardie geval? Wel, ek kan dit doen 'n bietjie kripties, maar laat se terg hierdie uitmekaar. Ek gaan printf noem, druk% c want ek wil om dit te herdruk karakter op die skerm. Ek is dan gaan s bracket ek, die te neem i-de karakter in s, en dan die rede waarom doen ek dit bietjie truuk hier, onderkas 'n minus kapitaal A? Wat is dit gaan te gee my, in die algemeen? [Onhoorbaar]. Presies. Ek weet nie regtig nie onthou nie - dit was 65 vir kapitale A. Ek het nie regtig onthou wat kleinletter a is, Maar maak nie saak. Die rekenaar weet. So deur te sê, onderkas n minus kapitaal A, dit is vreemd om te wees aftrek van 'n kar van 'n ander, maar wat karakters onder die enjinkap? Hulle is net nommers. So ook al die nommers is, Laat die rekenaar onthou eerder as om my die mens. So 'n klein letter minus kapitaal A gaan gee my 'n verskil maak. Dit gebeur te wees 32, en dit sou die saak vir die klein b en kapitaal B en so meer. Dit bly konstant, gelukkig. So het ek in wese probeer sê, neem die klein letter, trek af wat standaard verskil, en dat effektief veranderinge s bracket ek uit onderkas te, natuurlik, hoofletters, sonder my regtig na te dink oor of onthou, wat was daardie getalle het ons gepraat oor wanneer die agt vrywilligers het op die verhoog? Nou intussen, in die ander, al is dit nie 'n klein letter, soos bepaal deur lyn 24, net druk dit uit. Ek wil net die aan te raak karakters wat eintlik oorspronklik onderkas. So laat ons sien. Maak kapitaliseer. Saamgestel, OK. / Kapitaliseer.. En laat my tik in H-E-L-L-O in klein, Tik. En sien dat dit omgeskakel in hoofletters. Laat ek dit weer met 'n ander woord. Hoe oor die D-A-V-ek-D met die eerste D gekapitaliseer as 'n naam is tipies? Betree. Let daarop dat dit nog korrek is. Dit is net outputted dat die eerste D onveranderd via wat anders bou. So in gedagte hou, dan, 'n Paar van die dinge hier. Een, as jy ooit wil twee om te kyk voorwaardes in 'n keer, en jy kan hulle saam soos ons voorspel het. Jy kan vergelyk karakters in hierdie manier en doeltreffend te behandel karakters soos getalle, maar eerlik, dit is so damn kriptiese ek nooit gaan om te onthou hoe om vorendag te kom met hierdie van nuuts af sonder redenasie deur dit vir 'n hele 'n bietjie van die tyd. Sou dit nie gewees het lekker as iemand daar het 'n funksie genoem is verlaag wat kon antwoord vir my waar of vals, hierdie karakter is klein? Wel, gelukkig, elkeen het ctype.h het presies dit. Laat my gaan hier en voeg ctype vir c tipes, en nou laat my gaan hier en herskryf die lyn as volg. So as dit genoem is laer, ek eis, s bracket i, dan gaan ek om te verwyder hierdie twee lyne heeltemal. So nou iemand anders, ek hoop, geskryf 'n funksie genoem laer is, en dit blyk uit hulle gedoen het en hulle verklaar dit binnekant van ctype.h. En nou gaan ek reël 27 te verlaat alleen, ek gaan lyn 31 te verlaat alleen nie, maar sien hoe baie ek het strenger my kode. Dit is nou skoner. Dit is minder moeilik om te kyk deur want nou die funksie, ook, is so wonderlik vernoem dit net doen wat dit sê. So nou is ek gaan om dit te red. Ek gaan om te vergroot. En net soos in Scratch jy kan hê Boolse, boolse waar of vals is, dit is presies wat verlaag effektief opbrengste. Laat my heropstel. Laat my re-run. En nou, laat ons probeer dit weer, H-E-L-L-O, Tik. Dit is redelik goed. En probeer dit weer, maak seker dat ek het nie skroef iets up. Dit word gekapitaliseer as well. Maar dit is nie goed genoeg nie, want die ander ding wat ek gaan nooit te onthou nie, tensy ek werk deur dit regtig versigtig op, sê, papier hierdie damn lyn. Sou dit nie lekker wees as daar 'n funksie genoem na die boonste? Wel, dit blyk daar is in ctype.h as well. Ek gaan om voort te gaan en tik - laat my bring dat die lyn terug. In plaas van hierdie hier, laat my gaan voort en sê, plaasvervanger vir die% c die gevolg van die roeping van hierdie funksie te bo op die i-de karakter van s. En nou sien dit raak 'n bietjie gebalanseer. Ek het om tred te hou van hoeveel hakies Ek het geopen en gesluit. So nou is dit selfs skoner. Nou is hierdie program is om 'n beter en 'n beter ontwerp waarskynlik omdat dit baie, baie meer leesbare, maar dit is nie laat regstel. Maak kapitaliseer. / Kapitaliseer.. H-E-L-L-O. Kom ons loop dit weer D-'n-V-ek-D. OK, so ons is nog steeds in redelik goeie vorm. Maar nou na die boonste. Ek stel voor dat daar is 'n meer verfyning ons kan maak wat jou sal wees baie mooi, wat kan regtig draai up hierdie kode en regtig gee ons vyf uit vyf vir die ontwerp, byvoorbeeld. Wat sal lekker wees om ontslae te raak van? Wel, kyk hoe damn lank hierdie blok kode is net iets eenvoudig om te doen. Nou as 'n eenkant, as jy dalk ' gesien in super artikel die afgelope naweek, het jy nie nodig het om die streng krulhakies wanneer jy net een het reël van die kode, selfs al het ons voorgestel hou hulle so dat dit maak veel meer duidelik, soos in Scratch se U-vormige blokke, wat binne in die tak. Maar sou dit nie lekker wees as na die boonste, wanneer die lig van sy insette, het dit in hoofletters as dit nie, en wat sou wonderlik wees in die teenoorgestelde geval as dit is reeds hoofletters? Net verby dit deur en laat dit alleen. So miskien is dit nie dat. Ek kan probeer en hoop net dat dit nie, maar laat my stel 'n ander ding. In plaas van die gebruik van hierdie ingeboude terminale venster af hier, onthou dat hierdie vierkantige swart ikoon gee jou 'n groter terminale venster wat ek kan volle skerm indien ek wil hê? So dit blyk dat hulle is soort van snaaks genoem nie, maar daar is hierdie dinge genoem man bladsye, handleiding bladsye, man vir 'n kort, en ek kan toegang tot hierdie tik man - wat ek wil om te tik? Man na die boonste. En nou agterkom as daar 'n funksioneer binnekant van die rekenaar, in hierdie geval die toestel, wat net die bedryfstelsel Linux, gaan dit gee my 'n ietwat kriptiese stel uitvoer, maar jy sal vind in die tyd wat Dit is altyd geformateer pretty much die dieselfde so jy begin om gewoond te raak aan dit. Let op die top na die boonste en blykbaar is dieselfde dokumentasie vir te verlaag. Wie het dit geskryf is sny 'n paar hoeke en sit dit alles op een bladsy. Hierdie dinge 'doel in lewe is 'n te omskep brief aan boonste of klein. Let daarop dat onder Oorsig, die man bladsy word die onderrig van my wat lêer Ek het in te sluit om hierdie saak te gebruik. Dit gee my die handtekeninge vir hierdie funksies, beide van hulle, al het ons nou net omgee vir een. Hier is nou 'n beskrywing. Na die boonste vat die brief c na hoofletters indien moontlik. Nog steeds nie dat insiggewend, maar laat my nou kyk onder terugkeer waarde, die ding dit is terug oorhandig. Dus is die waarde wat is dat van die omskep brief of c indien die sukses nie moontlik was nie. Wat is c? Die oorspronklike karakter. Die oorspronklike karakter en ons weet wat deur die weer, gaan aan die samevatting, en elkeen wat dit geskryf het funksie het net besluit dat die insette om na die boonste en onderste is net arbitrêr gaan genoem word c. Hulle kon genoem het dit die meeste enigiets hulle wil hê, maar hulle het dit eenvoudig as c. So het ek geraadpleeg die man bladsy. Hierdie sin gerus stel my dat indien dit is nie 'n klein letter, is dit gaan gee my net terug c, wat volmaak nie, wat beteken dat ek kan ontslae te raak van my anders toestand. So laat my gaan terug na gedit, en nou laat ek net dit doen. Ek gaan my printf verklaring te kopieer. Ek gaan voort en reg binne te gaan die lus vir die druk wat uit en kry ontslae te raak van nou hierdie hele As konstruk. Was nie 'n slegte idee nie, en dit was baie baie korrek en in ooreenstemming met alles wat ons verkondig het, maar net nie nodig nie. Sodra jy besef sommige biblioteek funksie bestaan ​​dat iemand anders geskryf het, of miskien het jy elders geskryf het in die lêer, kan jy dit gebruik en regtig begin toeneem die kode. En as ek sê dinge soos goeie styl, die feit dat die persoon wat die funksioneer na die boonste, of voorheen is laer is wonderlik nuttig omdat hulle is baie beskrywende. Jy wil nie jou funksies te roep x en y en z, wat baie, baie minder betekenis. Enige vrae oor die reeks van verbeterings? So is dit voldoende om een ​​van die om te sê wegneemetes is selfs as jou eie probleem stel - dalk jou probleem stel een nie, maar beslis P sit twee en verder, selfs wanneer hulle is korrek nie noodwendig beteken hulle is perfek net nog of besonder goed ontwerp. Dit is die ander as te begin dink. So dit was 'n string binnekant van jou rekenaar se geheue, maar as jy 'n hele klomp van die karakters soos H-E-L-L-O binnekant van die geheue, en veronderstel dat jy in jou program noem kry string verskeie kere so dat jy noem kry string een keer, dan sal jy noem kry string weer. Wel, wat gaan aan gebeur oor tyd? Met ander woorde, as jy 'n lyn van kode, al is dit buite konteks, soos string s kry - Kom ons doen dit. String naam is gelyk aan kry snaar. So veronderstel dat die lyn van kode is bedoel die gebruiker om sy of haar naam te vra. Hierdie volgende lyn van kode is bedoel om te vra die gebruiker om sy of haar skool, en hierdie volgende lyn, en so meer. Veronderstel dat ons vra die gebruiker vir 'n ander en 'n ander en 'n ander string. Hulle gaan om te bly in die geheue op dieselfde tyd. Een is nie van plan om die ander te afranselen. Skool is nie vervang die ander. Maar waar het hulle al beland in die geheue? Wel, as ons begin om te trek op die skerm, wat ons kan gebruik om hierdie ding hier soos 'n swartbord, indien dit swart reghoek verteenwoordig my rekenaar geheue, ek gaan na willekeur begin deel dit op in klein blokkies, waarvan elk een greep van die geheue. Eerlik, as jy 'n GB RAM hierdie dae, jy het 'n miljard grepe van die geheue in jou rekenaar, so 'n miljard van hierdie blokkies. So is dit voldoende om te sê, dit is nie regtig te skaal. Maar ons kon hou teken al hierdie duidelik nie vierkante te skaal, en dit gesamentlik verteenwoordig my rekenaar se geheue. Nou kan ons net doen dot, dot, dot. So met ander woorde, as ek nou gevra word om die gebruiker get string te gee vir my 'n string, wat gebeur? As die gebruiker in "hallo", wat eindig up in H-E-L-L-O. Maar veronderstel die gebruiker dan tipes in - Eintlik moet ek dit nie gedoen het hallo, want ons vra hulle vir hul name. So laat ons gaan terug as ek dit kan doen. So as ek tik in D-A-V-ek-D vir my naam, maar onthou dat die tweede lyn van kode is kry string weer hul skool te kry. Waar is die woord wat die gebruiker tipes in te gaan om te gaan volgende? Wel, miskien is dit gaan om te gaan in H-A-R-V-A-R-D. So selfs al het ek getrek dit as twee rye, dit is net 'n hele klomp van die grepe in jou rekenaar se geheue. Daar is 'n probleem is nou, want nou as ek gebruik van geheue in hierdie baie redelike maar soort van naïewe manier, wat kan jy nie glo onderskei? Waar 'n mens begin en waar een eindig, reg? Hulle is soort van vervaag saam. So dit blyk uit die rekenaar doen dit nie. Laat my eintlik blaai terug in die tyd 'n paar karakters, en in plaas van Harvard gaan onmiddellik na die gebruiker se naam, kry die gebruiker eintlik, agter die skerms, 'n spesiale karakter plaas deur die rekenaar vir hom of haar. / 0, andersins bekend as die NuL karakter lastig genoem N-U-L, nie N-U-L-L, maar jy skryf dit as / 0. Dis net al nul stukkies is 'n merker in tussen die eerste woord wat die gebruiker se getik en die tweede. So Harvard eintlik eindig nou op as hierdie volgorde van die karakters en een meer / 0. So in ander woorde, deur met hierdie brandwag waardes, agt aangrensende nul stukkies, kan jy nou begin om te onderskei een karakter van 'n ander. So al die tyd wat "hallo" is eintlik "hallo" met 'n / 0, en Intussen is daar dalk baie goed wees nogal 'n bietjie meer geheue binnekant van die rekenaar. Laat ek 'n ander ding nou. Dit blyk dat al hierdie blokkies het ons die opstel, is dit, ja, snare, maar meer algemeen, hierdie dinge is skikkings. 'N skikking is net 'n stuk van die geheue dit is terug na Terug na terug, en jy gewoonlik gebruik om 'n skikking by wyse Die vierkant hakienotasie. So ons gaan hierdie nogal 'n bietjie te sien verloop van tyd, maar laat my gaan voort en oop te maak, kom ons noem dit ouderdomme. En sien wat ons kan doen met dieselfde truuks, 'n bietjie bietjie meer hier sintaks. So in lyn 17 van hierdie program - eintlik, ek hardloop die program eerste sodat ons kan sien wat die ding doen nie. Laat my noem maak ouderdomme stel hierdie program. / Ouderdomme.. Hoeveel mense is in die kamer? Noem dit drie. Ouderdom van die eerste persoon? 18, 19, en 20. En nou ietwat belaglik, ek het net het 'n program wat eeue diegene drie mense. So is daar duidelik 'n geleentheid vir 'n paar fun rekenkundige hier. Gelukkig het die wiskunde korrek is. 18 na 19, 19 het tot 20 en so meer. Maar wat regtig bedoel om te wees illustrasie hier is hoe ons dit stoor hierdie drie mense se ouderdomme. Laat my zoem op wat is hier aan die gang. So die eerste, die eerste paar lyne moet word steeds redelik vertroud. Ek is net waarna die gebruiker vir die aantal mense in die kamer. Toe ek gebruik kry int en doen terwyl te doen dit weer en weer en weer. Ons het gesien dat die patroon voor, maar reël 27 is 'n nuwe en eintlik baie nuttig, en sal word meer nuttig. Let daarop dat wat anders is in lyn 27 is dat ek blyk te wees verklaar 'n int genoem ouderdomme, maar wag. Dit is nie net int ouderdomme. Daar is hierdie vierkantige hakies, binnekant van wat n. So het die bracket n in hierdie konteks nie binnekant van 'n printf verklaring hier, maar in hierdie enigste lyn 27, die lyn is sê, gee my 'n ints, wat elk is van die tipe int. So dit is 'n emmer, so te sê, van, in hierdie geval, drie heelgetalle terug na terug na terug sodat ek effektief het drie veranderlikes. Die alternatief te wees duidelik, sou wees nie. As ek wou die eerste student se ouderdom, kan ek dit doen. As ek wou die tweede student se ouderdom het ek kan dit doen. As ek wou die derde student se ouderdom, kan ek dit doen. En God verbied ons moet almal se ouderdom in hierdie kamer - Ek bedoel, dit is 'n heck van 'n baie van die kopie, plak weer en weer en weer. En plus een keer Ek stel hierdie program, As 'n ander student loop in meer uit van daardie deur, nou my nommer veranderlikes is verkeerd. So, wat is lekker om oor 'n skikking is as Sodra jy begin voel jouself kopieer en plak, is die kans wat nie die beste benadering. 'N skikking is 'n dinamiese potensieel. Ek weet nie vooraf hoe baie mense gaan wees in die kamer, maar ek weet ek moet n van hulle, en ek sal uit te vind n wanneer die tyd kom. Hierdie lyn van die kode nou beteken, gee my 'n stuk van die geheue wat lyk soos hierdie waar die aantal bokse op die skerm is heeltemal afhanklik van n wat die gebruiker getik in So nou die res van hierdie program is eintlik redelik soortgelyk aan wat ons net gedoen het met die karakters. Kennisgewing Ek het 'n lus vir begin in lyn 30. So reg nadat ek die skikking, het ek Itereer van y is gelyk aan nul tot n. Ek het net hierdie leersame printf boodskap net sê, gee my die ouderdom van die persoon #% i, so nommer een, nommer twee, nommer drie. En hoekom het ek dit doen? Eerlik, mense verkies om te tel van die een op up terwyl die rekenaar wetenskaplikes, nul up. rekenaar wetenskaplikes is nie van plan om gebruik hierdie soort van program, so ons is gaan net begin tel by een soos normale mense. En nou in lyn 33, die effens sien verskillende stuk van sintaksis. Die i-de ouderdom in daardie veranderlike van tipe skikking gaan 'n int te kry. En nou laastens, dit is net rekenkundige hier. Ek het besluit om in 'n aparte lus om te eis 'n tyd verby, en nou in hierdie afsonderlike lus, hierdie lyne uit te voer. 'N jaar van nou af, persoon wat ek sal wees i jaar oud, maar kennis van hierdie is nie die veranderlike i. Dit is nou% i vir int. En kennis as die eerste plekhouer, ek plug in i plus 1, sodat ons tel soos 'n normale persoon. En dan vir die waarde van hul ouderdom, vir i jaar oud, ek neem ouderdomme bracket Ek - en hoekom doen ek plus een hier? Hulle het net bejaardes. Dit is my dom keuse van programme. Hulle het net tussen die ouderdomme van een jaar. Ek kan tik in enige getal wat Ek het eintlik daar wil hê nie. So, wat is eintlik al die relevansie hier? Wel, laat ek eintlik blaai terug hier en verf 'n prentjie van wat voorlê. Wat ons sal moet doen met ons volgende Probleem sit twee is rondspeel in die wêreld van kriptografie. So dit is 'n string van die karakters, so 'n volgorde van verskeie karakters, en wat sê dit? Dit is nie in die aanlyn-weergawe van die skyfies. So ek beweer dat dit gelyk het, 'n stupid advertensie van baie jare gelede wat kan eintlik onthou een van sy oorsprong. So, dit is 'n voorbeeld van enkripsie of kriptografie. Dit blyk dat as jy wil eintlik stuur inligting of deel inligting met iemand veilig, soos 'n boodskap soos hierdie, kan jy klouter die letters. Maar tipies, die woorde is nie roer lukraak. Hulle is verschuiving in een of ander manier of verander in een of ander manier sodat - oops. Dit is 'n prettige spoiler vir die volgende keer. So kan jy die kaart wat is blykbaar O aan B. Let daarop dat lyne kapitalisasie-wyse. Blykbaar r word e. Blykbaar F-H-E-R word S-U-R-E. So dit blyk daar is 'n afbeelding, en in hierdie geval is daar 'n redelik dom kartering of iemand het gedink dit uit? Dit is iets wat die naam SC 13, draai 13. Dit is die domste van enkripsie meganismes, omdat dit letterlik net voeg 13 aan elkeen van die letters, dom in die sin dat as jy net het 'n bietjie van die vrye tyd op jou hande en 'n potlood, of jy dink net dit deur in jou kop, kan jy probeer alle moontlike toevoegings - een, twee, drie, dot, dot, dot, 25 tot net draai die hele alfabet, en uiteindelik, sal jy uitvind wat hierdie boodskap is. So as jy iets soos hierdie in graad skool verby boodskappe aan jou beste vriend, as jou graad skool onderwyser bloot deur die boodskap en brute gedwing om die oplossing, jy mag gekry het 'n antwoord deur dit. Nou natuurlik, in die werklike wêreld, kriptografie is meer gesofistikeerd. Dit is 'n teks uit 'n rekenaar stelsel wat gebruikers en wagwoorde, soos byna almal van ons doen, en dit is wat jou wagwoord sterkte lyk as wat gestoor word op jou harde ry, maar in geïnkripteer vorm. Dit is nie net 'n rotasie van letters, A is B en B is C. Dit is veel meer gesofistikeerd, maar dit gebruik wat algemeen bekend as geheime sleutel kriptografie. Hierdie foto vertel die volgende storie met 'n paar ikone. Aan die linkerkant, ons het wat ons bel plain text. In die wêreld van kriptografie, plain teks is net die oorspronklike boodskap geskryf in Engels of Frans of enige taal hoegenaamd nie. As jy wil om dit te enkripteer, sal ons slaag dit picturaal deur 'n slot, so sommige van soort algoritme, 'n funksie of program dat iemand geskryf wat deurmekaar die briewe hopelik meer complicatedly as net die aanbring van 13 aan elkeen van hulle. Wat jy uit dat die proses in die middel is daar genoem word cyphertext. So soort van 'n sexy woord. Dit beteken net dit is die geënkripteerde weergawe van die gewone teks. En net as jy het wat dieselfde geheime, 13 of minus 13, is jy in staat te decrypt 'n boodskap soos dit. So in Probleem sit twee, een van die dinge wat sal jy doen as in die Hacker Edition, sal jy 'n kode te skryf aan kraak hierdie wagwoorde, uitzoeken wat hulle was en hoe hulle geïnkripteer, al doen ons gee jou 'n bietjie van leiding langs die pad. In die Standard Edition, stel ons 'n paar van die karakters, enkripsie meganismes, een genaamd Caesar, een genoem Vigenere, wat nog rotasie getalle waar 'n raak iets, B raak iets, maar jy het om dit te doen nie programmaties want daar sal inderdaad 'n geheim sleutel wat betrokke is wat gewoonlik 'n aantal of 'n navraag wat slegs die sender en die ontvanger van hierdie boodskappe moet verstaan. Nou, dit het eintlik inkarnasies in die werklike wêreld. Dit, byvoorbeeld, is klein wees Annie se geheime dekodeerder ring, en jy eintlik kan implementeer rotasie getalle - A word iets, B word iets - met 'n paar van die wiele, een aan die buitekant, een aan die binnekant so dat as jy draai die wiel of die ring, kan jy eintlik reël om die letters met verskillende letters, om 'n geheime kode. En so as die fotonische lewe vir vandag, wat ek gedink ek wil doen, is om 'n bietjie van throwback dat as jy draai op die TV op 24 Desember, kan jy kyk na die movie ad nauseum vir 24 uur in 'n ry. Maar vir vandag, sal ek dit oopmaak hier en gee ons net twee minute van 'n pedagogies betrokke Christmas Story met 'n bietjie mede vernoem Ralphie. [Video speel] -Laat dit bekend aan alles en almal wat Ralph Parker word benoem lid van die Little Orphan Annie geheime sirkel en die reg tot al die eer en voordele voorkom daartoe. Onderteken, Little Orphan Annie. Onderteken, Pierre André in ink. Honneurs-en voordele wat reeds op die ouderdom van nege. [Skree op Radio] Kom, laat ons kry op met dit. Ek hoef nie al daardie jazz oor smokkelaars en Pirates. -Luister môreaand vir die sluiting avontuur van die swart seerower skip. Nou, dit is tyd vir Annie's Secret Boodskap vir u lede van die geheime sirkel. Onthou, kinders. Slegs lede van Annie's Secret Circle kan ontsyfer Annie se geheime boodskap. Onthou, Annie, afhangende van jou. Stel jou penne te B2. Hier is die boodskap. 12, 11, 2 - -Ek is in my eerste geheime vergadering. -25, 14, 11, 18, 16 - -Pierre was in groot stem vanaand. Ek kan jou vertel dat vanaand se boodskap was werklik belangrik is. -3, 25. Dit is 'n boodskap van Annie haarself. Onthou, vertel nie vir enigiemand. -90 Sekondes later, is ek in die enigste kamer in die huis waar 'n seuntjie van nege kon sit in privaatheid en dekodeer. Ha, B. Ek het na die volgende. E. Die eerste woord is "wees." S. Dit is makliker kom nou. U. 25. Dit is R. -Kom, Ralphie. Ek moet gaan. -I'll regs af wees, Ma. Gee gefluit. -T. O. Maak seker om te. Maak seker dat jy wat? Wat was Little Orphan Annie probeer om te sê? Maak seker dat jy wat? -Ralphie het Randy het om te gaan. Sal jy asseblief kom? -Alle reg, Ma. Ek kom gou uit wees. -Ek is besig om nader te nou. Die spanning was verskriklik. Wat was dit? Die lot van die planeet kan hang in die weegskaal. -Ralphie, Randy's moet gaan. -I'll reg uit te wees vir huil hardop. -Amper daar. My vingers vlieg. My gedagte was 'n staal trap. Elke porie vibreer. Dit was amper duidelik. Ja, ja, ja, ja, ja. -Maak seker dat jou Ovaltine te drink. Ovaltine? 'N morsige kommersiële? Die seun van 'n teef. [Einde video-vertoning] Spreker 1: Dit is CS50, en dat sal Probleem sit twee wees. Sien julle volgende week. Spreker 2: By die volgende CS50, dit gebeur. Spreker 1: So een onderwerp ons het nie gekyk na dusver is wat van die funksie wysers. Nou, 'n funksie wyser is net die adres van 'n openbare funksie nie, maar baie soos - seun van 'n -