[Powered by Google Translate] [♪ summende ♪] Så for at introducere dig til, hvad jeg har fået frem på skærmen; Det er et af de værktøjer, vi udviklede i løbet af sommeren; det hedder CS50 Spaces, og det er vores fælles kodning ansøgning at vi kommer til at bruge i sektioner. Det er temmelig cool. Har nogen af ​​jer set CS50 run endnu? Lad mig trække det op i en anden fane. Run.cs50.net Så Hvis du går til run.cs50.net, du kan se dette er en i din browser måde at faktisk kode - skrive C-kode, og derefter køre det, så det både udarbejder det, kører det, så returnerer output til dig, så dette er lidt af en cool måde at eksperimentere med nogle af den kode, David går over i forelæsninger og vi giver på dig på problemområder sæt uden egentlig at skulle fyre op for apparatet. Så hvad Spaces gør det er forskelligt fra det hvis jeg skifter tilbage til denne fane, Spaces er CS50 løb, ligesom du kan se lige her, men hvis vi ruller over og se på den anden side af vinduet, du ser ret Jeg er den eneste person i dette rum, men hvad jeg har tænkt mig at gøre, er at bede jer at deltage i denne Space med mig og vi vil alle komme til at kode i den samme lille vindue, dele kode med hinanden, og taler om forskellene mellem vores kode. Så det er sådan en cool ting - så at deltage, hvis du vil besøge dette link lige her på toppen at jeg har fremhævet, du kan blot skrive i apps.cs50.net/spaces/vqcspSnO. Okay, så at starte, Jeg har tænkt mig at give dig en lille smule af en rundvisning i dette. Vi skal lave nogle dumme lidt kodning med det i første omgang, bare så alle kinda får en fornemmelse for hvad det vil sige, men hvad jeg har gjort - eller hvad jeg er ved at gøre lige her er - Jeg har tænkt mig at tage den kode, jeg har skrevet i her, der som du kan se lige nu er tom; det gør ikke noget. Det er bare kedel plade kode, vil vi kalde det. Med lidt gøremål kommentar. Jeg har tænkt mig at gemme det ved at trykke denne knappen Gem. Og hvad det gør, er det fremhævede det op her kort - denne revision save grøn boks, og nu, hvis du søger efter mig i rummet, du klikker på mit navn, du kan se, at jeg har fået denne revision lige her, og hvis du klikker på denne revision, det vil indlæse denne kode på din Space, også. Så har alle lagt denne kode ind i deres Space? Okay, hvis du ikke har endnu, gå videre og gøre det, og så hvad jeg vil have jer til at gøre i denne lille to-do sektion er at skrive en lille smule hjælp printf om dig selv, så for eksempel, ville jeg skrive printf ("Mit navn er Nate"); og så ville jeg skrive "Jeg dimitterede i 2009 fra Stanford " og jeg ville elske at høre om hvilket år du er i skole, uanset om du er på skolen eller business school eller en anden Harvard School, hvad du studerer, hvis det er kendt endnu; hvis det ikke er kendt, det er helt cool. Jeg har ikke beslutte indtil jeg var sent i min sophomore år. og så ville jeg også elske at vide noget crazy du ønsker at fortælle mig eller noget om klassen eller bare noget andet. Når du er færdig med at skrive, at med din lille printf, hvis du vil spare revision eller rettere først kontrollere, at du kan køre det og at den udskrives præcis, hvad du vil have det kan printe den ud og derefter, hvis du gå videre og redde denne revision vha. Revision knappen Gem, denne første lille fyr herovre, og vi vil kinda gå igennem og gøre lidt introduktion på den måde. Så du skal bare nødt til at slå på knappen Afspil, der er heroppe øverst til venstre, så denne Play-knappen øverst til venstre, vil Send din kode ud til vores server, hvor det bliver kompileret og derefter køre. Så hvad er kinda vild med dette er denne kode faktisk ikke kører på din computer; det er faktisk blevet sendt over internettet. Hvordan gĺr det, Charlotte? >> I - okay. Jeg - Jeg tror, ​​jeg er har vanskeligheder med at gemme den på serveren, således at den kan - jeg kan køre programmet. Og så når jeg prøver at køre det, det siger, at der er en fejl. Erklæret som en virus, som ikke er i der mere. Åh, lad os se, kan du trykke på Gem igen? Jeg ser det på skærmen. >> Right, okay, så det er hvad jeg har. Og jeg ved ikke, hvorfor det ikke lade mig køre den. Oh, okay, undskyld. Kan du forklare hvorfor - hvad der var galt - hvad var ikke arbejder med det? >> Ja, fordi jeg ikke se, at der var en sidste linje, hvor der er stadig en variabel at jeg ikke havde erklæret, som jeg ikke havde i sinde for det er der. Ja, perfekt! >> Nu, hvis jeg gemmer den, jeg synes, det burde virke. Nu hvor du har gemt det, det virker; awesome. Så ja, som vi går igennem - så, hvad der foregik, Jeg skal bare at gentage dette for kameraet. Hvad skete, var, at denne variabel s blev efterladt i efter - jeg antager du har slettet nogle andre ting hvor du anmeldt som, og så dette var at smide ting ud og blev ikke lade dig køre den. Så det er præcis, hvad vi ønsker at gøre i afsnittet er har folk prøve at skrive forskellige stykker kode, kompilere det, se hvad der virker, se hvad der ikke, og så kinda taler om disse ting, fordi det er trip-punkter, der Jeg stadig støder på, Jeg stadig - jeg gøre en masse dumme ting hele tiden, og jeg ved ikke, hvorfor det ikke virker, så lad os trække op Charlottes revision 3, og vi vil køre den. Så når jeg løber, nu hvor jeg har fået hende kode i her, Jeg kan zoome ind, ramte knappen Kør, uploads det, bygger det, kører det, siger, at det blev kørt, og hvis jeg rulle ned, se Charlotte er en junior på Adams House, psykologi, sekundært i økonomi; awesome. Dejligt at møde dig! Awesome. Okay, vi går videre, lad os gå til Daniel, gå til revision 3, kompilere, løbe; hvorfor du ikke fortælle os lidt om dig selv, Daniel? >> Ring mig Dan. Jeg har tænkt mig at business school på tværs fra jer, og jeg var i Marines før her, og det er alt nyt for mig, så ja. Må ikke føle sig dårligt, jeg er 30, og jeg kender ikke nogen af ​​disse ting. Awesome, tak, Dan! Okay, vi fik en anden Daniel. Du går af Daniel - vil du præsentere dig selv, Daniel? >> Sure, jeg er Daniel. Jeg er en sophomore på Mather lige nu. Jeg koncentrerer mig om regeringen, men jeg ønskede at tage CS50 fordi jeg har hørt gode anmeldelser om klasse og jeg har aldrig prøvet CS før. Rul ned her og vis denne - cool. Bevæger sig på, Jared. Hvordan går det? >> Godt, hvordan har du det? Som du kan se, er jeg en junior filosofi koncentrator i Eliot, oprindeligt fra det sydlige Californien, og jeg er interesseret i at CS50, fordi jeg kan lide logikken i det, og det synes virkelig cool at gøre ting på computeren, så. Awesome; hvor i det sydlige Californien er du fra? >> Om en time fra [uhørlig], en lille by [uhørlig]. Oh, yeah, min far er fra Redlands. Cool stuff. Okay, Jimmy, hvordan går det, Jimmy? >> Godt, hvordan har du det? Klarer sig ganske godt! Fortæl os om dig selv. >> Jeg er en freshman, og jeg er ikke helt sikker på, hvad jeg hovedfag i men jeg er kinda hælder til økonomi. Ligesom Daniel før mig, jeg har aldrig gjort noget CS, men det lyder kinda cool. Jeg er oprindeligt fra Chicago. Awesome. Så tjek hans udskrift her. Jeg vil gerne spørge, gjorde denne udskrift, som du forventede? >> Nej, jeg glemte at udskrive en ny linje. Jeg faktisk glemte, at når jeg skrev min ting for første gang,. også Det er lidt af en smerte at huske at sætte dem ind manuelt. Det ville være rart, hvis det bare vide det er, hvad du ville have. Okay, Kelly. Wow, vi har 2 Kellys, 2 Daniels, 2 Kellys. Så Kelly - skal du gå af Kelly Ren? Okay, awesome. Eller Kelly, jeg mener. >> Så yeah, så jeg er Kelly. Jeg er en sophomore i Pfoho. Jeg fik en e-mail i dag, at jeg stadig har 7 uger til at erklære min koncentration, så jeg forsøger ikke at tænke over det, og jeg kan lide bagning, løb og Craisins. Jeg har ikke erfaring med de fleste af CS; Jeg lærte mig selv at opbygge websteder, da jeg var rigtig ung, men jeg tror jeg nok lært mig forkert en masse gange. Forhåbentlig vil jeg lære lidt mere og - ja. Awesome, godt, tak. Lad os gå til den anden Kelly; Jeg har ikke noget - sagde du noget herinde? >> [Uhørlig] Der er det! Søde! >> Okay, så jeg er Kelly. Jeg er en første-års ph.d.-studerende. Jeg hovedfag i Mind, Brain, og Uddannelse. Jeg dimitterede i Franklin & Marshall College i 2008 med store selskaber i psykologi og sociologi og en mindre på fransk. Jeg tager CS50 fordi jeg er interesseret i at få en ph.d. i Neurovidenskab og jeg har lyst dette vil hjælpe mig med at forstå de teknologier, der anvendes. Awesome. Bevæger sig på, Mikaela. Er det korrekt udtale? Okay, awesome. >> Jeg er Mikhaila. Jeg er en sophomore i Kirkland House, og jeg koncentrerer mig i Mechanical Engineering. Jeg kan virkelig godt lide at cykle, byggede en cykel denne sommer. Jeg tager CS, faktisk, som en fusion krav, men du ved, jeg tror, ​​det er stadig cool slags engineering klasse. Awesome - du har bygget en cykel denne sommer? >> Yeah. Wow, ligesom rammen og alt det der? >> Uh-hunh (bekræftende). Wow, det er virkelig cool. >> [Uhørlig off-camera chat] [Latter] Ja, det har været så længe. Man kan aldrig vide, vel? Nå, cool, godt tak, Mikhaila. Okay, Missy. >> Mit navn er Missy, jeg er en freshman, så det betyder at jeg ikke kender noget som helst! Jeg ønsker at koncentrere sig i astrofysik. I CS50, Jeg har lyst til, vil helt sikkert hjælpe med det. En ulige faktum om mig er, at jeg er en nationalt certificeret brandmand. Wow! Hvordan skete det? >> Jeg deltog et akademi og gik gennem helvede for en masse uge og fik min certificering. Wow, tillykke! Det er ikke nogen lille bedrift, for sikker. Okay, så nu vi vil gøre mig. Jeg er den næste i rækken. Jeg - køre den. Så mit navn er Nate. Jeg var klasse af 2009 på Stanford. Jeg var en symbolsk Systems store, som svarer til det Mind, Brain, Behavior koncentration her, men det er lidt af en blanding af datalogi, lingvistik, psykologi og filosofi. Kind of - yeah, en masse underlige ting, men det var stor, og så jeg gjorde min Herres i datalogi der, så godt. Så jeg er ny til Harvard i år. Jeg virkelig ønskede at komme ind i undervisningen. Jeg tilbragte de sidste 4 år på Stanford TA-ning Datalogi klasser og så David lad mig komme videre, og jeg vil være at hjælpe med CS50, så jeg gør det på fuld tid, jeg er ikke i Grad skole. Det har været sjovt. Forhåbentlig det vil fortsætte med at være sjovt, jeg er sikker på det vil. Okay, Sam. >> Mit navn er Sam, jeg er en sophomore på skolen, i lov specifikt. Min store vil være videnskabens historie, sandsynligvis og VES sekundær, og min yndlingsfarve er gul. Ingen grund til at dømme eller noget, men det er en god farve! Og Stella. >> Hej, jeg hedder Stella, jeg er en freshman i Grays. Jeg har ingen anelse om, hvad jeg har koncentreret ind endnu, så CS50 var bare lidt tilfældig, der er interessant. Fun Faktisk var Jimmy den første Harvard af mine venner, fordi vi er begge fra Chicago. Cool, og Grace - det er meningen at være den virkelig rart, ikke? >> Jeg troede [uhørlig]. Oh, yeah. [Uhørlig / off-camera chat] Okay, jeg er stadig læring, stadig læring. Så vi har noget andet, der er lidt interessant her. Ja, jeg er bare undrende, har du en idé om, at der foregår her? Du ved hvordan man skal fortolke dette? >> Jeg skulle sættes semikolon efter hver enkelt linje. Det er lidt af en smerte. Sommetider disse semikoloner kan være en reel smerte at spore. Så det sig, at det særlige program, vi bruger dette år til kompilere vores C koden kaldes Dunk, og grunden til at vi er begyndt at bruge Dunk i år - fordi vi ikke har brugt dette program i fortiden; vi har brugt en anden kaldet GCC det er virkelig populære - Klang faktisk giver dig fejlmeddelelser, der giver mening. Denne ene siger "forventet", "efter udtrykket" og det endda fortæller dig udtrykket hvorefter du brug for et semikolon. Så er du fastsættelse det? >> Ja, lige nu. Awesome, lad mig det vide og vi vil trække det op, og vi vil køre den. Men ja, sætte disse semikoloner i er lidt af en smerte. >> Jeg fastsættes det, så jeg synes, det burde virke. Awesome - revision 3. Det ligner det. Okay, så nu, hvis vi kører det, der det går. Cool stuff. Ok. Så tak for at gøre det. Det er dejligt at møde jer. Hvad vi skal gøre nu, er at bruge den næste lille smule kinda dykke ned i afsnittet problemer der kommer fra det problem, der er fra denne uge og vi vil gøre at for de fleste af afsnittene for resten af ​​perioden, og så vil vi spare den sidste 15, 20 minutter eller deromkring at tale om problemet sat sig og så bare nogen andre spørgsmål, du har generelt om klassen. Når det er sagt, hvad vi virkelig ønsker at gøre er har alle deltager bruger Spaces stuff, smide i kode, kaste i forslag, og taler om, når ting som dette brud eller ikke virker, bare fordi det er ting, at Jeg ved, at jeg kom på tværs da jeg begyndte kodning, og var virkelig kinda frustrerende til tider fordi hvis det er ligesom 2 am før dit problem sæt skyldes, så - bare for offentliggørelse, Jeg startede ikke programmering, før jeg var en sophomore i college. Det var slags denne underlige, ukendte ting at jeg hørte, var kinda cool og jeg har også hørt det kunne være en reel smerte i Butt hvis du går glip af et semikolon og det er den eneste fejl at holde dit program fra arbejde og holde dig fra at gå til at sove, så absolut, hvis du har spørgsmål som det, hvis du har problemer som disse, så lad mig det vide, fordi jeg ønsker at gøre dette til en god oplevelse for jer. Så har du fyre alle hentet problemet sat endnu? Kinda vide, hvor det er? Okay. Så vi vil gå til cs50.net, fordi jeg ikke har det på denne konto, trække op problemområderne sæt, pull up problem sæt 2, og vi vil se på den standard udgave i dag. Vi vil trække op specifikationen her. Rul ned. Så vi vil begynde at se på dette afsnit med spørgsmål. Har du fyre set disse shorts endnu? Okay. Så der er shorts på loops, hvilket gøres ved Tommy, en af ​​hoved undervisning stipendiaterne. Der er en på rækkevidde, Jeg tror udført af en anden undervisning fyr ved navn David og derefter en på Caesar Cipher også gjort ved David. De er temmelig cool. Har du fyre været at se deres shorts indtil videre? Hvordan har de været? Hjælp? Okay, godt at vide. Hvis de ikke er, kan du sige det. Men før du gør det, har du fyre set på disse spørgsmål overhovedet? Lad os tale om det en lille smule. Så vi har introduceret i de sidste par uger i foredrag en række forskellige loops. Der er for-løkken, while-løkken, og derefter do-while-løkken, og i foredrag, har vi talt meget om hvordan disse sløjfer er alle nogenlunde ens på mange måder, og du kan gøre meget af de samme ting med en while-løkke at du kan med en for-løkke. Du skal bare nødt til at slags bruge de rigtige kombinationer af variabler og sådan. og så virkelig den virkelige skelnen mellem alle løkkerne er, at undertiden er de mere nyttige at bruge dem ad gangen end på et andet tidspunkt. Altså for eksempel, while-løkken afviger fra en do-while-løkke. Har alle føle, at de har en god styr på, når et gør-while-løkke er mere nyttige eller hvad forskellen er? >> Jeg tror forskellen er et gør-while-løkke løber - Jeg ved ikke helt hvad den terminologi er, men rækken af ​​funktioner inden for løkken. De automatisk - det gør sine kører i det mindste før den kontrollerer tilstanden, eller while-løkken vil kun køre den, når det løbende kører - uanset om betingelsen bliver opfyldt. Ja, giver det mening? Lad os tage et kig på en lille smule af kode. Så bare for at gentage spørgsmålet, eller svaret, snarere; svaret var, at en while-løkke vil tjekke, om betingelsen som du angiver, er opfyldt inden den løber liget af sløjfen for første gang, der henviser til, do-while-løkken automatisk vil køre kroppen af ​​løkken, er, hvad vi kalder det - det er underligt terminologi, men hvis jeg nogensinde sige noget, der ikke giver mening, så lad mig det vide - sløjfen krop er, at ting, som du sætter ind mellem tuborg-klammerne. Og i et do-while-løkke, dette organ blive kørt mindst én gang, og derefter tilstand bliver undersøgt, inden den kører hver efterfølgende gang. Så faktisk, Sam, har du noget imod at skrive en simpel while-løkke i Spaces? >> Hvordan kan du sortere af samme lave en ny ...? Jeg bare slette hvad du har derinde. Ja, bare klare det ud. >> Tja, jeg tror, ​​jeg har det - hvilken en vil du have, et stykke tid, eller vil du ...? Ja, bare et stykke ægte, udskrive noget ud. Og lad os se. Alexander, jeg indså, at vi aldrig introduceret dig. >> Åh, det er fint. Har du - kan du kode op en gør-while-løkke for os? >> Ja, jeg vil prøve. Okay, vi bare trække dem op på skærmen, så du slags har styr på, hvad forskellene er. Så her er hvad Sam har gjort. Han har et heltal kaldet i at han er initialiseret til 17. Så siger han, mens (int i = 17) printf ("Mit navn er Sam."); Så hvad sker der, når vi kører denne kode? Der er en fejl, hvad betyder fejlen sige? Lad os trække det op og tale om det. Der opstod en fejl, det siger. Lad os rulle ned. Så det gav os denne fejl, og det sagde, "Hey, jeg forventede et udtryk." Det er kinda kryptisk. Ja, så præcist - og igen, vil der være en anden lille bug, som vi vil fange på bare et sekund. Men dette er endnu et af den slags underlige terminologi ting, så dette int i = 17 er ikke et udtryk. Hvad det ser ud som det gør, er at det er erklære et heltal kaldet i og sætte den til svarende til 17 eller rettere sætte 17 ind i det int kaldte jeg. Og det giver ikke mening i forbindelse med denne while-løkke. Det giver mening, da vi vil se, i forbindelse med en for-løkke, fordi for loop erklæringer gør starter med, at der for int i lig noget og går videre. Så gjorde du - ordne noget, okay. Her går det; awesome. Så nu tingene ser lidt anderledes ud. Et par ting har ændret sig. Kan du fortælle os, hvad tingene har ændret sig? >> Jeg tog ud int, så der er ingen erklæring [uhørligt] i stedet for en opgave. Den ene lighedstegn, jeg sætte 2 lighedstegn, hvilket betyder et lighedstegn. Awesome. Ja, så hvad Sam gjorde, var han tog ud int Det var lige her tidligere, så hvis jeg bare se på dette - det er, hvad det var tidligere, det sagde int, som var erklærede det - så vi tog ud type. Der er int, char, string, kort, disse kaldes typer. Så du tog den type og derefter tidligere, han havde bare det indre lighedstegn og hvad han sagde var problematisk om dette blev når du har 1 lighedstegn, det er en opgave operatør. Det er ikke teste eller ej 2 ting er ens. Det er faktisk sætte noget lig med noget. Vi sætter nummer 17 i variablen i. Så for at gøre den slags sammenligning, du er nødt til at bruge det dobbelte lig, der er lidt af en underlig ting men er en ret almindelig fejl. Så en anden ting, jeg vil påpege, hvis du ikke har noget imod, er, at vores funktion her i int main, du se, at kroppen af ​​vores funktion er forskudt fra venstre side med 4 rum eller en fane. Grunden til at vi gør dette er bare for læsbarheden. Som du kan se i Sams while-løkke her, han ikke led overhovedet, og som ikke påvirker funktionaliteten af ​​koden. Det vil køre nøjagtigt det samme. Altså for eksempel, her, hvis vi kommer op til toppen og tryk på vores Play-knappen, vil det bygge det, det vil køre det, og hvad der vil ske? Hvorfor skal det stadig sige kører? >> Fordi det vil holde gentage hi. Præcis, og hvorfor betyder det at gentage hi? >> Fordi heltal aldrig ændres, så det er altid 17. Ja, præcis, så lad os se, efter - minder mig om dit navn igen? Jimmy. Så Jimmy sagde, at grunden til at dette bliver ved at gentage hi igen og igen er fordi denne betingelse er altid sandt. Vi har aldrig ændre værdien af ​​i. Vi har aldrig ændre indholdet af, hvad der er gemt i denne variabel. Så på dette punkt, vi fik denne fejl, Deres program genererede for meget output, og hvis vi rulle ned og slags kig på, hvad der foregår her, du kan se, at det er hi, hi, hi, hi, hi, hi, hi hele vejen igennem. Awesome. Så slags tilbage til det oprindelige punkt at der indrykningen her i kroppen af ​​while-løkken ikke påvirkede noget. Programmet stadig kørte fint. Typisk for god stil - og det er noget, vi kigger efter i dit problem sæt - beder vi dig at indrykke dette med 4 rum, som du kan gøre ved blot at trykke på tasten Tab eller ved manuelt at sætte i 4 rum selv. Cool, okay så lad os gå tilbage og se på Alexanders gør-tid. >> Bare kinda har lidt problemer. Okay, godt lad os arbejde gennem det. Er det okay? >> Yeah. Okay, så here we go. Det er den kode, der Alexander skrev. Går du med Alex - okay. Så her er den kode, som Alex har skrevet. Så har vi fået vores erklæring om main lige her, og så har vi denne heltalsvariabel kaldet i erklæres lige her. Vi har en do erklæring og derefter kroppen igen med disse seler, så dette er liget af den do-mens - Lad mig zoome ind på dette, så det er mere læsbar - og i kroppen, vi forsøger at udskrive "dette er kroppen", i + +, så inkrementere indholdet af i og gøre dette indtil jeg får lov til at være 3, og derefter vores program slutter. Så hvad sker der, når vi kører dette program? >> Jeg forventede en identifikator. Okay, så bygge, køre, opstår fejl. Hvad sker der? Vi rulle ned her, får vi denne lidt kryptiske søger ting, forventede semikolon efter topniveau erklæring. Det er kinda weird. Er der nogen har en idé om, hvad der kunne ske? Kinda weird, yeah. >> [Uhørlig] blive erklæret uden for parenteserne? Så er dette ikke tilfældet så når du bruger parenteser? Så han erklærede denne fyr uden for hvilket parenteser? Åh, disse fyre - de krøllede seler? >> Yeah. Ja, præcis. Så det sig, at du kan faktisk ikke erklære en variabel lige her som denne. Hvad du måske har forsøgt at gøre, var - skære det ud derfra - du kan enten lægge det i de krøllede parenteser lige her eller et andet alternativ er at sætte det helt udenfor. Og så disse - afhængig af hvor du faktisk lægge erklæringen af denne heltalsvariabel, du kan få 2 meget forskellige slags variabler; når det er uden for main, Det er, hvad vi kalder en global variabel. Det er uden for rammerne af en af ​​de funktioner - det er ikke i en funktion - hvorimod hvis vi sætter det inde i main, gerne lige her, så det kaldes en lokal variabel, fordi det er lokale til omfanget af main. Og vi vil snakke lidt mere om, hvad forskellene er mellem de 2 typer, og hvorfor du bruger forskellige typer af variabler, men for nu, du kan bare holde alle variabler lokale, fordi vi ikke har noget behov for globale variable. Okay, så der er én ting lige der. Lad os prøve at køre det igen, se hvad der sker. Kør, få en anden fejl. Zoom ind på en smule, hvad gør vi så? Vi får denne forventede parentes efter gøre / stykke tid. Nogen ideer hvad sker der? Dan? >> Er imens så parentes og derefter - Jeg ved ikke, om du har brug for at redeclare int, men det gør while (i <3). Præcis, ja. Så det viser sig, at Dan er helt rigtigt. Vi behøver ikke at sætte denne type her igen. Vi kan i stedet dræbe typen og bare gøre det. Ok. Jeg vil zoome ud igen, prøv det en gang til. Kig på det, det kører en succes. Hvis vi rulle ned, "dette er kroppen" printet ud 3 gange. Det er temmelig sød. Godt klaret, godt klaret, gutter. Godt klaret. Hvordan er det gået så vidt? Anstændigt tempo? Okay, cool. Så da vi slags tilbage til det oprindelige spørgsmål, vi - og nu, hvis vi se forskellen, du se, at i denne do-while-løkke, tilstanden kommer sidst. Således at computeren aflæser programmet da C-programmer udføres slags i denne rækkefølge, hvor de bogstaveligt talt begynder med den første linje af main, og derefter udføre linje 6, linie 7, linie 8, linie 9. linie 10, linie 11, alle disse ting øverst til højre her vil udføre en gang før vi nogensinde afprøve denne betingelse for at se eller ej i - eller indholdet af i, snarere - er mindre end tallet 3. Og kun hvis når vi kommer til linie 12, indholdet af i er mindre end 3 har vi faktisk hoppe tilbage op til linje 7 og derefter gentage processen, og så tester vi den betingelse igen og igen og igen. Så vi kan sammenligne dette med - zoomer ud igen, scroll ned til Sams version, vi skal se på dette, lidt ændret, således at det ikke længere er en uendelig løkke - hvor hvis vi zoome ind, vi se, at da dette program udfører, det vil først erklære int i, indstille indholdet af jeg være til 0, og så det rammer tilstand, mens løkken først, så i dette tilfælde, denne krop, denne printf ("hej") og i + + ikke engang udføre hvis i er faktisk mindre end eller lig med to. Så hvis i er 3, for eksempel, hvis vi sætter denne her svarende til 4 - eller jeg vil gøre 3, fordi jeg sagde 3 - og derefter køre det, det vil bygge, det vil køre helt fint, men det vil faktisk ikke udskrive noget, fordi det mislykkedes at test for den første sag. Så i klassen, vi slags talte om, hvorfor disse do-while-løkker er nyttige til tider og hvorfor vi ville bruge det i modsætning til en while-løkke. Er der - tror du fyre har nogen forslag for hvorfor en gør-while-løkke ville være mere nyttigt? >> Tja, jeg tror gør-while-løkker er, hvis du vil have input fra brugeren, fordi på den måde kan du lade dem sætte noget i gang, hvis det er korrekt, vi kan gå videre til resten af ​​programmet, men hvis det ikke er korrekt, så du bliver ved med at spørge brugeren indtil du sætte den rigtige indgang. Ja, præcis - præcis, så en gør-while-løkke er nyttigt fordi når beder for bruger input fordi du har brug for at få brugerens input, før du rent faktisk kan kontrollere det. Så i Pset 1, i Pset 2 hvor du spørge for bruger input en masse, det er en smart ting at bruge i modsætning til blot en simpel while-løkke. Hvis du bruger en while-løkke, kan du gøre det samme - du kan gøre det samme med en while-løkke som du gør med en gør-while-løkke. Du skal bare nødt til at slags har denne dobbelt proces hvor du får input først og derefter starte din while-løkke. Hvorimod en gør-while-løkke, du bare nødt til at skrive det én gang og det er meget renere. Ok. Eventuelle spørgsmål? Give mening? >> Afkastet 0 - det er bare sådan en bås eller er det -? Ja, så kan vi - godt, vi vil dække dette lidt mere senere men det viser sig, at denne return 0, at vi sætter ved slutningen af ​​main hele tiden - du kan kinda bare tage det som noget vi gør for tiden. Hvad vi er begyndt at tale om med funktioner slags i slutningen af ​​sidste uge, og derefter igen i denne uge er, at en funktion tager inputs, der er disse ting i parentes; disse er 2 indgange, vores argumenter eller parametre, hvad de er også kaldet til vores vigtigste funktion, og derefter en funktion frembringer et udgangssignal som vi kalder en returværdi. Og den returnerede værdi i tilfælde af hoved er denne int, denne heltal, og den måde du fortælle en funktion, "Hey, det er, hvad dit output vil være, "er med dette ord" afkast ", det pågældende søgeord, snarere og så main tilbage 0 eller main udsende 0 er standard i C-programmer fordi returnere 0 fra metode, de "Hey, alt udført med mit program fint." Hvis vi skulle sætte noget andet end 0, gerne 1, for eksempel , der bruges til at fortælle hvem kørte dette program at noget gik galt. Så som vi involvere sig mere med ting over semestret, hvis du nogensinde har brug for at sige, "Ups, du ved, noget gik galt med dette program," snarere end at have mit program crash, vil jeg gerne anmelde løberen af ​​mit program, at noget gik galt, du kan bruge returværdi, som vi kalder det, det er ikke 0. Så vi vil dække, at en lille smule mere når vi kommer ind funktioner. Den slags giver mening? Okay. Funktioner er slags bizarre - Jeg tror for folk, der har masser af matematik baggrund, det kommer lidt lettere, især hvis du har en lille smule mere abstrakt matematik baggrund og du er vant til at tale om funktioner og alle den slags ting. Men vi vil forsøge at dække dem og gå stille og roligt som de kommer op. Ligeledes hele denne int argc, char * argv [], for lige nu, kan du også tage det som kedel plade. Vi er begyndt at dække dem lidt i foredrag når vi taler om argumenter, der bliver passeret i programmer på kommandolinjen, men i dit problem sæt og dine programmer, det er helt fint bare at skrive ugyldig og holde det simpelt. Og hvad dette tomrum betyder er, at "Hey, er main vil ikke acceptere nogen input; Dette er bare et program vi skal bare køre. Vi vil ikke give det nogen ekstra information hver gang vi starter det op at køre. " Så for nu, kan du gøre dette; du kan også selv udelade return 0 i slutningen af ​​dine programmer, og de vil køre fint, men jeg anbefaler blot at holde det i. I et par uger, vil vi begynde at slags trække sig tilbage låget en lille smule og forstå mere om alle de forskellige små bevægelige dele. Okay, lad os nu snakke om vores andet spørgsmål her. Så hvad betyder "sort identifikator" angiver normalt hvis udsendt ved Dunk? Jeg tror, ​​vi måske har set, at der allerede i dag. Kan nogen give et resumé af, hvad det betyder? Lad os se, Kelly - en af ​​de Kellys. >> So - Ja, hvad gør - >> Jeg tror, ​​når du, ligesom ikke erklære variabler, og du forsøger at bruge det. Ja, præcis, præcis. Så hvis du nogensinde ser denne udgang når du prøver og kompilere dit program, ligesom Kelly sagde, betyder det, at du har brugt en variabel, som du ikke har opgivet, så hvis jeg gå tilbage til vores Space, og jeg gør noget som printf ( "Hej% s") og prøv og udfylde denne% s med en variabel s at jeg ikke har erklæret overalt og jeg prøver at køre det, du vil se, hvad jeg får ned på denne nederst til højre her: "Brug af sort identifikator 's'"; det betyder bare, at du ikke erklære din variabel. Samme sker, hvis du har x og du prøver og gemme 7 i det og jeg ikke erklære X. Jeg får den samme fejl: "Brug af sort identifikator 'x'". Okay, så Caesar Cipher, ikke at være meget sikker Jeg vil lade jer se denne korte, slags forstår hvorfor, og forhåbentlig efter at gøre denne uges problem indstillet hvor du faktisk skrive en Cæsar Cipher, vil du forstå en lille smule mere om, hvad det betyder at være en sikker og usikker - eller ikke sikkert, jeg gætte - usikker er lidt anderledes. Den anden ting var vi har disse andre spørgsmål her om funktioner og hvad en funktion er, og vi slags talt om, at kortvarigt, når vi talte om tilbagesendelse værdier; for nogen, der har været at belære, kan du opsummere som har været til at holde foredrag i dag? Ok. Lad os se, lad os få - kan nogen fortælle os, hvad en funktion er? Kelly? >> Dybest set noget du trække på noget, der er skrevet i det bibliotek, der er mere kompliceret derovre, og så skal du bare skrive en kort form af det, så ligesom du henviser tilbage til det bibliotek, hjælp hele den lange kode og [uhørlig]. Ja, præcis, og så du wanna tilføje noget til det? >> Ja, jeg tror på det som svarer til begrebet om en formel i matematik hvor du bare skrive en formel og så du kan tilslutte variabler i og det er hvad en funktion er [uhørligt]. Ja, så har vi et par svar her der er både rigtig god og lige på. Der har med henvisning til kode, der er blevet skrevet i biblioteket eller andet sted det er mere kompliceret og derefter kan du trække på denne kode og faktisk bruger det ved bare at skrive den korte form af det - eller rettere dens navn - og så er der også denne sammenligning til en formel i matematik eller fysik, al den slags ting hvor du har en formel og du kan derefter tilslutte de variabler til denne formel for derefter at få resultatet af formlen, så du tænker over det, som ligesom den andengradsligning. Tænk, hvis snarere end at skulle lære om hvad den kvadratiske formel er i matematik klasse, du bare havde en lille regnemaskine program, der gjorde det for dig. Var der nogen bruge lommeregner programmer i matematik klasser i gymnasiet? Ja, fysik klasser? Hvor du kan bare sige, "Hey, kvadratiske formel. Disse er de variabler, som jeg gerne vil input. Nu give mig svaret. " Det er lidt af, hvad en funktion er. Det er en måde for os at slags skrive som en lille smule sub program inden for vores større program og bruge det igen og igen så vi ikke behøver at kopiere og indsætte kode, vi kan give det forskellige indgange og få forskellige udgange, det er super handy når du forsøger at skrive forskellige programmer på forskellige tidspunkter. Altså for eksempel, en funktion, som vi har brugt igen og igen og igen hele kurset er printf. Printf selv er en funktion og det viser sig, at det er faktisk en temmelig lang og kompliceret, nasty leder, fungerer til at skrive. Så så simpelt som det forekommer os at udskrive ting ud til skærmen, fordi vi alle bare gjorde det i begyndelsen af ​​afsnittet i dag, viser det sig, at det faktisk er, du ved, et godt par hundrede linjer kode. Det er ikke noget, jeg nogensinde ville gerne skrive, for sikker, men vi kommer til at bruge det hver dag, det er lidt cool, så vi kommer til at dele det med hinanden, med forskellige programmer, så vi vil være dykning mere i funktioner; for øjeblikket er vi ikke - den eneste funktion vi kommer til at skrive, er main. Main selv er også en funktion, og du kan se det har fået sin produktion, dets råvarer og materialer som vi talte om, og så sit navn, som er main. Main er lidt af en - er en særlig funktion der. I dit C-programmet, skal der være en hovedfunktion, og så for nu, har vi slags udeladt skrivning prototypen, eller angivelse af, main. Vi har givet det til dig, og vi har netop havde du udfylder slags emnerne. >> Så for det andet problem sæt, behøver vi ikke at skrive det i den anden funktion? Jeg tror ikke det. Jeg tror, ​​det er alle herinde. Ja, så Caesar Cipher, du behøver ikke at, det ikke se ud, og Vigenere, gør du heller ikke, så - og det viser sig, du ikke nogensinde faktisk nødt til at skrive en funktion, right? Du ringer altid lægge alle din kode i main, og mange programmører gøre det. Da vi går videre, vi begynde at indføre funktioner som en måde at rydde op i din kode, at gøre det mere elegant, i tilfælde af at du har opgaver - lidt ligesom når vi talte om loops, hvordan nogle gange er der ting, du ønsker at gøre igen og igen og igen, og du har slags den naive måde - eller hvad vi ofte kalder "stråmand" løsning, er bare at kopiere og indsætte igen og igen - du kan gøre det samme med funktioner, hvor du bare kopiere og indsætte den samme kode igen og igen, men det bloats din kode - det ender med at gøre din kode rigtig lang - og det også bliver lidt forvirrende, og så betyder det, at du ikke er i stand til at kunne lide - hvis du nogensinde vil bruge denne kode igen i et andet program, du også fast kopiere og indsætte det igen, så en af ​​de ting, vi taler om, er form for design og stil af dine programmer, og så når det giver mening at slags pakke noget op og sætte det som en separat funktion, vil vi opfordre dig til at gøre det, og det er noget, der, igen, der er ingen ufravigelig regel. Vi sjældent sige, at du skal skrive en funktion kaldet dette, men det er mere af en af ​​de ting, du bare udvikler sig over tid som du skriver flere og flere programmer. Flere spørgsmål? Okay, så lad os nu gå tilbage op til denne fyr lige her, så jeg er stadig i denne del af spørgsmålene. Vi har talt om alle disse forskellige dem, hvad er en funktion, hvorfor man skriver funktioner, når du bare kan kopiere og indsætte? Forhåbentlig har vi overbeviste dig at skrive funktioner er en god ting. Så lad os nu gå videre til dette MySpace program, og vi vil tilbringe en lille smule tid at gøre dette. Så lad os se, kan jeg have nogen læse dette for mig? Lad os få Mikhaila - vil du læse dette for os? >> Du mener tilbage, når MySpace - Back When MySpace var cool. >> "Tilbage, når MySpace var cool, Det var alle de vrede til at skrive som denne. Måske er det stadig? Jeg er ikke helt sikker. Under alle omstændigheder under anvendelse af CS50 Appliance CS50 Run, eller CS50 Spaces, skrive et program, der beder brugeren om en besked og derefter udlæser meddelelsen med sin første bogstav kapitaliserede, med alle de andre bogstaver i vekslende tilfælde, som pr prøve output nedenfor, hvor boldfaced tekst repræsenterer nogle brugerens input. For enkelhedens skyld kan man antage, at brugeren vil kun modtage små bogstaver og mellemrum. Overvej dette problem en mulighed for at øve; vil du ikke blive bedt om at indsende dette program. " Awesome, tak. Således Mikhaila sagt, vi kommer til at skrive et program, der MySpaces din kode. Så har nogen af ​​jer bruger MySpace? Nogen af ​​jer har MySpace-konti? Oh, yeah, yeah! Det var temmelig cool. [Latter] Jeg kender. Dating mig selv. Så hvad vi forsøger at gøre, er at skrive et program der går igennem og det første bogstav og derefter hvert bogstav derefter - eller hver anden bogstav derefter, jeg er ked af det. Så - og du kan se i dette eksempel, dette er, hvordan vi kører programmet, og så det er bare at sige: "Vi kører et program kaldet a.out. Det input, som vi vil give det vil blive bedt om det. Vi vil ikke kunne give input på kommandolinjen. " Hvis du har fulgt alle foredragene og høre om kommandolinjeargumenter, det er lidt af hvor dem - det funky syntaks på main kommer ind med int argc, alt det, så her vi ikke bruger det, vi ikke beskæftiger sig med noget af det. Vi er bare gonna get denne maskinskrevet af brugeren, og så den anden linje med funky kapitalisering er, hvad vi ønsker, at vores program til output. Så i stedet for at bruge Appliance eller Run, bruger vi Spaces, fordi vi har fået Spaces, og så hvis du fyre ville få din kode til at se noget som dette, så jeg har tænkt mig at gemme denne revision bare så du har fået den kedel plade lige her der ligner dette, int main (void), intet i det. Faktisk hvad vi vil gøre, er vi bare slette alt alle sammen. Vi ønsker en blank tavle, fordi vi er ikke gonna begynde at skrive kode; snarere, vi skal nok prøve at skrive nogle pseudokode som virkelig bare betyder, at vi kommer til at skrive noget, der ikke kode den slags beskriver, hvad vi ønsker at gøre, kinda ligesom David gjorde på den første dag i foredrag, eller jeg gætter på, at var den anden dag i foredrag, da han gjorde det hele sokker demo. Du fyre huske, at - se de sokker? Joseph var deroppe slags for at skrive på engelsk? Så vi skal nok gøre det samme. Så når jeg begynder at skrive pseudokode, Jeg vil gerne starte med at kigge på, hvad indgangen bliver. Og jeg giver mig selv en prøve sag, så som "tak for add!" Og så vil jeg også skrive hvad jeg vil output til at være, som i dette tilfælde er noget som dette. Og den slags giver mig en god, ligesom begyndende sted at tænke over, "Okay, jeg ønsker at tage linje 1 og jeg ønsker at omdanne det til linje 2, " og den slags hjælper guide mine tanker. Dette er et godt sted at starte. En anden måde at tænke på det også, da vi kinda videre og som du gør dette i dine egne programmer, er at tænke lidt ligesom hvad er kant sager til dette? Hvad er slags de underlige scenarier? Hvad er de underlige materialer, vi kan få? Og hvad skal disse udgange se ud? For eksempel er en underlig input ville være denne, skabe absolut intet, ligesom hvad skal vi afgive i denne sag? Noget vi ønsker at tænke, også. Så bare som et spørgsmål, hvad kan vi ønsker at output? Hvis vi ikke får nogen input overhovedet, hvad skal vores program skal udsende? >> Ingenting. Ingenting? Det lyder godt. Så vi ønsker at sikre, at vi ikke skriver noget ud hvis vi ikke får noget i. Cool. Okay. Så Jeg har tænkt mig at kalde på et par mennesker, som vi går igennem og bare finde ud af lidt ligesom, hvad den generelle algoritme er og vi vil slags begynde at arbejde igennem det her sammen. Så lad os se. Missy. Hvordan tror du vi ville starte? Hvad ville være et godt sted at starte her hvis vi ønsker at transformere, siger, linje 1 på linje 2? Kan du slags bare forklare mig på engelsk, hvad du tænker? Må ikke engang bekymre dig om kode. >> Første ting jeg ville gøre ville være at form for direkte for brugeren at fortælle dem, hvad du ønsker. Okay, så, siger, "Hey, bruger. Jeg vil en snor "- awesome. Så lad os skrive det ned. Spørg brugeren for en streng. Det lyder som en god start. Ok. Lad os spørge Kelly Ren denne gang. Hvad ville vi så ønsker at gøre næste? Hvad er lidt vores næste -? >> Saml deres input og gemme det som en variabel. Great. Så samle strengen, gemme det i en variabel. Så er der noget særligt, vi ønsker at gøre her? Ønsker vi at kontrollere deres input før -? >> Yeah. Hvad kan vi ønsker at tjekke for? >> Nå, du sagde, at vi ikke behøver at kontrollere, om det er et tal, ikke? Fordi det vil antage, at det er små bogstaver? Yeah. Så det viser sig, at - ja. Så getString er garanteret at returnere os en streng. Det kommer ikke til at returnere et nummer til os eller noget i den retning. Der kan være cifret karakterer inden for denne streng, selv om. Og dem, kan vi ignorere, som vi gjorde kapitalisering. Men en tom streng er helt fint, så tilfælde her på linie 4 og 5, højre, hvor der ikke er nogen input, og vi har lagt noget som vores output. Vi behøver ikke at bekymre sig om at sikre, at der er noget i strengen eller at strengen er mindst 4 tegn; noget er fint. Så dette står i kontrast, for eksempel med ligesom de øre programmer, som du skrev hvor man var nødt til at sikre, at du fik ikke-negative tal; De var nødt til at sørge for, at du var at få det korrekte antal dage i en måned. Og hvordan laver det? Hvordan ville du gøre denne test? Hvad gjorde det kræver at du bruger? >> Gør-mens sløjfer. Do-while-løkker, andre former for løkker, også, ja. Så viser det sig, at vi ikke behøver at anvende en løkke i dette tilfælde, når vi beder om en streng, der er lidt rart. Okay, vi går videre. Så, Stella. Kan du fortælle os lidt om, hvad vi skal gøre nu? Så nu har vi fået snoren, så har vi det gemt i en variabel; Hvad skal vi gøre med snor? >> Vi er nødt til - identificere 2 - Ja, bare sige det på engelsk, det er awesome. >> Hvilke [uhørlige] hovedstæder - eller store bogstaver. Ja, så du ville identificere, hvilke der er store og små bogstaver. Vi kan ikke store eller små bogstaver dem, indtil vi har identificeret hvilke. Så vi vil sætte det ind her. Så bare tænker på denne proces, hvordan gør vi denne identifikation? Kender du, Dan? Kind af, hvad vi - hvad værktøj, vi er nødt til at bruge ud af vores værktøjskasse? >> Jeg ville sætte det i en eller anden måde ind som en matrix eller hver linje er sin egen lille boks, og derefter store bogstaver den derfra eller ej. Okay, så ét værktøj, vi kan bruge, er et array. Hvad har vi til at se på i strengen, Men at finde ud af - vi var nødt til at se på de tegn. >> Så du er nødt til at se på længden af ​​strengen? Ja, så en del af dette er at få længden af ​​strengen. Bare af nysgerrighed, hvad skal vi bruge til at få længden af ​​en streng? >> Strlen? Ja, strlen, vi kalder dette "strlen" Alle disse streng-funktioner, så strlen er en funktion, og det er super praktisk, fordi vi kan bruge det til bare at sige, Hey, strlen: Her er en streng, fortælle mig, hvor lang tid det er. I foredraget i dag, David talte en masse om, hvordan strlen gennemføres, hvad der rent faktisk foregår bag kulisserne. Men dette er en af ​​de meget super handy dem. Der er andre dem, er også i strengen bibliotek, såsom strcmp, som staves "strcmp", som anvendes til at sammenligne strenge til hinanden. Andre dem, du vil bruge som strstr, hvilket er godt for at finde sub strygere og så videre. For det meste, alt de starter med str og derefter gå videre til noget andet. Grunden de faktisk ikke stave dem som snor og så videre skyldes igen ligesom de tidlige dage af C, når folk blev først skriftligt og alt det, de havde begrænsninger på det antal tegn, som du kan bruge for funktionsnavne og variable navne, så alt er ligesom super kondenseret. Men når som helst du ser noget, der begynder med str, der typisk betyder det har noget at gøre med en snor. Okay, så du er nødt til at få længden af ​​strengen, og så, hvad vi gør med de tegn? Kender du, Sam? >> Jeg har ingen idé, jeg prøvede at regne det ud. Jeg ved virkelig ikke, - jeg ville ønske der var en måde at - Jeg mener, ville jeg tror måske vi kunne gøre noget med odds og udligner, men jeg kender ikke nogen funktion som. Yeah. >> Men det - det ville ikke nødvendigvis arbejde, fordi så ville du få rum at være - ville du nødt til at have plads til at få tips om hvordan - Okay. >> Jeg ved det ikke - jeg er lidt tabt på dette tidspunkt. Ja - nej, nej, nej, disse er gode punkter. Så hvad vi skal gøre, er, ligesom Sam sagde, vi er nødt til at spore, hvilke breve er ulige bogstaver, og hvilke der er de lige bogstaver. Men vi ønsker at sikre, at vi ikke bare at kigge på lige og ulige indeks i strengen, men ser på de ulige og lige bogstaver i strengen, så vi er nødt til at kinda have denne skelnen mellem breve - ligesom hvad er faktisk A, B, C, D, eller så videre, og hvad tingene er ikke bogstaver, men stadig i vores streng. For eksempel her, er ligesom dette udråbstegn ikke et brev, men det er stadig en del af vores streng, det er stadig en char. Ligeledes alle disse rum - Det giver ikke mening at kapitalisere et rum, ikke? Så vi ønsker at sikre, at vi på en måde springe dem mens der stadig sporing odds og udligner. Så slags i vores programmering værktøjskasse hidtil, hvis du vil, Vi har en række forskellige værktøjer, som vi har talt om. Så man, for eksempel, er variable, ligesom vi har talt om her. Et andet værktøj, vi har talt om er funktioner. Så vi har talt om variabler i vores pseudokode op her som hvad vi vil bruge til at gemme vores streng. Vi har talt om funktioner til at få længden af ​​en streng, ligesom strlen. Vi har talt om noget andet, og vi har talt om det for en masse tidligere i afsnittet i dag: sløjfer. Hvad tror du fyre tror om at bruge en løkke i dette program? Jared, hvad tror du? Ville vi bruge en løkke i dette program? >> Sandsynligvis ikke, nej, fordi du ikke behøver at gå igennem det mere end én gang. Okay, du ikke behøver at gå igennem hvad mere end én gang? >> Hele strengen. Højre, så du ikke behøver at gå gennem strengen hele én gang. Beklager, der gjorde absolut ingen mening! Du behøver ikke at gå igennem hele strengen mere end én gang. Okay. Hvad mener du? >> Jeg tror, ​​at det er bedre at bruge dem så vi kan gøre ligesom kapitalisere mens placeringen af ​​det [hørbar] nummer. Store, og så udnytte hvad? Okay, så vi siger, at Vi skal bruge en løkke fordi vi ønsker at et bogstav, mens det ikke er et tal. Så - undskyld, har du vil tilføje? >> Jeg ville sige, at den måde du behandler strengen og det [uhørlig] adskiller [uhørligt] på tegnene? Yeah. >> Og så kan vi tildele numrene til - eller baseret på placeringen af ​​bogstaverne i strengen? Yeah. >> Og fastslå, om det er lige eller ulige og for at kapitalisere selve brevet mens placeringen af ​​brevet er [uhørligt] - undskyld. Great. Så bare et resumé. Kan du minder mig om dit navn igen - Undskyld. >> Charlotte. Charlotte, okay. Så hvad Charlotte siger, som er helt rigtigt - gosh, dette kan lide at auto led på mig - er, at hvis vi ser på en snor som denne i toppen - "Thanks for the add" - som en sekvens af tegn hvor er i position 0, h er i position 1. A er på 2, så vi fik 3, 4, 5; rummet er i position 6. Betragtninger - hvad er placeringen af ​​f? 7! O? 8. R? 9. Og så har vi 10, og så jeg kan ikke rigtig skrive det uden det kinda få rodet på skærmen. Men det er faktisk, hvordan vi kan tale om strenge i hukommelsen. Er det en streng er en sekvens af tegn, og når vi refererer til individuel karakter i en streng, vi ofte gør det ved at henvise til, at karakter position i strengen, sandsynligvis den samme måde, som vi taler omkring september er den niende måned i året eller mandag er den første dag i ugen. Så det giver os en måde at finde ud af, hvilke der er ulige versus selv fordi du kan se her, hvis vi matche det op med denne T, du kan se, at alle de aktiverede dem er på lige pladser, i det mindste for det første ord, og derefter ting bliver smidt ud, når vi rammer det rum, fordi vi ikke tæller dette rum som et brev, så det er som om, vi startede og gik 0, 1, 2, 3, 4, 5, space, 6, 7, 8, rummet, 9, og derefter 10, 11, 12 og så videre. Cool, så vi vil helt sikkert ønsker at bruge en form for loop at gå over hver af figurerne efter tur. Så på dette punkt, vi vil komme tilbage til vores gamle pseudokode her. Som en del af denne identifikation af hvilke, er store og hvilke der er små bogstaver, vi ønsker at gøre dette i en eller anden form for løkke. Loop, colon. Hvilken slags løkke, ud af de typer af sløjfer, vi har, synes at være en god at bruge i denne sag? >> Jeg tænkte for-løkken. Og hvorfor tænker du på for-løkke? >> Fordi det starter ved nul, og derefter når vi kommer til længden af ​​strengen, og derefter hver iteration kan du [uhørlig], også? Ja, præcis. Så, ud af de forskellige valg af sløjfer, vi har for løkker, mens sløjfer og gør-mens sløjfer. Når en for-løkke er særligt nyttig er, når du ønsker at vide slags, hvor du er i sløjfen, hvor mange gange løkken er udført indtil videre. Hvilket er præcis, hvad vi ønsker at vide i denne situation, ligesom Kelly sagde, baseret ud af Charlottes tidligere kommentar, at vi ønsker at kende positionen af tegn i strengen, og for-løkken vil give os netop det, for hvis vi begynder slags ser tilbage på vores streng, hvis vi starter vores for-løkke ved 0, og vi går op gennem længden af ​​hele strengen, så vi kan knytte bogstavet T med 0 i vores for loop, bogstavet H med 1 i vores for loop, og så videre, gå hele vejen gennem enden af ​​strengen. Så lad os starte kodning dette bare en lille smule Bare så du fyre få en fornemmelse for, hvad det ligner. Jeg har tænkt mig at gemme det, så vi har fået vores pseudo-kode i her, og jeg har tænkt mig at slette alt. Så jeg har en blank tavle. Jeg vil starte med at skrive int main (void) { Jeg vil sætte return 0 i og derefter}. Så normalt når jeg begynder at programmere, det er hvad jeg starte med. Jeg vil gemme den, så du fyre har det. Så en af ​​de første ting, vi talte om, var få input fra brugeren og lagre den i en streng. Hvordan får vi input fra en bruger? >> GetString. GetString, okay. Så hvis jeg skriver GetString () og et semikolon. Lad os prøve at køre dette, vil denne kørsel, først og fremmest? Og hvorfor vil ikke dette køre? >> Du er nødt til at deklarere variablen. Jeg er nødt til at erklære en variabel. Okay. Så hvordan gør jeg det? Har du noget imod at skrive noget, at dele det? Og så kan vi trække det op. Lad os se, Dan, højre, okay. Eller Daniel. Kopier det i, string input = GetString (). Awesome. Vil dette køre? Lad os prøve det. Hit run, uploading kildekode, bygning, der opstod en fejl. Okay. Så hvad sker der her? Anvendelse af sort identifikator "streng". >> Vi er nødt til at medtage bibliotekerne? Ja, så Dans sige, at vi er nødt til at medtage bibliotekerne. Er det hvad du ville sige, Stella? Awesome. Det er fedt, så Stella, kan du kopiere denne kode ud af Daniels Space? Hvis du klikker på Daniel Roland Ki, kopiere den, og derefter vil du sætte include linje i, og derefter gemme det ud? Lad mig vide, når du er klar. Så dette omfatter syntaks er også slags funky; Der er ligesom at hash tag, Og der er omfatter, og så er der disse vinkelbeslagene. Kan du huske, hvordan det virker, eller skal jeg sætte det op på denne kode lige her? >> Jeg er god. Okay. >> Jeg trykte det - jeg var ikke sikker på hvilket bibliotek, selv om. Oh, okay - ja, så er det CS50 bibliotek. >> Åh, jeg sætter stdio bibliotek. Oh, fik det - ja, nej, that's - så viser det sig, at strengen er faktisk noget, der er særligt for CS50. Der er faktisk ikke en sand streng type fordi lige her, er streng i type stilling, - vi erklære en variabel kaldet input af typen string - og vi sætter indersiden af ​​input den værdi, der bliver returneret til os: produktionen af ​​denne GetString funktion opkald. Du kan fortælle det er en funktion opkald, fordi det har fået parenteserne, ligesom printf gør, ligesom strlen gør. Men snor er faktisk ikke en reel form i C-sprog. Vi har gjort det til en type, og vi vil tage omkring mere, hvad det egentlig er i C, der, fordi er en måde at arbejde med strygere; vi lige har gjort noget for at gøre det ser lidt pænere. Så her går vi. Her er Stellas kode. Det har fået den # include . Andre mennesker vil kalde dette som en hash indeholde nogle gange eller en skarp omfatter. Nu kan vi begynde det, kør det, og vi stadig får en fejl. Lad os se hvad der sker. "Ubrugte variabel 'input'." Okay, så det er cool, det er cool. Jeg mener, det er ikke rigtig cool, fordi vi får en fejl, og det er ikke kører, men hvad dette siger er, at Vi har ikke brugt vores variabel, der giver mening. Vi har ikke forsøgt at gøre noget med det. Dette er en måde, Klang forsøger at hjælpe os med at sikre, at vi ikke bare ved at bruge variabler og derefter uforvarende kalde dem noget andet senere i vores kode, hjælper os med at undgå fejl på den måde. Okay, så vi har fået input fra brugeren, vi gemt det i en variabel. Det næste skridt var at så begynde at kigge på alle tegn i strengen og identificere, hvilke der skal være store bogstaver og hvilke der skal være små bogstaver. Og ligesom Kelly og Charlotte opdraget, Vi gør dette ved hjælp af en for-løkke. Så der nogen huske syntaksen for en for-løkke og vil gerne tage et stik på bare at skrive den første linje i for-løkken, bare for lidt? Kelly, du vil give det en chance? >> Yeah, så du er nødt til at initialisere først, så jeg satte i = 0, og så gjorde jeg i > Ja, jeg skruet op en lille smule, men ja. Okay, lad os trække det op. Awesome. >> Men så jeg vidste ikke, om du havde det - Ja, okay. Så her er hvad Kellys fik: lad os se på det hurtigt. Så hun er inkluderet i CS50 biblioteket øverst. Hun er inkluderet standard IO-biblioteket i toppen, og standard IO har funktioner som printf, så hvis du nogensinde ønsker at bruge printf, du har brug for denne linje. Og så hun omfattede strengen bibliotek, som vi får brug for, fordi strengen biblioteket har strlen funktion, som vi vil komme til i bare en smule. Så hvis vi ser på, hvad Kelly har gjort her, kan du gå os gennem hvad du gjorde? >> Ja, så - jeg mener, jeg har fejl, så - Ja, nej, det er - >> Så jeg ville kalde den streng, som jeg fik bare "streng". Jeg ønskede at udskrive strengen og så vil jeg - Jeg ville gerne sætte strengen som ligesom et array af hvert tegn være anderledes [uhørlig], right? Og så ville jeg starte på position 0 og derefter hver 2 rum, Jeg skulle til at kapitalisere, så jeg lige har beskrevet det som 23, fordi jeg søgte på den ASCII-tabellen. Så det er hvad jeg tænkte - jeg ved, det er ikke rigtigt. Fik det, så dette er en god start. Jeg tror en masse af rammerne er på plads her. Lad os gå igennem slags linje for linje og se hvad der sker. Så den måde jeg kan lide at gøre dette på er bare starte med at kompilere koden og lade compileren fortælle mig lige hvad er der galt med min kode, fordi compileren er rigtig god til at fortælle dig hvad der er galt med din kode. Så hvis vi spiller det, bygge, og det bygger ikke. Det siger, at der var en fejl, så hvis vi rulle ned og se på den første fejl, det sagde - Vi rulle tilbage op til toppen, kan vi se der er 5 fejl, der opstår hernede i bunden. Ups, er der virkelig afskåret. Jeg gætter på, at der bare ikke vil få nogen bedre. Her går vi. Så der er 5 i alt genererede fejl. Her kan jeg kun se de første 2, så jeg kan flytte denne op en lille smule og derefter slags rulle op. Dette er den kommando, der blev kørt at kompilere koden, og derefter den første fejl var i file.c lige her: "Forventede identificere eller '('", og det var på denne linje hvor vi sagde string = GetString (). Du kan se lige her, at det var på linje 8 i file.c, og så jeg tror, ​​at det er tegn 12 - det er fejlen. Så hvad der går galt på linje 8 - Kelly? >> Du skal bare kalde det, ligesom, et brev eller noget, ligesom snor s eller noget? Ja, så viser det sig, at disse særlige type navne, så string, int, char, kort, de er alle specielle nøgleord, og du kan faktisk ikke bruge dem som navne på dine variabler, fordi compileren ser på det og siger, "Åh, jeg ved det er en type," så du kan faktisk ikke har en streng variabel kaldet streng, ligesom jeg forsøger at gøre her, og dette vil ikke virke. Men i stedet, kan vi kalde det noget som er eller st eller str. Vi kunne heller ikke kalde det int. Vi kan ikke have en streng kaldet int. Vi kan ikke have en streng kaldet char, ingen af ​​dem vil arbejde. Så vi vil bare kalde det s for tiden. Awesome. Så hvad næste der sker i denne linje? String - denne linje ser temmelig godt? Lad os give det en anden prøve, lad os køre den. Okay, så vi stadig få fejl. Denne gang, vi er ned til 4 fejl. Så vi fik en af ​​dem. Lad os gå op. "Uventet typenavn" streng ": forventet udtryk," ja? >> Ja, det er fordi jeg forsøgte at navngive strengen. Ja, så det ligner vi nu også nødt til at gå fix alle disse henvisninger til strengen. Du kan se der er en henvisning til streng her, en her, en her, så vi kan flytte alle disse til s. Great. Okay, kør den igen. Building - en anden fejl opstod. Okay, nu er vi ned til én fejl, så int i = s og derefter de kantede parenteser. Så kan du fortælle os lidt om hvad du lavede her, Kelly? >> Ja. Det var på linje 10. >> Jeg ved ikke, om vi havde brug for det hele, men jeg tror, ​​jeg prøvede at - Jeg vil gemme den, så du kan følge med. >> Jeg tror, ​​jeg var prøver at fortælle den til at starte i position 0 i starten af ​​min for-løkke, så jeg tror måske at sige var unødvendig. Så bare for at opsummere, De sagde, at dette - du prøvede at starte denne på position 0 og få dette - ja, så jeg tror tidligere også, når du gik gennem koden, De talte om, hvordan du ønskede at behandle strengen som et array så vi kan få adgang til hvert tegn individuelt. Jeg tror Dan nævnte arrays, også forsøger at konvertere strenge i arrays. Det viser sig den slags under kølerhjelmen, en snor er faktisk gemt som en matrix allerede, og du kan få adgang til det som et array; der er ingen konvertering, du skal gøre. En streng isn't - så - en streng er egentlig ikke et array, men du kan få adgang til det som sådan, fordi alle tegnene er gemt en lige ved siden af ​​hinanden i hukommelsen, så hvis du ønsker at få det første tegn i strengen, det er det samme som at få det første tal i et heltal array. Så vi ofte - we'll henvise til 2 som oh, som en streng, som er en matrix selv om det virkelig - de er meget forskellige ting, men du kan behandle dem meget det samme. Så det viser sig, at denne linje faktisk - vi behøver ikke at gøre nogen konvertering, og i virkeligheden, dette rent faktisk ikke er et gyldigt udtryk, hvilket er, hvad vores compiler fortæller os. Det siger, "Hey, det forventede et udtryk, og hvad jeg har her er noget, det er ikke et udtryk. " At erklære et array, alt hvad du behøver at gøre er noget som dette med et semikolon, og så skal du fortælle array, hvor længe du ønsker det skal være, såsom 5, så denne linie 10 vil erklære et array kaldet jeg med 5 heltal i det. Dette er en side, dette er ikke nødvendigt for koden, men dette er - og det er sådan, hvad erklæringen ser ud. >> Hvordan ville du ikke bruge char i [strlen (s)]? Char i [strlen (s)]? >> Char i, og derefter i parentesen, strlen (s). Ja, så vi kunne - vi kunne gøre dette, og dette ville erklære - hvad ville det gøre? >> Jeg tror, ​​det ville erklære et array af, ligesom - of - oh, behøver du ikke i - oh, yeah, du absolut ikke brug for i. Du erklærer en række tegn af længden s. Og hvad så Sams siger, er, at denne linje 10 - lad mig sætte nogle plads i mellem det og resten, så vi kan isolere det - denne linje 10 ville erklære et array af chars, strlen (s) til en værdi af dem men vi faktisk har brug for den i, og grunden til at vi har brug for i er, fordi vi er nødt til at give arrayet et navn; ellers ville vi ikke have en måde at henvise til arrayet senere i koden. Så dette her er array navn og inde er længden. Dette vil give os et array, men dette er - igen, det er en erklæring. Det er ikke en opgave, det er ikke en initialisering. Hvis vi erklærer dette array som denne, Der er faktisk ikke noget i indholdet af arrayet. Det er bare junk - hvad er derinde. Og som vi sagde, vi faktisk ikke engang behøver at gøre denne konvertering, fordi vi allerede kan behandle strengen s som en matrix. Jeg ved, at vi kører en smule lang til tiden, men jeg vil gerne bare virkelig hurtigt komme til denne for-løkke og vise dig hvordan du får adgang de enkelte karakterer i opstillingen, fordi det er nøglen til vores opgave. Og så vil vi lade dig gå derfra. Så her har vi en for-løkke , næsten godt. Hvad er ikke helt almost there? What's - hvad er ikke helt rigtigt om dette for-løkke? >> Ingen krøllede parenteser? Ingen krøllede parenteser, for én. Wanna sikre, at vi har kroppen af ​​løkken med krøllede parenteser. Ups, ikke pladsen tandbøjle! Og hvad er det næste, at vi skal gøre med denne løkke? Hvis jeg prøver og køre det, nyheder denne fejl, at jeg får? Jeg får alle disse fejl - jeg er nødt til at initialisere jeg. Great. Så dette vil være en løkke - det er ikke helt der, men det bliver virkelig tæt. Denne kode kan vi nu køre, opbygge en fejl stadig forekommer. Hvorfor er det stadig klager, siger udtrykket er ubrugt, og det er fordi denne linje ikke gøre noget. Vi har ikke gemme det hvor som helst, vi ikke gemme resultatet. Hvor skal vi gemme dette resultat? >> S eller jeg? Præcis, og denne funky syntaks, denne s med de kantede parenteser betyder adgang til i'te karakter s. Det kommer til at være noget, der er virkelig vigtigt for opgaven. Desværre, vi nødt til at stoppe her, således at Sebastian sektion kan komme ind, men jeg er glad for at bo efter udefra og vil tage eventuelle spørgsmål. Så tak fyrene for at komme. Dette bør nu uploade, bygge, køre. Vi kan indtaste en streng som "goddag" og den udskriver "QOX". [Latter] Så ikke helt der, men bevæger sig, komme hen imod disse sløjfer! Tak for at komme, og jeg vil være udenfor.