[Speel van musiek] ANDI Peng: Dit is CS50, en welkom om week twee van artikel. Dit is eintlik terwyl week twee van ons class-- eintlik, die eerste week het ons artikel gehad het. Opsteek van hande, hoeveel van julle almal gekom het om super artikel verlede week? OK, dit is OK. Dit is OK. Hoeveel van julle gekyk super artikel verlede week? OK. En julle het fyn op die probleem stel een? So ek gaan om dit te neem dat ons 'n klomp van werklik intelligente kinders in hierdie klas en dinge sal goed wees. OK. So first-- Eerstens, ons is maar net gaan kortliks gaan oor die agenda vir vandag. Ons sal praat oor natuurlik logistiek. Baie van julle het waarskynlik het vrae oor hoe dinge loop in hierdie kursus. Ons sal hulle verhoor. Ons gaan kortliks gaan oor loops in die geval enige van julle ouens gemis super afdeling. Ons sal praat oor ASCII kartering. Ons sal praat oor skikkings, funksies, command line argumente. En ten slotte, wat julle waarskynlik almal regtig wil om hier te wees om te leer oor, is jou pset2. Ons sal 'n paar mooi truuks en wenke vir hoe om dit te doen. OK. Ook, tweedens, ons het baie lekkergoed hier. Enigiemand wat lekkergoed hou, net hier op. Gryp n paar. Ek het 'n klomp. Ons het 'n ton in die kantoor. Ek wil nie regtig om lekkergoed eet die hele dag. Julle moet al die lekkergoed eet, want ek het dit hier vir julle. Net eet snoep. Daar sal lekkergoed wees elke afdeling. So die eerste, wie is ek? My naam is Andi Peng. Ek is die hoof van die TA CS50 hier by Yale. En bykomend tot wat, ek sal ook be-- As iemand jou loop sou like-- buddy, jou skouer om op te huil. As die nag voor as gevolg van jou pset, jy het geen idee wat aangaan, hit me up. Ons sal saam medelye, ensovoorts. Weet net dat ek hier is as 'n hulpbron vir jou as die voorste linie om te help jy uitvind hoe ouens om probleme in CS50 en verder op te los. My e-pos is andi.peng@yale.edu. Ek sal ook uit te stuur 'n individu e-pos met my telefoonnommer in dit so dat nie almal op die internet kan my telefoonnommer te sien. Voel vry om my enige tyd bel. Ernstig, my selfoon is gewoonlik aan my hand. Ek kan nie reageer binne 'n paar minute. Ek kan nie binne 'n paar uur te reageer. Maar ek kan jou waarborg, as jy my e-pos, as jy my bel, teks my, ek sal reageer binne 24 uur. Dikwels, sal ek reageer voordat dat, aangesien ek verstaan dat almal het 'n paar probleme, en jy wil jou antwoorde baie vinnig beantwoord word. Maar, as jy bel my 30 minute voor dat die stuk wat as gevolg van Donderdag night-- wees, Andi, help my, Ek het nie started-- ek kan gee julle wat die skouer om op te huil. Maar is dit dalk tyd om te dink oor wees hoe om nie te doen dat die volgende keer. OK. Oops. Hoe kan ek terug te gaan? Daar gaan ons. So in hierdie kursus, het ons 'n ton van ondersteuning vir almal. In bykomend tot net afdelings hier, wat jy elke week te kry om te bestee 90 wonderlike minute met my ons het ook kantoorure. Hoeveel van julle ouens het reeds om kantoorure vir hulp? Groot. Dit is regtig goed om te sien, want ons het 'n personeel van meer as 45 Tas en GR'e opgelei vir hierdie kursus wat hier is vir die hulp wat jy ouens met jou psets. Maandae hulle gehou in die TEAL klaskamer in 17 Hill House hier aan die Yale. Dinsdae en Donderdae, hulle gehou in commons. 8:00-11:00 pretty much elke weekdag. Kom in, kom uit. Enige probleem, geen problem-- net kom in, en dan sal ons jou help met dit. Tweedens, benewens kantoorure en artikels, het ons ook kortbroek. Het iemand al ooit gesien hoe 'n paar van die kortbroek of ipv in die video's op die webwerf? OK. So hulle is baie, baie nuttig. Ons pragtige Harvard produksie span daar op daardie skool noorde, het hulle verfilm en vervaardig hierdie ongelooflike walkthrough videos. Hulle sal neem jou stap vir stap deur hoe om te gaan oor die oplossing van 'n probleem. Dikwels, as jy verward oor 'n eenvoudige konsep, 'n enkele konsep, neem 'n blik, want ons het waarskynlik 'n kort op dit iewers op ons webwerf. En dit is gewoonlik 'n groot bron om te kyk vir wanneer jy die eerste is verloor oor hoe om 'n probleem te hanteer. Derde, ons het ook study50 en reference50. So bestudeer 50 op die webwerf is net 'n skakel. Dit is, dink ek, study.cs50.net of iets soos dit. Google dit net. Ons het baie van skyfies voorberei. Ons het baie van kortbroek en walkthroughs-- dinge al saamgestel baie mooi en netjies vir julle almal om deur te blaai, sien enige konsepte dat jy verward oor. Dit sou waarskynlik gedek daar in study50. Reference50-- soortgelyk. Ons het 'n baie verskillende notas geredelik beskikbaar is vir jou beskikking. En laastens, ons het wat is genoem CS50 Bespreek, 'n forum in wat, indien die aand voor jy doen jou probleme, sê jy het 'n vraag. Teken in om CS50 Bespreek. Post jou vraag. En dan een van die hundreds-- miskien, thousands-- van eweknieë neem hierdie klas online sal aanmeld in. En miskien iemand kan kry jou antwoord voor 'n TA kan. Dit is in wese net 'n aanlyn forum wat ons almal kan gebruik om ons probleme te bespreek. Dis koel. OK. So probleem sit. Ons is oor die reg in die dik van die probleem sit twee. Baie van ons het reeds het gesukkel om deur die probleem te stel een. Ons weet reeds dat miskien wag vir die laaste nag om jou pset doen is nie die slimste ding om te doen in CS50. Wenke en wenke hoofsaaklik vir die sukses is lees die hele spec. Hoeveel van julle het reeds lees die spec vir pset 2? OK. Dit is 'n vaste bedrag. Ek weet julle ouens het waarskynlik erken nou die specs is regtig lank. Hulle is regtig, regtig lank. Dit is regtig moeilik om elke reël gelees van daardie versigtig woord vir woord. Jy wil net vlugtig na die plek waar dit vir jou vertel om iets te doen. Ek kan jou verseker, dit nie doen nie. As jy dit doen, jy waarskynlik gaan iewers mis waar dit vir jou vertel hoe om 'n probleem te begin of dit vir jou vertel wat om te naam jou probleem of dit vir jou vertel, dit is waarskynlik die beste manier om te begin doen jou probleem. En dan sal jy verloor. As jy probeer om te lees van jou spec halfpad deur, 'n baie van die belangrike information-- in dat jy nie gaan in staat wees om werklik toegang. So lees die hele spec. Probeer om die hele spec te lees voor jy kom na afdeling, want dan, wanneer ons praat oor die pset, ons almal kan 'n idee van wat aangaan. Tweedens, dit is 'n konsep dat ek sal graag verwys 'n baie gedurende die kursus semester. Maar in wese, ontmoet ons halfpad, reg? My as jou TA en Jason as natuurlik bestuurder en Scaz as jou professor en Dawid as jou professor en al die ander pragtige Tas in hierdie kursus, assistente in hierdie course-- Ons sal ons bes doen om te verseker dat jy is ingestel tot sukses in hierdie kursus. Ons sal hou afdeling. Ons sal kantoorure te hou. Ons sal jou selfoon beantwoord oproepe, beantwoord jou e-posse, doen alles in ons vermoë om te maak seker dat jou vrae beantwoord. Maar ons help ook uit. Ontmoet ons halfpad. As jy kom na kantoorure nie het gegaan aan artikel, nie gesien die lesings, sonder idee wat aangaan, soos, help my. Ek gaan om te wees soos, wel, ek is jammer. Is dit dalk tyd om te leen wees dat die skouer om op te huil, want ek is nie seker wat ek kan doen om jou te help as jy nie probeer om ten minste help jouself 'n bietjie in die begin. Ontmoet ons halfpad. Jy weet, kom asseblief bereid is om te beantwoord en kry gereed om betrokke te raak in die materiaal. Dit maak dinge soveel makliker vir almal wat betrokke is. Ja, dit is pretty much dit. Gradering. So op die leerplan, dit is redelik in-diepte oor hoe ons graad. Maar in wese, die afbreek in hierdie is 50% van jou graad sal die psets, wat is 'n pragtige, want dit is waar jy spandeer die oorgrote meerderheid van jou kursus tyd. Vasvrae 40%, en jou finale projek sal 10% wees. Daar sal twee vasvrae regdeur die loop van die semester. Ek dink die tye en datums is ook op die leerplan. Die manier waarop ons sal word die formaat van jou psets is dat ons in wese vier waardes wat ons toewys aan elke graad. Ons het 'n waarde van omvang, korrektheid, ontwerp, en styl. So as jy sien, dit is soort van ons formule vir die berekening psets. Drie gee ons die mees gewig korrektheid, want natuurlik jou afrigter moet die toets vir die gevalle dat ons dit wil hê om te toets vir. Julle het almal check50 tot jou beskikking. Dit is 'n baie nuttige funksie dat julle kan almal laai jou kode om ons bedieners, waar ons sal check dit vir jou. En jy het gesien die frowny gesigte smiley gesigte. Hulle is regtig, regtig nuttig. Moet asseblief nie die student wat probeer hou om hardcode in al die antwoorde op hulle. Ek het beslis gesien hoe 'n pset waar iemand het gesien hoe al die waardes van check50 en hulle het net hard gekodeer in-- as hierdie nommer, druk die nommer. As dat die getal, druk dat die getal. Doen dit nie. Selfs al is tegnies check50 is korrek, jou manier van die oplossing van die probleem is nie korrek nie. So net gebruik check50 spaarsamig. Maar ook seker maak dat jy verstaan ​​hoe dit funksioneer, die program funksioneer bykomend tot check50, omdat ons nie elke kan toets moontlike geval van check50. Ons sal toets 'n paar van hulle. Ontwerp is in wese, hoe goed ontwerp is jou kode? As jy kopie-plak verskeie reëls van die kode baie, baie keer. Miskien het jy nie baie het die beste ontwerp in jou kode. Miskien is dit tyd dat die lus te voeg. Wese, hier is dit net al oor probeer om jou kode te doen, probeer om jou kode so doeltreffend skryf as moontlik sodat jou program loop so gou as moontlik. Ten slotte, ons het styl. So styl is soort van 'n arbitrêre, subjektiewe term. Ek weet ons het amptelik 'n styl 50 gids vir CS50, waar dit vir jou vertel, o, jy moet 'n spasie hier. Jy moet soort van formaat jou kode op hierdie manier. Jy moet dinge noem hierdie manier. Ek het nie regtig omgee, per se, hoe jy kies om jou kode styl, net so lank as wat jy konsekwent bly. Byvoorbeeld, as jy wil om laat 'n spasie na jou vier voor jou vier lus, doen net dat elke keer. Moenie soort dit doen. Moenie ander kere nie doen nie. As jy wil om krullerige hou draadjies ruimte 'n sekere manier, net altyd dit so. Moenie soort iewers doen hier en iewers nie daar nie. Wanneer ons gradering, dit is werklik moeilik as ek het geen idee hoe jy opmaak jou kode, dinge is gek en uit plek. As jy net konsekwent hou dit, dit is baie makliker vir my as die groter in staat wees om jou kode te lees. Dit is baie makliker vir jou as 'n student in staat wees om te kyk deur jou kode en kyk wat is verkeerd met dit streep hoekom daar kwessies. Styl is een van die maklikste dinge julle ouens kan doen om volle tellings te kry. Wese, as jy net omgee, as jy betaal vyf minute van die aandag om jou kode elke week, moet jy wees om volle styl punte. Ten slotte, ons het wat genoem die vermenigvuldiger van omvang. Scope-- Ek weet dit is 'n groot woord, veral in hierdie klas. Maar omvang, alles wat middel is dat jy probeer die psets na die beste van jou vermoë. As jy draai in drie uit van jou vier probleme en nie eens probeer die laaste een, jy waarskynlik gaan 'n paar punte verloor op omvang. Selfs as jy net die probleem begin, doen jou beste om te loop deur dit. Selfs as dit nie werk nie, draai dit in, want dit toon en toon aan ons dat jy probeer, dat jy stel probleem probeer na die beste van jou vermoë. En dan kan ons jou volpunte vir omvang. Omvang is ook baie belangrik vir wanneer ons praat oor die laagste pset telling drop. So in die loop van die semester, julle het nege psets. En ons sal eintlik val die laagste punt uit die nege, maar net as jy het volle omvang punte. So as jy draai in 'n onvolledige pset, Ongelukkig kan ons nie dat 'n mens laat val, omdat jou omvang punte is nog nie voltooi nie. So selfs as jy het die aaklige week waar jy sterf en jy siek is of jou hond sterf, jou kat sterf, en jy oorlaai met huiswerk, net probeer die pset. Doen dit na die beste van jou vermoë. As dit nie werk nie, beteken dit nie saak nie. Draai dit in. Ten minste kan ons gee jy wys vir poging. A vir poging in hierdie klas. Ten minste laagste telling druppel vir poging. So ja. Dit is pretty much dit. Is daar iemand wat vrae het so ver oor hoe ons graad in die klas? Of enige van hierdie? Enige van hierdie so far-- afdelings, kantoorure? Koel. OK. So, dit is 'n onderwerp wat nie een regtig daarvan hou om oor te praat. Ek het nie regtig wil om te praat oor dit. Julle ouens het nie regtig wil om te hoor my daaroor te praat. Maar helaas, ons almal het om daaroor te praat. David spandeer 20 minute 'n lesings daaroor te praat. En dit is die onderwerp akademiese eerlikheid. So het ons almal hier het waarskynlik geskryf 'n opstel iewers in ons Yale loopbaan. Ons het waarskynlik gekry 'n praatjie waar ons is aangesê om nie plagiaat pleeg ons opstel, want dit werk is nie ons s'n nie. In rekenaarwetenskap, ons het dieselfde soort konsep. Alle werk wat jy inhandig, al-kode wat jy skryf moet kode wat jy geskryf het nie. Indien kode wat jy het nie gekopieer van elders. Moet nie wees dat kode jy googled en plons in en jy weet nie regtig of dit werk. Jy het soort van 'n gevoel van wat dit doen, maar nie regtig nie. Wanneer jy twyfel, in wese, dit is net redelik wees. Op ons leerplan, het ons 'n hele lys van dinge sien ons as redelike versus nie redelik. Byvoorbeeld, redelike is jy en jou vriend bespreek wat die beste manier om te gaan oor logies 'n probleem oplos. Dit is redelik redelike. Wat sou nie redelik wees, is as jy ouens bymekaar, getik dieselfde kode, en draai in die dieselfde kode. Dit is nie redelik. Dieselfde ding, soort van 'n opstel. As jy wil om te bespreek met jou vriend, hey, dit is wat ek wil hê om te skryf oor. Dit is die stappe wat ek wil neem om daaroor te skryf, groot. Dit is wonderlik. Asseblief saam met mekaar. As jy ouens begin skryf dieselfde ding, draai in die dieselfde essay, wat minder OK. So wanneer jy twyfel, net nie dit doen. Hier het ons in CS50, ons het skrifte wat uitgevoer om te outomatiseer om te toets nie net die korrektheid van jou kode, maar ook die uniekheid van jou kode. So moet asseblief nie sit ons in die posisie van om jou saak te verwys na EXCOMM. Asseblief net vir almal, laat ons net maak dit 'n wonderlike ervaring. Almal leer beter, ons almal is gelukkiger, en ons is almal ingestel om slaag in hierdie kursus. Iets wat baie unieke oor hierdie klas dat ek dink almal moet regtig aandag te gee aan, is dat ons wat die spyt genoem klousule in ons leerplan. So in wese, binne 72 uur, as jy glo jy iets gedoen het jy is nie regtig seker is toepaslik, kom asseblief na ons. Ons belowe dat binne 72 uur sal ons die saak te hanteer onsself sonder om te verwys na 'n hoër gesag in die administrasie. So as jy kom na my toe en sê, Andi, hey, ek is regtig jammer, maar ek dink daar is 'n paar lyne in my kode gisteraand dat ek soort van googled, afgeklim van stapel Oorloop, kopieer en plak, en ek is baie, baie jammer oor wat, laat my weet. Moet asseblief nie net laat dit sweer en net hoop dat ek dit vang. Ons sal dit te vang. Net na my gekom. Laat my weet binne 72 uur. Ons sal uitvind 'n oplossing. En ons belowe dat ons nie sal verwys na universiteit owerhede wese. So dit is in jou beste belang net eerlik met almal betrokke in die kursus. OK. OK. So nou, vinnig voor Ek skuif op, nie almal het ten opsigte van die logistiek vrae oor hoe kursusse ons gaan om te hardloop, hoe afdelings gaan om te hardloop, enige van die wat? OK. Ja. GEHOOR: [onhoorbaar]? ANDI Peng: Ja. So quizzes-- hoeveel van julle is in die afdeling Maandag / Woensdag? Hoeveel van julle is in Dinsdag / Donderdag? OK, so dit is 'n soliede split hier. So die manier waarop ons loop dit aan die Yale is dat ons gaan twee afsonderlike het quizzes-- een vir elke section-- dat sal gedurende klas. Ek dink dit is Oktober, die einde van Oktober, iets soos dit, as een week van die quiz. Ja, so kom net na die klas. Op daardie Maandag of Woensdag, jy sal die quiz neem. Op daardie Dinsdag of Donderdag, jy sal 'n ander quiz neem. Maar dieselfde materiaal gedek sal word. Ja. Goeie vraag. Ja. GEHOOR: Waar moet ons gaan na ons grade kontroleer? ANDI Peng: Ja. So ek sal uitstuur n e-pos wat ookal elke week wanneer vasvrae is graded-- of, Jammer, wanneer psets gegradeer word. Psets word gewoonlik draai in deur die middag of Vrydag. So ek belowe dat ek sal probeer om hulle terug te kry om jou te deur die middag van die volgende Vrydag. Wanneer ek 'n graad pset, sal ek stuur 'n kennisgewing op die graad boek wat vertel jy jou telling kan aanlyn besigtig word. So reg om hierdie week, nadat ek voltooi gradering psets verlede week se julle ouens sal 'n e-pos te kry kennisgewing wat jy vertel, hey dit is waar jy gaan na jou grade besigtig. En jy kan elke sien uiteensetting van jou grade. Jy kan kommentaar te sien. O, vinnige ding ook. Die kommentaar afdeling in die groot boek is waar ek sal waarskynlik spandeer die meeste van my tyd gradering. So een ding wat werklik belangrik wanneer julle ouens lees is jou grade op jou psets is nie net op soek by die fisiese telling maar ook die tyd neem om regtig my kommentaar te lees. Dikwels dat gee vir jou terugvoer oor hoe jy 'n probleem is die oplossing. As jy nodig het om te doen iets wat 'n bietjie beter, opbouende kritiek is gewoonlik beste gegee in daardie kommentaar afdeling. So asseblief, asseblief, ek gaan om tyd te spandeer skryf kommentaar. Asseblief, ek sal dit baie waardeer as jy ouens die kommentaar sou lees. OK. Koel. Alles reg. So ons gaan begin praat en net vinnig hersiening sommige van die materiaal van week nul net so ons is op die regte bladsy vir begin probleme hierdie week. So die while lus is een van die drie tipes lusse ons vroeër in hierdie klas bespreek word. 'N Rukkie lus wese geskrywe is in die sintaksis waar, terwyl 'n sekere toestand, doen dit herhaaldelik, reg? Dink aan dit in hierdie grafiese hier. Jy gaan om te begin op 'n sekere punt in jou kode. Jy gaan die lus toestand betree if-- ek nie know-- x is minder as een. As dit waar is, gaan jy om die lus liggaam uit te voer. En jy gaan hou doen wat weer, weer, weer, oor en over-- wat is die rede waarom dit is 'n loop-- totdat jou toestand word onwaar. So op hierdie manier, 'n while lus is een van die makliker maniere om enige soort van toestand skryf dat moet oor en oor en oor herhaal. Net versigtig wees wanneer jy skryf 'n soort van lus dat jy 'n uitgang toestand sowel as 'n werk na wat dit ookal is sodat jou lus nie net hardloop oor en oor oneindig. In elk geval, jy gaan wil om seker te maak dat jy 'n aspek van die verandering is jou kode of aan die einde van die lus net om seker te maak dat jy 'n manier van vorder op pad na die toestand wat jy wil om te voldoen aan tot einde. Maak dit sin om almal? Ons het net nie wil wees vasgevang in hierdie spiraal waar ons gaan om en om en daar is geen manier om die lus te breek. En elke lus wese het 'n manier om dit te doen. OK. Tweedens, baie van julle in jou Mario psets waarskynlik moes diens hierdie tipe van lus. Dit is bekend as 'n doen terwyl loop. Eerste van alles, kan iemand my vertel wat die verskil tussen 'n doen while lus en 'n while lus is? Ja. GEHOOR: Die doen terwyl lus loop op die eerste [onhoorbaar]. ANDI Peng: Ja, presies. So 'n doen terwyl loop nie altyd alles is binne die doen, binne die hakies daar en doen daardie toestand voordat die monitor vir the-- jammer, doen dit code voordat kontrole vir die toestand. En dit is veral relevant vir ons hier in hierdie klas, omdat die meeste keer ons gaan wil aanspoor die gebruiker vir 'n soort van insette. En dan, afhangende van die insette wat hulle gee ons, dan kan ons evalueer, o, doen ons nodig het om hulle weer gevra? So in Mario, as die gebruiker jou gegee 'n negatiewe hoogte, byvoorbeeld, jy gaan eerste vinnige en doen wat is binne-in. Dan gaan jy terwyl nagaan. Jy weet, is negatief 1, is dat 'n positiewe getal? As dit is nie, ek gaan om te gaan terug en herhaal die doen en herhaal en herhaal en herhaal totdat hulle uiteindelik gee jou 'n nommer wat jy wil, dat ons almal kan gebruik in ons kode. Dit is redelik belangrik vir wese enige gebruiker insette. Ek kan jou waarborg keer in 'n pset waar vra ons u om insette enige soort van die kode, ons is waarskynlik gaan om jou te gee 'n toets saak waarin ons gaan jy iets sleg te gee wat gaan probeer om jou kode te breek. As ons probeer om jou te vra om insette 'n heelgetal is, kan ons net gee jou 'n string en kyk hoe jy sal hanteer nie. As ons jou vra om 'n ouderdom in diens, ons kan jy 'n negatiewe getal te gee om te sien hoe jy sal hanteer nie. Net seker maak julle ouens toets vir gevalle waar jy nie die beste kry insette, laat ons net sê. En 'n doen terwyl lus is dikwels die beste manier om jou kode so ontwerp dat dit voldoen aan wat omvang. OK. OK. So dit is waarskynlik die mees komplekse lus uit die drie dat ons het gekyk na so ver. En dit lyk baie scary op die eerste. Maar ek waarborg jou, wanneer jy ouens onder die knie kry hoe om 'n gebruik vir lus, dit is een van die mees nuttige dinge, mees nuttige gereedskap in jou arsenaal om vorentoe te beweeg in hierdie klas. So byvoorbeeld, in Scratch, ons het hierdie baie eenvoudige blok wat net gesê herhaal hierdie sekere frases sekere aantal kere. By the way, SAJ-- dit is Scaz Andi Jason. Ons dikwels onderteken ons e-pos SAJ. As ons sê SAJ, moenie verwar word. Dit is net ons. So in Scratch, was ons in staat om 'n blok wat gesê het, herhaal ek lief SAJ! 10 keer. Baie eenvoudig. Die logika agter dit is 'n baie, baie eenvoudig, reg? Ek wil eers deur die eerste tyd en sien dat die tweede keer en sien dat, derde keer so meer en so aan, totdat jy getref tot 10. En die manier waarop ons sou verteenwoordig wat in kode is net deur 'n eenvoudige lus. So vir, jy gaan om te verklaar jou veranderlike hier, in hierdie geval, met 'n int. Ons gaan om dit te noem i. Ons gaan om dit te inisialiseer tot 0. En die stilhou uitgawe gaan ek minder as 10. En die update gaan wees i ++. En binne die lus, gaan dit uit te voer totdat uiteindelik tref die einde van die condition-- waarin geval, dit gaan om die lus te breek. Daar moet dinge wees dat jy ouens het al die soort van gesien voor en het om te doen vir jou probleem stel een. Is daar iemand enige vrae aangaande vir loops nou? OK. Groot. OK. So vir diegene van julle wat lees die pset spec vir hierdie week weet dat ons gaan hê om in diens iets genoem ASCII en ASCII tafel. So David in lesing het oor kortliks hoe rekenaars essentially-- alles is ingebou in 'n rekenaar in binêre, in nulle en ene. En die manier waarop rekenaars in staat is om om verskillende waardes benewens stoor om nulle en ene is deur kartering daardie getalle ander syfers verteenwoordig of wese die ander karakters. So in hierdie geval, 'n ASCII table-- al wat dit doen is kaart karakters, of karakters, getalle. So die bronkode lêer in jou computer-- dit sien, hey, 'n klomp nulle en ene, nulle en ene, nulle en ene. Dit is wat gestoor word in die werklike geheue van u rekenaar. Maar wanneer ons mense wil kommunikeer met die rekenaar, ons want-- sê, byvoorbeeld, as ek wil die hoofletters A, Ek gaan 'n manier nodig van die vertel van die rekenaar, o, wanneer ek tik hoofletters A, ek bedoel hierdie verteenwoordiging in binêre. En so het die manier waarop ons dit doen is gooi 'n arbitrêre ding genaamd 'n ASCII tabel waar ons as mense, soos programmeerders, 'n geruime tyd gelede, ons arbitrêr besluit dat ons gaan om hierdie getal te wys waardes om hierdie karakters. So julle ouens kan dit aanlyn Google. Ek dink daar is 'n skakel om dit in jou pset-- net 'n ASCII kaart tafel, ASCII tafel. Dit vertaal net binêre getalle in karakters. En dit gaan baie wees nuttig vir jou probleem stel wanneer jy wil bereken enigiets of as jy wil om te wys sekere karakters of heelgetalle of manipuleer sekere karakters. Dit gaan 'n baie wees belangrik dat jy al weet hoe om 'n ASCII tabel navigeer. So byvoorbeeld, die hoofletters A word verteenwoordig deur die nommer 65. En die klein 'n word verteenwoordig deur 97. So dit is belangrik om te weet dat die verskil tussen die twee waardes is 32. Dikwels, as jy nodig het om te skakel van een na die ander, die verskil is 32. En moenie bekommerd wees as jy die soort is verwarde oor hierdie by die eerste. Ons sal gaan oor hoe ons sou diens dit in werklike kode. OK. So vir die van julle met skootrekenaars uit voel vry om te trek 'n ASCII tabel want dit sal waarskynlik vereis dat jy ouens te verwys wat die karakters is. OK. So weet dat sekere karakters die kaart om sekere getalle, as ek net loop die eerste lyn van wat code-- die printf a, kleinletter a, minus hoofletters A. Is daar iemand 'n raaiskoot oor wat sou wees uit te druk van die skerm nou? So die eerste van alles, wat beteken Kleine letters verteenwoordig? Watter getal is dat ingebou in die ASCII tabel. Jammer? GEHOOR: 97? ANDI Peng: 97, groot. En wat is hoofletters A? GEHOOR: 65. ANDI Peng: So, wat is 97 minus 65? GEHOOR: 32. ANDI Peng: OK. So, wat doen julle dink gaan gebeur wanneer ek insette wat reël van die kode in my rekenaar? GEHOOR: [onhoorbaar]. ANDI Peng: Jammer, praat. Geen probleem. Dit is 'n baie veilige omgewing, minus die kamera. Ons gaan almal aan- geen bekommernisse. Net ons almal gaan om voor te gee soos dit is net ons koue in hierdie kamer. Geen probleem. Geen vraag is te dom. Geen antwoord is 'n dom antwoord. Ek is waarskynlik gaan om foute te maak in die loop van my onderrig. Ernstig, ouens, net flappen dit uit. Wees vol vertroue in jouself, jy weet? So wat is dit? Wie het gesê dat dit die laaste antwoord? OK. Skree dat die mooi en duidelik. GEHOOR: 32? ANDI Peng: 32. OK, laat ons loop hierdie kode en sien of dit is wat gebeur. OK. So as jy ouens kan soort van sien, is die tipiese notasie Ek het opgestel hier vir hoe ons in diens sou neem enige soort van program in ons rekenaar. Ons het ons belangrikste funksie binne ons belangrikste funksie. Ek gaan net om te kopieer en plak hierdie lyn van die kode. Ook versigtig wees wanneer jy ouens kopieer en kode te plak. Soms sekere operateurs nie korrek plak oor. In daardie geval, die minus teken was eintlik 'n streep. En so het die rekenaar het nie dit kom haal. So ek het om terug te gaan en fisies oor te tik nie. Net versigtig wees wanneer julle ouens doen dit. OK. Ons gaan om dit hier te hardloop. So ons gaan cd in ons section2. Ek het hierdie program asciimath genoem. So onthou, wanneer ons hardloop enige program, wil ons eerste stel dit deur die loop dit deur ons te maak. En dan wil ons eintlik loop die program deur te doen dot-slash. So ons gaan ./asciimath. Reg, daar gaan ons. En ons sien 32. Wel gedaan. Jy verdien 'n stuk van snoep. Candy vir jou. Jammer. Alles reg. OK. So kan ons terug na ons voorbeeld hier gaan. Aah, no. Aah. OK. Ek gaan net om dit so te hou. OK. OK. So as julle kan sien, kan ons doen baie baie interessante dinge, 'n baie baie cool dinge, 'n baie baie ingewikkelde dinge wat ASCII karakters en getalle. Wanneer jy af te reël vyf dit is 'n baie om te volg saam. Ons gaan nie om te gaan deur die afdeling. Voel vry om, as jy kan, Daarom is dit uit op papier eerste op wat moet gebeur wanneer jy insette soos 'n string van waardes. Byvoorbeeld, in die laaste lyn, ons het z-- wat 'n sekere number-- verteenwoordig a-- wat ook verteenwoordig 'n sekere number-- plus 1 modulos 26 plus kleinletter a. As jy ouens lees hou deur middel van hierdie, jy kan sien 'n patroon kom in hoe ons die manipulering van die kode. Ek het baie, hoogs stel voor na artikel almal van julle ouens gaan voort en insette diegene alles in jou rekenaar en sien watter soort van getalle uit te kom en redeneer deur waarom diegene is gebeur, want vir jou psets dit sal baie belangrik wees vir jou om te verstaan waarom sekere dinge gebeur. Al hierdie skyfies sal aanlyn wees. So geen bekommernisse oor probeer om fisies kopieer notas. Aanlyn Alles. Hierdie afdeling self sal aanlyn wees. Al my bronkode wat Ek hardloop sal aanlyn wees. Ja. Het jy nog 'n vraag? GEHOOR: Wat is modulos? ANDI Peng: OK. So modulo is 'n operateur wat gaan redelik belangrik om jou ouens pset hier. So die manier waarop operateurs in C en in programmering werk is dat jy wat is bekend as die afdeling simbool en die modulus simbool, wat net soos die persentasie teken. So in C, wanneer jy 'n heelgetal te doen gedeel deur 'n heelgetal met 'n streep C het 'n neiging om te wil sny af al van die desimale punte, omdat 'n heelgetal wil om te skakel na 'n heelgetal. Dit gaan nie om te wil 'n dubbele wees met 'n klomp van die desimale al nadat dit. So as ek dit doen 3 gedeel deur 2, gaan dit af te sny die 0,5 en gee jou net 1. So dit is iets om te wees baie versigtig wanneer jy doen enige soort van wiskunde in programmering, is dat die getalle jy mag nie die getalle wat jy dink, wat is die rede waarom afronding in jou laaste pset so belangrik is. Modulo gee jou die res. So byvoorbeeld, as ek gedoen het 3 modulo 2-- so 3 persent teken 2-- dit sou die res van daardie gee. So 3 gedeel deur 2 is 1,5. Dit is 1 van 1 restant. Dit sou gee jou die 1 wat is die res van die. So wanneer jy ouens beweeg deur die ASCII tabel modulo sal uiteindelik ' iets wat baie belangrik, en ons sal bespreek wat later. OK. So iets is wat mooi, mooi nuwe en mooi unieke dat ons hierdie week bespreek het is die konsep van wat 'n skikking is. So skikking is die eerste tipe datastruktuur dat ons gaan om teëkom in hierdie klas. Alle data struktuur is 'n soort van arbitrêre, letterlik dinge soos struktuur dat ons as programmeerders geskep het, dat ons in ons kode het sit dit kan ander stukke van die kode bevat. So in hierdie sin, 'n array-- dink aan dit as 'n lêer kabinet, waar as jy verskillende oop rakke van jou lêer kabinet, jy kan toegang tot verskillende dinge. In die geheue, is 'n skikking net te doen dieselfde ding op jou rekenaar. Jy kan verskillende blocks-- ons het noem hulle indices-- van 'n skikking. Dit is net soos 'n blok, 'n rak van die geheue dat ons binne geskep het jou rekenaar wat jy kan invoer sekere dinge in verskillende ruimtes. So met 'n skikking, jy altyd te specify-- jy het om te spesifiseer verklaar 'n skikking in die volgende formaat. Jy gaan eerste spesifiseer die tipe data wat jy wil om te skep van die skikking. As ek wil 'n skikking van heelgetalle, Ek gaan int reg daar sit. As ek wil 'n verskeidenheid van snare, Ek gaan snare daar te vestig, die naam van jou skikking, en dan jy gaan vierkantige hakies het. En binne-in die vierkantige hakies, jy is gaan na die grootte van jou array het. Iets wat werklik belangrik om in gedagte hou wanneer die skep van skikkings is dat, sodra jy 'n te skep skikking, kan daardie grootte verander nie. So as jy weet dat die reg nou jy het 'n verskeidenheid van grootte 10, jy weet dat ek gaan 10 selle binne of 10 indekse in hierdie reeks, en dit gaan nooit om uit te brei of te verminder maak nie saak wat nie, en daar is tans net 10 blokke van ruimte in jou geheue wat kan stoor toegeken tot 10 dinge wat jy ookal het sit. So op hierdie manier, 'n verskeidenheid data tipe, die data struktuur wat 'n verskeidenheid is baie anders as 'n paar ander ons sal bedek later in hierdie kursus. Ja. Byvoorbeeld, as jy wou Skep 'n skikking van grootte 3 wat vervat veranderlikes integer-- O, jammer, van temperature-- en temperatuur van Natuurlik, 'n heelgetal is. So wil ons int skep, wat is die data tipe wat ons wil stoor. Ons gaan hierdie temperature noem ter wille van die goeie naam benaming iets wat ons almal verstaan. En ons gaan vierkantige hakies het. En ons wil drie getalle. So ons gaan sit drie binnekant van dit. Iets wat regtig belangrik om in gedagte te hou is dat skikkings is nul geïndekseer. Al wat beteken is dat jy begin met die indeks van 0, en jy loop deur die grootte van die skikking minus 1. So hier Byvoorbeeld, ons het 'n verskeidenheid van grootte 3. Dit gaan in staat wees om drie waardes te hou. Maar die getalle wat themselves-- nommer, die skikking, wat indeks die skikking, is 0 deur 2. So ouens, regtig, regtig versigtig wanneer jy gaan deur jou probleme stel en die skep van 'n soort van verskeidenheid, omdat 'n groot deel van die keer is dit regtig, regtig maklik om te vergeet nie. Ek het eintlik nie die indeks het van 3, dat ek tans net het die indeks van 2. En as jy probeer om toegang tot die derde indeks dit gaan wees wat is genoem die nul terminator. Dit gaan nie om werklik bestaan ​​in die skikking. En die rekenaar gaan nie so nie. So wees versigtig wanneer jy toegang dinge net om te verseker dat jy onthou dat skikkings is nul-geïndekseer. OK. So die eerste voorbeeld is net een manier van die skep van 'n skikking. Die tweede voorbeeld het ek Hier is net 'n aparte manier skep wat dieselfde data struktuur wat ons nou net ingevoer. So in plaas van fisies loop deur en sit in temperatuur van 0 gelyk ook al, temperatuur 1 gelyk ook al, temperatuur 2 gelykes wat ook al, kon ek net eintlik dit alles direk te skep in een lyn in temperatuur tussen vierkantige hakies gelyk. En kennis in hierdie geval, het jy nie nodig om te bepaal hoe groot jou skikking is, omdat die rekenaar gaan gaan deur en sien dat daar ' drie elemente in die krullerige draadjies. En dit gaan om te weet, OK, Ek het 'n verskeidenheid van grootte 3. Jy gaan nie nodig om insette dit op die volgende manier. En ook, ja, dat die pad. Is daar iemand wat vrae het oor hoe ons skikkings of hoe die struktuur van 'n skikking werk? Ja. GEHOOR: [onhoorbaar]? ANDI Peng: Ja, presies. So as jy was om te verklaar en inisialiseer 'n verskeidenheid van die volgende metode, dit is die tweede manier, jy kan net laat die. En die rekenaar weet dat dit outomaties moet hoeveel elemente te tel is in die krulhakies, geskei deur kommas. So hier sien dat hulle 65, 87, 30. So die rekenaar weet, o, daar is drie heelgetalle. Ek weet om 'n skikking te skep naam temperatuur met drie elemente in dit. Goeie vraag. Ja. GEHOOR: Is dit nie moontlik om te skep 'n skikking met verskillende tipes data wat kan ingeskryf word in dit? Byvoorbeeld, met heelgetalle [onhoorbaar]? ANDI Peng: Vir die doeleindes van hierdie klas, nee, nou. Wanneer jy 'n data te skep struktureer soos 'n skikking, jy vertel is die rekenaar, hey, ek het jou nodig om soveel toeken geheue in my hardeskyf, met elke sel 'n sekere aantal stukkies. Onthou ons geleer het in week zero dat verskillende data tipes het verskillende groottes? So byvoorbeeld, 'n string is 'n ander bedrag ruimte as 'n kar, wat is 'n ander bedrag van die ruimte uit 'n heelgetal. En so, as jy nie spesifiseer en jy meng en pas watter soorte veranderlikes jy het, die rekenaar gaan baie verward wees. En dit gaan nie om te weet hoeveel geheue om jou te gee. So vir die doel van reg nou, rekenaars kan net erken 'n tipe van 'n skikking. Goeie vraag. OK. So natuurlik, die tweede vraag wat ons het is, wel, nou dat ons 'n gemaak het skikking en ons het al hierdie dinge in die skikking, hoe is ons gaan in staat wees om dit te bekom? So het die tipiese struktuur wat ons altyd toegang 'n skikking is ons pragtige lus. Ek belowe jou ouens wat ons sal wees sien baie van hierdie mede hier. Wese, wanneer jy wil om insette waardes in 'n skikking of jy wil om dit te bekom, die beste manier om dit te doen is 'n lus vir, want in 'n lus vir die, jy weet hoeveel keer jy gaan wil om te loop deur die skikking, want jy het 'n stop-uitgawe, reg? En elke keer as jy loop deur, kan jy toegang tot 'n ander element van die skikking. En ook, dit is 'n rede waarom tipies ons begin ons vir loops aan die 0 waarde want wanneer jy toegang tot skikkings, jy kan toegang tot die nul-indeks. En so is dit parallel baie mooi. Julle mag wou skryf vir int i gelyk 1. i minder as of gelyk aan 3. Maar dit sou nie heeltemal werk as Wel hier, omdat jy net elemente van 0, 1, 2 en. En so as jy was om te begin jou i by element 1, 2, en 3, jy gaan om te eindig hardloop uit die grense van jou skikking, en slegte dinge gaan gebeur. So ek hoop julle sien die segue waarom in die vorige klasse ons leer julle hoe om te hardloop en klaarmaak vir lus om die manier wat ons was. Dit is omdat, nou het ons transitioned in skikkings, jy kan sien waarom die 0 leen self baie mooi om toegang. So die manier waarop ons dit doen is that-- Ek is net buite druk dit hier ter wille van die druk dit uit. Maar ek het my plekhouer, komma. En die werklike ontsluiting deel gebeur. Die naam van die skikking is die temperatuur genoem. Dus is dit die temperatuur en die i-de element van die skikking. So as die lus loop deur, dit gaan om te begin by 0. Dit gaan om uit te druk die 0 indeks van hierdie skikking. Dan is dit gaan om te druk uit die eerste element. Dan is dit gaan om te druk die tweede een. En dan gaan ons breek. Is almal duidelik hoe dit gebeur? Groot. Alles reg. So hier het ons 'n manier om sê, as ons nie wil hard-kode in-- my as die programmeerder. Ek wou nie eintlik fisies sit in elke individu element van hierdie skikking. As ek wou plaas die toevoer van die gebruiker waardes, Wat is die beste manier om dit te doen? Wel, hier het ek geskep hierdie pragtige funksie, waarop Ek verklaar 'n skikking. So int scores-- laat net sê ons wil maak 'n skikking wat die grade van alle 18 gehou van die studente hier in hierdie afdeling. Ek dink ons ​​het 'n bietjie het meer as 18 kinders vandag. Maar ter wille van byvoorbeeld se, laat ons net aanvaar ons het 18. Ek sou 'n verskeidenheid naam tellings met te skep tipe int, want tellings, natuurlik, is getalle. En ek gaan hê 18 in vierkantige hakies, want dit is hoe baie studente I wil in staat wees om tellings van stoor. En die manier wat ek wil vul die skikking is dat ek wil loop dit deur 'n lus, van Natuurlik, met 0, synde my 0 indeks. En dan met 18 om my stop uitgawe, want daar is 18 elemente in die skikking. En dan gaan ek printf te doen, Tik telling vir student-- yada yada yada. Kan iemand my vertel hoekom ek is hier druk i plus 1 en nie i? Dit is soort van 'n truuk vraag, nie regtig nie. Dit maak nie eintlik fisies invloed op die verloop van die kode. Ja. GEHOOR: [onhoorbaar] 0? ANDI Peng: Ja, presies. Dit is 'n bietjie ongemaklik om te sê, hey, jy is die 0 student in hierdie klas. Dit is 'n bietjie vreemd. So ons as mense het nie regtig soos om te dink hoe rekenaars dink. So selfs al in die rekenaar, is dit die stoor waardes in die 0-ste indeks toe ons mense, ons doen nie regtig graag verwys na onsself as nul. So wanneer ek druk net dat, Ek gaan om te druk en voeg 1 net ter wille van duidelikheid. So wanneer ek druk, ek gaan wees in staat wees om studente te druk 1 deur middel van 18. Dit maak nie eintlik 'n impak die bestuur van die kode op enige manier, die manier wat ek druk. Maar wees versigtig wanneer jy eintlik toegang tot die skikking. Wanneer jy sien die tellings i, sien hier Ek is eintlik toegang tot die 0-indeks en nie die 1 plus 0-- of 1 plus 1, in hierdie geval, indeks so dat dit eintlik duidelik. Is almal soort van OK op hoe dit loop deur en met elke indeks Ek is om 'n waarde in die skikking en die skep van 'n skikking met 18 nommers dat die gebruiker gaan insette? OK. Koel. OK. Ons beweeg nou in iets wat mooi is relevant is vir hierdie stuk sowel stel. Ek weet in lesing David-- Jammer, jy 'n vraag het? GEHOOR: Kan jy dit te vergroot? ANDI Peng: Ja, so ek probeer. Maar ek weet nie. Vir een of ander rede, is hierdie weergawe van PowerPoint is regtig nie werk nie goed met die vertoning. So ons is maar net gaan om dit te hou soos hierdie. Al hierdie sal aanlyn foto. Jammer, ouens. Ja. OK. So kan ons ook snare. So as jy ouens eintlik notice-- ek weet Rob het oor hierdie in daardie lesing dat hy 'n string did-- is eintlik net 'n verskeidenheid van die karakters, As jy dink oor dit, reg? A string is 'n naam of 'n sin of 'n woord, reg? As ek 'n string naam skep Andi-- net my naam, A-N-D-I. Jy dink dat as net een veranderlike. Maar eintlik, is dit afgebreek in net 'n verskeidenheid van karakters. So dit het 'n karakter van 'n gestoor in 'n skikking waarde. Dit het 'n karakter van N gestoor word in die tweede indeks en so aan en so voort. So in so 'n manier, ons eintlik hierdie soort struktuur in plaas vir ons snare. So hier, as ek insette van die woord "eet" - so string woord gelyk kry string. As ek insette van die woord "eet," wat fisies die manier waarop my rekenaar is die stoor wat string in my geheue. En as ek wou om te loop deur wat en druk wat so out-- om na i gelyk is aan nul, onthou, in lesing, ons bedek iets wat StrLen genoem word, of die lengte van die string. Omdat ek nie eintlik weet hoe groot die skikking is van watter inputting-- die gebruiker se Byvoorbeeld, ingevoer ek die woord "eet" en ek weet dit is drie karakters lank, reg? So kon ek in 'n drie daar te vestig en alles sal goed wees. Maar as jou toevoer van die gebruiker iets dit is 'n verskillende aantal waardes, jy gaan nie in staat wees om werklik weet dat wanneer jy jou kode program. So die manier wat ons hanteer toets gevalle soos dit is dat ons iets StrLen genoem, wat net 'n funksie wat vertel jy hoe lank 'n string is. So StrLen van 'n woord. My woord is die eet. N gelyk StrLen van 'n woord. Kan iemand my vertel wat dit waarde eintlik is reg daar? Wat beteken N reg verteenwoordig nou, in hierdie voorbeeld, as ek eet? GEHOOR: 3. ANDI Peng: 3, presies. So het ons vir int i gelyk nul, n gelyk 3, wese. En ek gaan loop totdat dit minder as 3i ++. En dit gaan in wese gaan deur en doen dieselfde ding. Dit gaan om uit te druk elke waarde en gee jou E-A-T. Dit is net gee 'n ander manier om dit te skryf. Dit gaan baie nuttig wees. Ja. GEHOOR: Wat is die voordele van om die N gelyk StrLen woord binne daardie lus [onhoorbaar]? ANDI Peng: Ja. So as ek aan- sê, byvoorbeeld, as ek dit doen en dan do-- oop-- dat, in my kode, sou dit eintlik doen soos die dieselfde ding. Maar die manier waarop David verduidelik tydens lesing, indien enige van julle ouens onthou, is dat, as mens, as programmeerders, ons regtig probeer om die program ons kode, sodat ons rekenaar het as minimale as moontlik te werk, sodat dat ons kode is baie effektief. So as ek dat daar, wat sou gebeur deur my lus is dat ek die eerste keer wil verklaar veranderlike genoem i gaan wees 0. Ek gaan om te kyk, o, Wat is die StrLen van 'n woord? O, die StrLen is 3. So is ek minder as drie? Ja dit is. Ek gaan om te hardloop. En dan is die tweede keer terug om die lus, ek gaan i inkrementeer. i gaan om een ​​te wees. En ek gaan om te kyk, o, maar wat is die StrLen van 'n woord? O, dit is drie. En doen dat die soort van verkwistende lyk, elke keer as jy deur die loop hardloop, word die beheer van die funksie, selfs al is die StrLen van 'n woord nooit werklik verander? Dus is dit ekstra krag vir 'n rekenaar. Wanneer jy begin praat oor dinge wat biljoene en biljoene en biljoene plekke lank, dink jou rekenaar om te gaan deur en fisies kyk al van dat elke keer. Dit is waarom, om net ter wille van doeltreffendheid, ons geneig om dit net te doen, want op hierdie manier is ons net roep die funksie een keer in die begin, en dat elke keer as dit gaan deur dit gaan om die waarde te stoor 3 daar het jy dit nie doen nie moet voortdurend kyk elke keer. Ja. GEHOOR: Jammer. Net [onhoorbaar]. Kon jy int N gelyk StrLen en sit wat bo die buitekant van die lus vir ook? ANDI Peng: Ja. Jy kan dit doen, absoluut. Die rede het ons dit hier is omdat die manier waarop 'n lus vir die werke is dat dit bekend as 'n plaaslike veranderlike in die sin dat alles wat jy is skep binnekant van die lus vir net bestaan ​​binne die lus. Net so is die veranderlike i bestaan ​​in die hakies. En hier is die veranderlikes van n ook bestaan ​​slegs in die hakies. So as jy was om te gebruik StrLen van woord verskeie kere onder af, absoluut die beste manier om dit te doen sou wees om dit te verklaar die top so jy hoef nie om dit een keer te doen. Ja. GEHOOR: Hoekom dink jy het 'n nuwe lyn na die persent sien as jy wil al sit die letters langs dit skei? ANDI Peng: O, ek wou druk hulle almal op elke lyn. Dit maak nie saak nie. Ja, dit is 'n opmaak. Dit is 'n goeie vraag, al is. Ja, as ek wou om te druk dit alles op net een lyn, Ek wil nie hê die paneelbord in. OK. Almal goeie? OK. Koel. So ek dink ek het genoeg gepraat. Julle ouens se beurt om te loop deur die kode en vertel my wat verkeerd is hier. Waar is die fout? So soos jy kan sien, het ek verklaar nuwe reeks van die soort string naam klas. En ek het ingevoer Sam, Jess, en Kim in dit. En ek is 'n poging om uit te druk al die elemente van die skikking. Kan iemand my vertel hoekom hierdie gaan my probleme gee? Ek sal julle ouens gee 10 sekondes om te dink oor hierdie. OK. Ja? GEHOOR: Is die links sentrum gelyk aan 3 of [onhoorbaar]? ANDI Peng: Right. So hoeveel keer is dit eintlik gaan loop deur middel van hierdie lus? GEHOOR: Vier. ANDI Peng: Presies. Dit gaan deur vier keer. Dit gaan om deur te hardloop by 0, 1, 2, en 3, omdat hul element is i minder as of gelyk aan 3. Dit gaan nie om te stop wanneer dit 2. Dit gaan hou gaan totdat dit treffers 3. En soos ons weet, is daar net drie elemente in ons werklike skikking. As ons probeer om toegang tot die vierde element of die indeks van 3, jy gaan iewers getref in die geheue wat nie bestaan ​​nie. Dit is bekend as die nul terminator. Niks gaan om daar te wees. Jou rekenaar gaan nie te wees baie gelukkig met jou. Ja. Is daar iemand wat vrae het oor hoekom dit gebeur het? Dit is 'n gemeenskaplike gebied te vermy. Ja. GEHOOR: Is nie die eerste skuif ook 'n string van 2? ANDI Peng: No. So in wese, wanneer jy maak 'n skikking, dat bracket reg daar het al number-- dit is wat jy vertel is hoe baie elemente wat ek het. Dit is nie eintlik vertel vir my die indekse van enigiets. So in hierdie geval, ek weet wat ek wil om te skryf met drie plekke, met drie fisiese plekke hou wat ek wil om te hou. So dit is waarom die nommer drie is daar. Maar, as ek wou om werklik toegang het, As ek wou sê, printf klas bracket getal is, dan jy gaan eintlik sit die fisiese indeks daar. Ja, goeie vraag. GEHOOR: So is die fisiese indeks veronderstel om te wees [onhoorbaar]? ANDI Peng: Ek is jammer. Kan jy praat 'n bietjie? GEHOOR: So is die fisiese indeks [Onhoorbaar] elk van die bokse? [Onhoorbaar]? ANDI Peng: Ja. So ek gaan om terug te gaan na regs hier. Dink hier. Ons het 'n verskeidenheid van grootte 3. Daar is drie plekke, soos, fisiese plekhouers hier. Maar hulle is vernoem 0, 1, 2 en. So as ek wou om dit te bekom, die manier waarop ek toegang tot hulle is printf van alles wat ek wou hier. Jy sal hê om te druk die naam van dit, want dan is die rekenaar weet, o, ek moet kyk in hierdie reeks vir die 0-indeks. Ja. Maar die grootte van dit nie verander nie. Die grootte is 3, ongeag van hoe jy dit etiketteer. OK. Almal goeie? GEHOOR: So elke keer as ek [onhoorbaar]? ANDI Peng: OK. So in hierdie geval, ons doen nie regtig kry in dit nou in die kursus. Maar weet dat 'n string-- soos ek gesê het, 'n string is in wese 'n verskeidenheid van die karakters. So as ek Skep 'n skikking van snare, ek soort van het 'n verskeidenheid van verskeidenheid van die karakters, reg? So in hierdie geval, want ek het 'n verskeidenheid van snare, As jy was om insette 'n baie lang woord, wat nog neem slegs een spasie, want dit is die een string. Maar as jy was om te dink die karakters van daardie skikking, dan is dit neem 'n baie meer karakters as enige van die ander woorde is. Nie regtig belangrik is vir nou. Maar dit is net oor die algemeen hoe dit werk. OK. So, dit is iets wat ek sal jou laat doen 'n baie oor die loop van die semester. Ek moet my stem te rus. Julle moet julleself te stimuleer. Baie van julle het waarskynlik moet nou slaap. Ek skryf ewekansige probleme waar ons as 'n klas, of jy met 'n maat langs jou gaan om 'n paar minute te spandeer bespreek oor hoe ons sal gaan om of die skep van 'n program soos hierdie. So nou, ons wil 'n program-- skep ons gaan om dit te noem upper.c-- dat bekeerlinge 'n klein woord om 'n bo-klas string-- hoofletters, jammer. Word in stringe, jammer, is sinoniem. Ek gaan om dit te verander om dieselfde ding beteken. Ja. Neem 'n paar minute. Dit hoef nie te wees in enige taal geskryf. Net in pseudokode-kode of logies hoe ons sou selfs gaan doen so 'n probleem. Ja. [SIDE GESPREK] Ek het ook opgemerk dat jy ouens can-- Ek soort van sien reeds die program. Ek dink my gebrek aan aanbieder modus is 'n probleem. Maar dit is OK. [SIDE GESPREK] Ja, asseblief, ouens. Kom kry lekkergoed. Kom kry lekkergoed. Gehoor: Ja! [SIDE GESPREK] ANDI Peng: Ook, ja, Ek sal begin gooi candy op mense wat nie vrae beantwoord nie. Dus moet jy al antwoord vrae. Of ek dink mense wat nie beantwoord vrae. Ja, ander manier om. [SIDE GESPREK] GEHOOR: [onhoorbaar] ANDI Peng: Ja. Ja. [SIDE GESPREK] Alle reg, ouens. Neem, soos, 10 meer sekondes. [SIDE GESPREK] OK, ouens. So voordat ons begin probeer om eintlik fisies skryf kode, 'n goeie gewoonte om te ontwikkel, is dat ons wil die eerste soort rede logies hoe ons dit sou doen. Jy wil om seker te maak, voordat jy fisies begin probeer om die kode in Mario, wat jy maak seker dat jy jou pseudokode. Dit is om jou deur wat jy nodig het om dit te skep dat, wanneer jy fisies skryf jou program later, jy is beter in staat om foute te vang in jou kode en dinge soos dat. So ons gaan net begin by-- in Engels, in pseudokode, Is daar iemand wil gee my 'n generiese verduideliking van hoe ons te werk sal gaan om dit te doen? Ja. GEHOOR: [onhoorbaar]. ANDI Peng: Sure, geen bekommernisse. GEHOOR: Kan jy dit vra om te vra of iemand om string 1-- ja, string te kry, en toe-- ANDI Peng: Ja, so dit is 'n goeie begin. Ek sal begin tik, jammer, as jy praat. So-- GEHOOR: --the klein getalle is hoër, reg? Of die kleinletters het 'n hoë getalle? ANDI Peng: Presies. GEHOOR: So dan trek ons 32 uit watter [onhoorbaar]. ANDI Peng: Groot. Sodat ons soort van 'n algemene gevoel van hoe om te werk oor hierdie probleem. Die wete dat ons soort geleer die fisiese manier wat snare gestoor in die geheue, wat jy doen reeds weet dat jy gaan waarskynlik het om te skryf in jou kode om te beweeg deur die string? GEHOOR: Vir lus. ANDI Peng: 'n lus, presies. Groot. So ons het soort van 'n generiese pseudokode afgeskryf dat die soort van gee jy notas oor hoe jy sal beweeg oor die oplossing van die probleem. Nou dat jy dit het, het jy kan dit verwys vir latere wanneer jy probeer om te eintlik skryf jou kode. So kan ons eintlik gaan hier. En ek het 'n funksie genoem het upper.c-- daar is dit net 'n is-- van leeg sjabloon nou dat jy ouens gaan help my uit te vind oor hoe om te skryf hierdie lyn van code-- nie reël van die kode. Dit sal wees verskeie reëls van die kode. Wanneer die aanvang van enige soort leë pset, wat is die eerste ding wat ek nodig het om te onthou om te doen? GEHOOR: [onhoorbaar]. ANDI Peng: Groot Yep. Sluit. stdio.h. Dikwels is dit een van die mees maklik foute wat mense sal maak wanneer hulle skryf, is dat hulle sal vergeet om 'n sluit belangrike biblioteek wat hulle nodig het. So as dit kantoorure en jy soos, Ek weet nie hoekom my kode nie werk nie. Kan jy my vertel hoekom dit nie werk nie? Ons gaan om te sê het jy include? Moet jy dit include. OK. So het ons die standaard I / O het hier. Is dat die enigste biblioteek ons gaan hier nodig? Wat anders gaan ons doen? Jammer. Iemand wat net skree dit uit? GEHOOR: [onhoorbaar]. ANDI Peng: Daar gaan jy. OK. En hoe gaan ek oor die begin van enige soort van funksie, enige soort van hooffunksie binne ons program? Int main. OK. Wat doen ek sit binne hier? Wat is die eerste ding wat jy wil doen? As ons wil 'n te kry string van die gebruiker, wat ons gaan hê om te doen op die eerste lyn? Jammer, julle ouens voel net vry om te praat en hard. Net uitroep wat ook al. GEHOOR: Vra die gebruiker? ANDI Peng: Hoe doen ons dit? Ask-- gaan ek tik "vra die gebruiker"? GEHOOR: printf. ANDI Peng: OK. Printf. Wat wil ek printf? GEHOOR: Tik in iets. ANDI Peng: Soos wat? Ouens, voorgee asof ek 'n rekenaar. Fisies vertel my elke stap wat ek nodig het om hier te tik in? Ek iets verkeerd doen? Ek moet iets getik het? GEHOOR: Jy moet aanhalingstekens. ANDI Peng: Ek aanhalings nodig? OK. OK. GEHOOR: En dan nuwe lyn. Kommapunt. ANDI Peng: kommapunt? OK. Goed. GEHOOR: En dalk spesifiseer dat jy dit wil hê in klein? ANDI Peng: Groot. Julle ouens my lag vergeet om 'n kommapunt sit. Ek waarborg jou iewers in die loop van hierdie klas, jy sal vergeet om te sit 'n kommapunt en dit sal jy drie uur te neem om uit te hoekom u kode werk nie. Dit gebeur aan ons almal. Dit sal waarskynlik met jou gebeur nie. Kry 'n goeie gewoonte van die gebruik van kommapunte. OK. GEHOOR: Wil jy die string met doen? ANDI Peng: Natuurlik. Wil jy agteroorskuisstreep doen? Gehoor: Ja. ANDI Peng: Groot. OK. Wat doen ek nou? GEHOOR: Kry string. ANDI Peng Kry string. So wat doen ek tik? Iemand? GEHOOR: String s. ANDI Peng: String s. GEHOOR: GetString. ANDI Peng: Somebody, kan jy my vertel waar hierdie funksie GetString is afkomstig van? GEHOOR: string.h. ANDI Peng: string.h? Jy dink dit is van string.h? GEHOOR: [onhoorbaar]. ANDI Peng: Daar gaan jy. Dit is van CS50.h. As jy altyd verwar op waar 'n biblioteek lêer is of 'n kop lêer is, google letterlik string.h, en ek sal jou vertel wat al die funksies wat in string.h. OK. So nou dat ek 'n string geskep en ek het gevra die gebruiker vir dit, Ek het dit in 'n veranderlike gestoor vernoem s, wat moet ek nou doen? GEHOOR: kyk of dit in klein. ANDI Peng: Jammer? GEHOOR: kyk of dit in klein. ANDI Peng: Alle reg, laat ons dit doen. Hoe kan ek dit doen? Eintlik, vir die doeleindes van die klas nou, ons net gaan aanvaar dat alles dat ons insette is reeds in klein. As jy wou om te kyk, sou jy voeg net 'n voorwaardelike verklaring wat nagegaan, dat deur gehardloop elke enkele verskeidenheid element en kyk of dit tussen sekere waardes. Ek vergeet wat die aantal waardes van klein is. Jy kan dit sien op die ASCII tabel. Maar ja, dit is 'n baie goeie punt. Maar nou, ons is maar net gaan aanvaar dat al die snare ons insette in klein. OK. So hoe sou ek gaan hierdie probleem is volgende? GEHOOR: Vir lus. ANDI Peng: Vir lus? OK. Vertel my wat om te tik. GEHOOR: Vir int i gelyk 0. ANDI Peng: OK. GEHOOR: Ag, eintlik, dan moet jy doen 'n komma en doen n gelyk StrLen. ANDI Peng: So belangrikste ding dat ek dink sy hier opgemerk is dat ons nie hoef te sê int N die tweede keer het ons dit. Weet net dat in 'n vir lus wanneer jy verklaar, jy eintlik nie die int van nodig die tweede keer wat jy doen 'n veranderlike. Jy kan n StrLen sê. GEHOOR: S. ANDI Peng: s. OK. GEHOOR: Dan is 'n kommapunt. ANDI Peng: Natuurlik. GEHOOR: En dan [onhoorbaar] n. Dan ++ i. ANDI Peng: Groot. Alles reg. Wat wil ons binne van hierdie lus nou? Onthou, as ons gaan deur loop 'n string en hardloop deur middel van 'n skikking, ons wil dinge so dit. Wat gaan ons nodig? Dit is 'n soort van die moeilike deel nou. Iemand het 'n raaiskoot? OK. So die eerste, hoe kan ons nog toegang? Hoe moet ons selfs eerste tjek of toegang 'n element in die skikking? Hoe kan ons dit doen? Wat is die notasie wat ons gebruik om dit te doen? Wat is die naam van hierdie reeks genoem? Dit is bekend as s, reg? Onthou, enige string is altyd 'n skikking. So s bracket i, reg? Want dit is die huidige waarde of indeks waarde ons nagaan. En ons gaan om dit te stel gelyke aan- ons wil 'n klein waarde, reg? Ons wil om te draai dat lower-- Jammer, ons wil 'n hoofletters. Ons wil die klein draai waarde in 'n hoofletters. En so like-- Ek is jammer, wat is jou naam? GEHOOR: Heidi. ANDI Peng: Jammer? GEHOOR: Heidi. ANDI Peng: Heidi. Soos Heidi gesê aanvanklik, ons is waarskynlik gaan nodig the-- ons waarskynlik gaan om te trek 32 uit watter charc dit is, reg? Want op 'n ASCII tafel, die verskil tussen 'n klein letter en 'n hoofletter is 32. So wanneer ons dit doen, ons is waarskynlik gaan wil trek 32, reg? So ons gaan s wat ek doen. Maak almal verstaan ​​hoekom ek dit gedoen het? Want nou, in ons verskeidenheid, Ons monitor die 0-indeks, reg? En in die 0-indeks van die string, dit is die eerste karakter. En dat karakter wat ons gaan om te aanvaar dit is klein. As ons dit wil hoofletters maak, ons moet trek 32 van sy waarde, want in ons ASCII tafel, dit is hoe ons dit kry na die volgende ooreenstemmende waarde wat dit hoofletters maak. Verstaan ​​almal dit? Ja. GEHOOR: jy kan ook moenie kleinletter a minus-- ANDI Peng: Ja, so dit is eintlik regtig goed. Ek gaan om terug te kom na daardie vraag nadat ons dit doen. Ja. En dan as ek wil sien wat aangaan, Ek is waarskynlik gaan om wil, reg te druk? Iemand vertel my wat Ek wil hier te druk. GEHOOR: printf persent c backslash [onhoorbaar]. Dit is die waarde van [onhoorbaar] s i. ANDI Peng: s i, jammer? GEHOOR: [onhoorbaar]. ANDI Peng: Ek weet nie. Wat dink jy? GEHOOR: Wel, ek wouldn't-- Ek dink ek sou nie bring-- Ek sou dit uit te neem van die binnekant, want [onhoorbaar]. ANDI Peng: O, jy sou gedoen het? GEHOOR: Ja. ANDI Peng: Kom ons laat dit die pad dit is nie, en ek sal later verduidelik hoekom. Onthou, selfs wanneer jy 'n plekhouer, jy wil hakies rondom dit. Alles reg. So dit moet 'n vaste funksie hier te wees. Kom ons hardloop dit en kyk of dit stel. Maak boonste. Uh Oh. Dit lyk nie te goed lyk. Waarom gebeur dit? Soos met enige fout, jy wil gaan rug en begin met die eerste een, want tipies een fout oorsake baie van die ander foute nadat dit. Hier sien ons upper.c: 18: 25, wat vertel My in hierdie program met die naam upper.c, op die lyn 18, fout implisiet verklaar biblioteek van funksies StrLen met tipe unassigned-- blah, weet ek nie wat gaan aan na daardie. Al is dit vir my sê nou is dat iets gaan aan die StrLen. En die rekenaar verwar, want Dit is soos ek weet nie wat StrLen is? Wat doen wat waarskynlik vertel jy mis? GEHOOR: Jy mis [onhoorbaar]. ANDI Peng: Jy is reg. Presies. So dit is waar dit is belangrik om seker te maak dat elke funksie wat jy in gebruik jou kode is om die korrekte header lêer vir die biblioteek, of anders jy gaan baie foute te kry en jou kode is nie gaan om te weet wat aangaan. So ons gaan string.h hier in te sluit. Nou wanneer ons probeer boonste te stel. Korrek op te stel. Kom ons loop hierdie program. So tik iets in klein. Wat doen jy ouens wil tik? Skree iets. Alle reg, Charly net ingestap. Ons sal die naam Charly se tik. Charly in klein. En hopelik, hopelik, dit is gaan uitroep en spoeg uit Charly in hoofletters. Yay! nie almal verstaan ​​hoe Ek het oor die oplossing van dit? Die manier wat ek kan manipuleer met behulp van heelgetalle om iets op te los wat Ek wil om te doen in snare, omdat die karakters en heelgetalle kan verwys word in die dieselfde manier, want van ASCII kartering. So om terug te gaan na jou punt, as ek wou hier plaas van 32 sit hoofletters A minus kleinletter a net soos dat, sou dit ewe werk so goed, want dit is eenvoudig net die verskil tussen die twee waardes. As ek wil hierdie again-- Charly te maak. Ag nee. Ek dink ons ​​het die verkeerde manier, ja? GEHOOR: [onhoorbaar] kleinletter a. ANDI Peng: Daar gaan jy. Yep. En uitspoeg Charly. So wees versigtig wanneer jy aftrekking waardes om te onthou watter een is groter as die ander. Byvoorbeeld, hier het ek vergeet wat klein is eintlik 'n groter as hoofletters A. So toe ek probeer om hulle af te trek na die ander kant rond, ek het negatiewe 32. En my rekenaar was soos, Ek weet nie wat dit is nie. Dit is net 'n paar random waarskynlikheid waarde wat is nie baie goed. En so maak seker dat jy aftrekking in die regte lengte om die karakter wat jy wil. OK. Is daar iemand verwar oor hoe ons gegaan oor die skryf van hierdie funksie? OK. So eintlik, 'n funksie wat reeds bestaan ​​in die biblioteek genoem ctype.h. Genoem ctype.h die biblioteek. Hierdie funksie is eintlik reeds geskryf vir jou. Dit is genoem na die boonste. En so is dit vir doeleindes van hierdie pset, jy gaan om uit te vind wat jy regtig wil gebruik 'n baie van die funksies soos vervat binne die ctype biblioteek. Na die boonste, te verlaag, is die boonste, is lower-- dit is al die funksies dat jy in staat is om baie gebruik sal wees, baie vinnig in jou eie kode wat doen presies wat dit doen. Ons het uit hoe om te skakel 'n string na hoofletters. Maar dit is eintlik die kode dat iemand anders geskryf het en wat jy kan toegang via 'n ander funksie. Ja? GEHOOR: So jy net kopieer A's in daar en doen dit vir elke enkele brief? ANDI Peng: Ja, omdat ek nie omgee vir die waardes van a. Ek het net sorg dat die verskil tussen hulle is 32, reg? Die verskil tussen klein b en hoofletters B is ook 32. En die verskil tussen c en hoofletters C is altyd 32. Ek moet net omgee vir die verskil tussen die twee, want al die letters volg dieselfde patroon, reg? As ek die verskil tussen een van hulle, Ek weet wat die verskil tussen almal van hulle is. Goeie vraag. Ja. Almal goeie? OK. Oop. OK. So 'n ander konsep wat gaan baie nuttig as jy moet wees voortgaan om te ontwikkel jou kode is hierdie idee van die skep van funksies of abstraksie. So nou het ons al algebra geneem. In algebra, jy het geleer dat daar ' hierdie wonderlike ding genaamd 'n funksie masjien, waar as jy insette een soort nommer, dit deur hierdie wonderlike funksie loop en uit verskyn 'n ander produksie, reg? In-kode, dieselfde ding gebeur in enige soort funksie. So ek kon fisies skryf in my liggaam van my kode 'n hoof verklaring wat eintlik nie ongeag die liggaam van die kode is om te doen. Maar buite dit, kan ek ook skryf baie verskillende funksies wat baie verskillende dinge te doen. Byvoorbeeld, het ons reeds begin deur 'n paar van hulle. Printf-- wat 'n funksie wat iemand anders het reeds geskryf dat ons kan noem in ons kode. Om upper-- in hierdie geval, upper-- is 'n ander funksie ons het geskryf dat ons kan noem in ons kode. En so ek dink waarom ons het selfs funksies? Hoekom het ons nie net plop dit almal in dieselfde lyn van die kode? Dit maak dit maklik vir almal. Wel, die redenasie agter dat is, die eerste van alles, organisasie. Dit is regtig irriterende gaan deur-kode iemand se en een funksie soos printf. As jy ouens eintlik geweet wat die funksie printf behels om te skryf, dit is, soos, 1000 reëls van die kode. As elke keer as ek wou iets printf, Ek moes 1000 reëls van die kode te skryf, wat werklik irriterende om te lees sou wees, reg? Dit is hoekom ons het net het hierdie abstrakte funksie dat ons reeds iemand anders het iewers anders geskryf. En elke keer moet ons dit gebruik in ons kode, ons het net printf sê. En wat in staat is om die funksie te gebruik iemand anders geskryf het in ons kode. Dit maak dit makliker organiseer om die kode te lees. Tweedens, dit is vereenvoudiging. Dit vergemaklik die stappe wat ons het te neem om ons probleem op te los. Printf, funksies soos printf, funksies soos om bo alle dinge is wat ons toelaat om te vereenvoudig ons kode af so dit is makliker. En die laaste ding is herbruikbaar. So die feit dat ons ' 'n funksie genoem printf dat ons kan noem baie verskillende tye en dit toelaat om herbruikbare wees. As ek printf skryf, Ek skryf dit net een keer. Dit bestaan ​​slegs in die een plek. As ek wou dit weer doen, sal ek het om te kopieer en plak dit alles in my tweede reël van die kode. Dit is waarom, as ons skep 'n funksie wat bestaan ​​buite ons hoof, kan ons roep dit en onthou dit wanneer ons nodig het, sodat dit 'n baie makliker vir ons as programme te skryf. So die manier waarop ons sou eintlik skryf 'n funksie is baie soortgelyk, reg? Dit is 'n soort van die eerste geval waar ons sal sien 'n funksie op 'n styl anders as ons int main nietig. In hierdie geval, as ek wou skryf 'n funksie genoem q, reg? En die int waarde hier is al vir my vertel, wat wil ek hierdie funksioneer om terug te keer na my toe? As ek wil 'n heelgetal kubus, Ek gaan om te wil invoer. Hierdie is die parameters. Ek gaan 'n waarde van die tipe int insette. En ek gaan om terug te keer 'n ander soort waarde van int. En hier, soos jy kan sien, al wat ek doen is cubing ookal my insette is as my uitset en die terugkeer. So al hierdie funksie nie, is neem 'n soort van heelgetal. Dit vermeerder dit self twee keer sodat dit cubes in effek. En dan is dit terug wat dit ook al uitset is. So in hierdie geval, dit is twee lyne van kode wat ons gehad het om ekstra te skryf. Maar as ons wou noem oor hierdie verskeie kere, dit is 'n baie makliker om te tik dat een lyn reg hier wat in kubus as het om te gaan deur middel van verskeie keer. So die manier wat in wese 'n opmaak vir enige soort funksie gaan om te bestaan ​​is soos hier. So het ons die naam funksie. In hierdie geval, is dit genoem kubus. En ons noem dit kubus omdat dit is maklik om te onthou. Jy kan noem dit Square en dit kan eintlik in blokkies gesny. Maak nie saak nie. Net 'n naam wat jy toeken jou funksie. Hierdie reg hier, int, is die tipe van die parameter wat jy nodig het. So, wat hierdie funksie nie nodig het om te werk? Wel, dit moet 'n inset. Ek noem dit insette. Jy kan dit noem wat jy wil. Maar ek moet iets van die tipe int. Dit gaan eintlik voer alles wat binne-in hier, die liggaam van die funksie. En dan is die soort opbrengs reg hier, hierdie int-- al is dit vir my sê is dat hierdie funksie is gaan om terug te keer na my int. So dit gaan neem in 'n int, en dit gaan om jou terug te gee 'n int. Maak almal verstaan ​​hoe die formatering van hierdie soort werk? Koel. OK. So moenie bekommerd wees as dit blyk 'n bietjie abstrakte nou. Dit is iets wat ons sal praat. Ons sal duik in dieper later in die kursus. Die manier waarop 'n soort van 'n hoër vlak onttrekking van hierdie dinge werk is dat, in die geheue, in jou rekenaar, alles gestoor in hierdie tipe van stapel, sal ek sê. So daar aan die bokant. Ek weet nie of jy ouens wat goed kan sien nie. Ek sal probeer om in te zoom. Hier by die top, het ons die fisiese teks van wat die rekenaar interpreting-- al die nulle en ene wat bestaan ​​binne ons rekenaar. En dan het ons die geïnisialiseer data en geïnitialiseerd data, wat ons noem globale veranderlikes. So veranderlikes wat bestaan oor al die programme en in jou hele, wese, die kode. Geen bekommernisse as jy ouens is soort onduidelik op hierdie punt. Dit maak nie regtig saak nou. En dan het ons wat is genoem 'n hoop in 'n stapel. Dink aan 'n stapel letterlik as net soos 'n stapel van dinge, 'n stapel van verskillende dinge op die top gestoot van mekaar dat die verskillende stoor veranderlikes en sintaksis in die kode. En dan hier aan die onderkant, ons het die omgewing veranderlikes van wat jy binne is die uitvoering net jou klein lyn van die kode. En ons is net gaan om te vergroot in op die werklike stapel deel. So reg hier, as ons zoom in op die net hierdie gebied van die stapel, dit is wat dit lyk. En dit is eintlik redelik belangrik wanneer jy ouens praat oor funksies, omdat kennis dat die geheue van u rekenaar is die stoor van die veranderlikes en die funksies en die grense van beide jou funksie en jou hoof veranderlikes op verskillende plekke. So nou, hoof is die werklike funksie dat jy die uitvoering in 'n kode. Jy het die parameters hier gestoor en sy plaaslike veranderlikes hier gestoor word. Plaaslike veranderlike beteken net enige veranderlike wat bestaan ​​slegs binne daardie funksie. En bo-op dit, dit het jy afsonderlike funksie genoem kubus. Jy het dit is parameters sowel as dié inwoners. En die rede wat jy kan hier sien is dat dit wat gebeur wanneer kubus neem in 'n waarde van jou belangrikste funksie is dat dit eintlik kopiëring dat meer. So as ek wou kubus 2 en terugkeer 8, wat 2 is eintlik ingevoer as 'n parameter en dit is gekopieer oor sodat jy dit bestaande in twee verskillende plekke in die geheue. En jy het baie versigtig te wees op onthou watter een van dié jy is eintlik manipuleer. En 'n voorbeeld van wat gebeur het wat baie, baie sleg wees bestaan ​​hier. So hier het ek, in teorie, 'n program hier, 'n hooffunksie dat ek verklaar 'n int x is gelyk aan 1. Ek verklaar 'n ander int y is gelyk aan 2. En dan is die uitvoer van dit wat ek deur middel van hierdie funksie genoem ruil, waar ek aanvaar dat dit is die uitruiling van die twee waardes. En dan gaan ek druk dit uit, reg? Dit is wat ek wil hê dat hierdie program om te doen. So laat afkom en 'n blik. So as ek eintlik skryf 'n ander funksie, soos jy kan sien, ons het ons belangrikste funksie hier. En dan het ons ons tweede funksie hier. Leemte ruil. Leemte net beteken dat dit gaan niks terug te keer. Die naam funksie is genoem ruil, en dit is gaan inname twee veranderlikes, int a en int b, van jou [onhoorbaar] funksie. So in wese hier, ons is verby x en y in hierdie funksie. En as ons skep this-- so ons wil om 'n tydelike waarde te skep, reg? Ons gaan toewys dat a. En dan 'n gaan nou gelyk b. En b gaan om terug te wees waar die temp waarde was, wat is 'n, want toe jy wil om dinge te ruil, jy kan nie net wil ruil hulle. Jy moet een uit te hou hier sodat dit onthou wat dit is, want sodra jy een omruil, jy vergeet wat dit oorspronklike waarde was, reg? So in teorie, is hierdie program moet werk, reg? As ek wou die ruil twee, moet hulle ruil. So laat dit loop en kyk of dit werk. So as julle kan sien, x was eens 1 en y was eens 2. En as ek druk dit uit, x is nog 1 en y is 2. Hmm, is hierdie program lyk nie te wees werk op die manier wat ek wil om dit te werk. Is daar iemand wat wil 'n skoot te neem op raai hoekom dit gebeur? Dit het te doen met die manier waarop dat verskillende dinge gestoor in verskillende plekke in die geheue. OK. So julle ouens nie hoef te bekommer te veel oor hierdie nou. Maar weet dat kubus se plaaslike veranderlikes was a en b, want hier in ons funksie, ons het verklaar a en b as die veranderlikes wat bestaan binne kubus, daardie funksie. Maar soos jy kan sien, is die parameters wat dit neem in is hier gestoor word. Maar ons was nie eintlik enigiets terugkeer. Ons was nie eintlik verander x en y. Ons het net die verandering van a en b. Ons het x en y gekopieer na iets genoem a en b. Maar ons het nooit werklik gemanipuleer x en y self. Is jy ouens sien hoe dit gebeur? Is dat ons eenvoudig het gekopieer dit oor, maar ons het nie eintlik gehou spoor van waar hulle in die geheue was. En so nou die rekenaar soek, o, ek het hardloop hierdie ding deur hierdie pragtige funksie. Maar x en y is nog x en y. Niks gebeur om hulle as gevolg van die feit dat diegene parameters en plaaslike veranderlikes word gestoor in 'n ander plaas in die geheue. En dit is 'n hoër vlak konsep wat ons sal begin sien later in die kursus. Maar net weet dat dit 'n probleem wat kan gebeur en dat ons sal uit te vind maniere oor hoe om hanteer dit later in die kursus. OK. Alles reg. Sodat ons die laaste konsep is regtig gaan dek wat gaan nuttig te wees vir die pset hierdie week is wat genoem word command line argumente. So Rob in sy lesing het deur soort kortliks op hoe hierdie werk. Wese weet dat wanneer jy skryf soos 'n hooffunksie, wanneer ons geskryf funksies voor in die verlede, ons het int main nietig. En die rede waarom ons moes leemte daar was omdat ons programme het nie moet insetwaardes te hardloop, reg? Toe ek gehardloop Mario, ek het nie nodig om werklik tik net in iets toe ek gehardloop Mario. Ek kon die gebruiker later gevra. Maar dat die saak nie altyd sal wees. Byvoorbeeld, in hierdie probleem week se stel, jy gaan gevra word dat in Benewens die bestuur van jou program, jy gaan om te wil om insette sekere dinge in 'n reguit soos jy hardloop jou program. So het die manier waarop ons dit doen word genoem 'n command line argument, wat is soos 'n argument Jy kan insette direk as jy probeer om jou program te hardloop. So die notasie vir hierdie, dit is redelik kompleks-soek, maar dit is regtig nie so moeilik. So int main-- dit is net jou hoof funksie. In argc komma string argv hakies. So al wat sê, is dat hierdie int alles wat argc-- is wat jy vertel is dat dit is die getal van argumente die rekenaar moet verwag. So een ding wat werklik belangrik om tred te hou van is die fisiese naam van jou program tel as een van daardie argumente. So as ek wou my program het hardloop plus een bykomende command line argument, ek is eintlik gaan twee het. Argc is eintlik gaan twee wees. En dan string argv bracket-- alles wat te doen, dit gee my 'n verskeidenheid van snare wat gaan net vertoon en stoor wat al daardie command line argumente is. So byvoorbeeld, as ek wou dit hê program, ./copy infile outfile, reg? Dit is net 'n tipiese Linux opdrag. Wat is eintlik argc? Hoeveel command line argumente is daar eintlik in hierdie? Dit alles doen, is 'n afskrif van 'n infile van die naam van 'n lêer en dit kopieer dit na 'n ander lêer, reg? Dit is al hierdie doen. Soos jy kan sien, ek doen dit op 'n lyn sonder om werklik nodig die program. Wat is ons argc in hierdie geval? Hoeveel argumente het ons? GEHOOR: Drie? ANDI Peng: Ons het drie, presies. So dit is baie intuïtief dink net dat dit net die infile en die outfile. Maar weet dat die naam van die fisiese program wat jy loop tel as een. So in hierdie geval, argc is eintlik drie. Hoe gaan, wat is argv 0? Onthou, al die command line argumente is gestoor in 'n verskeidenheid van snare. So as ek probeer om dit te bekom, wat sou argv bracket 0 gee my? GEHOOR: [onhoorbaar]. ANDI Peng: Presies. Dit sou vir my die dot gee streep kopie, want dit is die 0 element, die eerste element van my skikking. Wat van argv 1? GEHOOR: Infile. ANDI Peng: Infile, presies. Wat van argv 2? GEHOOR: outfile. ANDI Peng: outfile. Dit is nou 'n bietjie lastig. Wat doen julle dink argv 3 gaan word gee my As ek probeer om te druk wat uit? GEHOOR: [onhoorbaar]? ANDI Peng: Het jy 'n hand? Ja. GEHOOR: 'n alternatief. ANDI Peng: Presies. So onthou in lesing dat ons het aan die einde van 'n wedloop iets bekend as 'n nul terminator? Ons sal ook kry in hierdie verder in die klas. Maar weet dat in notasie, die manier waarop jou rekenaar weet dat dit die einde van die skikking is dat dit sit iets genoem 'n nul terminator of 'n tikkie nul. So as jy probeer om toegang te verkry argv 3, jy gaan om dit te stamp 0 getref. Dit is selfs meer van 'n truuk vraag. Wat van argv 4? So, dit is die verlede null terminator, verby die grense van ons verskeidenheid. Wat dink jy gaan gebeur wanneer ons probeer om dit te doen? GEHOOR: [onhoorbaar]? ANDI Peng: Jammer? Sê dat 'n bietjie harder? GEHOOR: [onhoorbaar]. ANDI Peng: Ja. Dit is die naam van die gebied sal jy waarskynlik kry. Maar weet dat argv 4-- wat jou toelaat om toegang plekke in jou rekenaar se geheue wat jy regtig moet nie raak nie, want nou weet jy wat argv is. Jy weet dit is 'n verskeidenheid van grootte 3 wat dot kopie, infile en outfile. As jy probeer om so ver gaan as wat dat jy verby die null terminator, jou rekenaar het waarskynlik gestoor iets in argv 4. En jy regtig moet nie toegelaat toegang tot argv 4, omdat jy 'n lêer kabinet en jy is net toegelaat om toegang tot die drie rakke. Maar as jy probeer om ver verby te bereik die rak waar jy is toegelaat, jy gaan om te begin geknoei met ander dinge in jou rekenaar se geheue. Dit gaan baie, baie sleg wees. So weet net dat. Wees baie versigtig dat jy nie net lukraak begin toegang elemente in 'n skikking wat was nie in wat jy wil skep. Yep. OK. So ons gaan na 'n ander te doen terminale voorbeeld hier. OK. So Rob vinnig lesing die ander dag het deur hierdie voorbeeld, waar hy het int main int argc string argv hakies, wat my vertel dat ek gaan command line argumente het. Hy het, as argc gelyk gelyk 2-- onthou, gelyk gelykes beteken vergelyking. As dit is gelyk aan 2, dan is ek gaan druk hello, Wat ook al die eerste element van die skikking is. Anders druk, hello world. Wat gaan dit gebeur wese? Kan iemand net verduidelik Engels wat hierdie program is om te doen? Ja. GEHOOR: As iemand in 'n opdrag getik en gesê hul eerste en laaste naam, dit sal nie net druk die eerste een en sê hello, Wat jou eerste naam is. ANDI Peng: OK, laat ons voer dit uit. So byvoorbeeld, as ek maak hierdie lêer maak hallo hallo aan- aan- doen wat jy wil hê ek moet insette? GEHOOR: Eerste en laaste naam. ANDI Peng Eerste en laaste naam? Ruimtes? GEHOOR: Ja. ANDI Peng: Kan iemand vertel my nou, wat is argc? Net reg daar? Oeps, jammer. Laat my terug te gaan. Hoeveel command line argumente are-- julle ouens kan regtig nie sien nie. Maar ek sal probeer om in te zoem. Ek probeer. Ja, daar is drie, reg? Dit is dot streep hello, dit is Andi, en dit is Peng. So, wat doen julle dink hierdie program gaan word uit te druk? Oh. Jammer. Verkeerde naam. Dit is uit te druk, hello wêreld. Is daar iemand wat wil om te verduidelik waarom dit gebeur? Ja? GEHOOR: [onhoorbaar]. ANDI Peng: Presies. So hier is voorwaardelik is, as argc gelyk gelyk 2. So net in die geval dat daar twee command line argumente. Toe ek gaan druk, hello, wat dit ookal is. Maar anders, ek gaan druk net, hello wêreld. So het iemand wil my 'n voorbeeld gee hoe ek in staat om werklik sou wees kry dit aan die waarde van argv 1 druk? Wat sou ek insette hier? Net een ding, reg? Omdat die dot hallo vir al tel as die eerste argument. Ek het net een meer. So dot hallo as ek net doen Andi. Hello, Andi. Verstaan ​​almal waarom dit gebeur? Ja. GEHOOR: So die ruimte tussen die opdrag line-- is dit [onhoorbaar]? ANDI Peng: No. So die ruimte in 'n command line argument, x, na jou rekenaar te vertel dat dit die begin van 'n nuwe string. So string argv here-- dit winkels al jou opdragte line argumente in stringe. En so het die ruimte in die command line argument-- alles wat nie is wat jy vertel, dit is aan die einde van 'n string en dit is tyd om aan te beweeg na 'n ander. Ja. Dit is redelik belangrik vir jou pset, omdat jy gaan toets hierdie. So het iemand het enige vrae oor hierdie? OK, cool. Ja? GEHOOR: So die rede waarom jy sou sit heelgetal argument calc plaas van [onhoorbaar] sou wees wanneer jy wil om bykomende inligting te tik [Onhoorbaar]? ANDI Peng: Ja, presies. Sommige programme sal jy nodig het om insette 'n command line argument dat dit verby in en wat gebruik maak van dit. Ja. GEHOOR: So, wat as [onhoorbaar]? ANDI Peng: Wel, wat moet ek dan verander in my program? GEHOOR: Slegs 3. ANDI Peng: Hoekom is dit gebeur, dink jy? GEHOOR: Omdat die [onhoorbaar]. GEHOOR: Jy wil hê om verander dit na 2 [onhoorbaar]. GEHOOR: 1 en 2. ANDI Peng: 1 en 2, presies. So in hierdie geval, sou jy waarskynlik wil twee printf statements-- het een wat argv 1 gedruk en die een wat gedruk argv 2. Hier. Ek kan eintlik nie dat 'n werklike vinnig. Daar gaan jy. Oh. Nie heeltemal wat jy wou. Maar as jy ouens gemors rond met die opmaak, sal dit uit te kom. Ja. Koel. Ek weet ons is 'n bietjie kort op tyd. Maar ek is net gaan om vinnig spandeer paar minute gaan deur helpful-- GEHOOR: Jy het twee minute. ANDI Peng: Ek het twee minute? Dankie. 'N paar vinnige pset wenke. So vir hierdie pset, ek raai, soos ek gesê het, elkeen na die spec te lees. Jy sal skryf drie programs-- een genoem initials.c, een wat geroep caesar.c, een wat geroep vigenere.c. Sommige belangrike wenke wat julle ouens regtig wil so in mind-- te hou daar is 'n funksie genoem atoi-- as ek wil sê, 'n trois. Onduidelik of dit is eintlik hoe jy dit sê. Maar al is dit doen, is dit skryf. Dit vat 'n string na 'n int. So 'n stel ASCII om i heelgetal. Dit is net die omskakeling ASCII waardes waardes heelgetal. So onthou argv, die skikking wat winkels al jou opdragte in lyn arguments-- dit vir hulle al die winkels as snare. En so as jy wil in staat wees om het een van hulle word 'n heelgetal is, jy gaan te hê hierdie waarde hier te gebruik. Modulo, soos wat ons gedek vroeër in die klas vandag kan jy die het res van alles wat jy het. So as ons regtig, regtig groot getalle in die keiser wat as ons het die einde van 'n string van Vigenere? Hoe gaan jy in staat wees om te kry wat om te draai rondom? As ek getref z en ek wil dit om terug te gaan na 'n, hoe gaan ek te kry wat om te draai rondom? Waarskynlik wil hê na gebruik modulo daar iewers. Tweedens, blaai om jou biblioteek. ctype.h. Dit is 'n nuwe biblioteek wat ons het. Jy sal 'n baie regtig te vind, nuttige functions-- isupper, islower, toupper, tolower, isalpha, ensovoorts. Alle funksies wat baie nuttig sal wees wanneer jy probeer om uit te vind, is hierdie karakter 'n klein letter? Hoe kan ek hierdie skakel string om 'n hoofletters? Al hierdie dinge sal baie wees, baie nuttig vir jou pset. OK. Kantoorure vanaand is 08:00 tot 11:00 in die TEAL klaskamer môre sowel as Woensdag en Donderdag nag. Kantoorure in commons. Hoogs stel voor dat jy ouens al dadelik te begin, omdat jy nie wil wees dat kind wat Donderdagaand het probleme die indiening van jou pset en soos, ek weet nie wat om te doen. Ek het begin, ek klaar is, voorgelê ek. Probeer om jouself te gee 'n paar kamer, want in die kode probleme altyd voorkom. Jy wil om seker te maak dat jy jouself gee 'n baie tyd om in staat wees die psets voltooi. Koel. Ek sal hier rond te hang. GEHOOR: Is reeds hierdie aanlyn? ANDI Peng: Ek weet nie of dit is aanlyn reeds, maar dit sal wees. Ek sal hier rond hang as iemand enige vrae reeds. Dankie vir die kom.