[Speel van musiek] David Malan: Hallo, almal. Dit is CS50 se supersection. Opgedra afdelings sal nie begin vir 'n ander week. En so vandag, ek is hier with-- MARIA: Maria. David Malan: --to eintlik 'n blik op die probleem stel een die kursus se eerste weke van die materiaal, kry jy georiënteerde met CS50 IDE, 'n bietjie van Linux, die bedryfstelsel wat loop op IDE, sowel as kyk na sommige van die oorgang van nuuts af aan C leidende tot die probleem stel een. So sonder verdere uitstel het, in die probleem stel een jy gaan wees ingestel om CS50 IDE, wat is hierdie web-gebaseerde programme omgewing wat ons gebruik om om programme te skryf. Dit is ontwerp om baie kyk herinner aan 'n tipiese rekenaar stelsel loop 'n bedryfstelsel stelsel genoem Linux. Maar dit is in die sogenaamde wolk wat almal beteken in die klas kan eintlik sy of haar eie rekening en gebruik dit, as well. So die meeste van julle het waarskynlik nooit gebruik 'n Linux-omgewing voor of miskien selfs 'n command line omgewing. En 'n command line omgewing is anders. Dit is alles tekstuele. Dit is alles sleutelbord opdragte. En dit is geen muis, geen ikone, geen dialoog vensters nie, geen spyskaarte. Dit is suiwer teks. So op die eerste, is dit soort van voel soos 'n stap terug in terme van sofistikasie. Maar dit eindig as 'n baie meer kragtige, seker, vir 'n rekenaar wetenskaplike uiteindelik. So laat ons neem 'n blik. Hier is ek by CS50.io, via wat kan jy teken in CS50 IDE. En baie soos in Scratch, daar is drie primêre gebiede om hierdie skerm. So op die linkerkant, ons het wat sal die lêer leser wees. En daar is hierdie gids by top, wat nou leeg is want ek het ontslae te raak van al my lêers voordat supersection. En dit is waar ons sal red C lêers wat ons skryf. Bo aan die regterkant, ons het 'n plek waar almal van ons kode gaan geskryf kry. En inderdaad, as ek op hierdie plus, hierdie gaan om my te laat kies n nuwe lêer. En hier kan ek begin skryf C-kode of, regtig, 'n aantal ander tale. En dan aan die onderkant waar dit sê jharvard @ ide50-- en joune sal iets 'n bietjie sê different-- wat dit genoem? Terminale venster. Ja. So die terminale venster is die sogenaamde command line koppelvlak via wat jy kan kommunikeer met die onderliggende bedryfstelsel. En vir nou, ons gaan maak baie min gebruik van this-- net om saam te stel, om te kyk na fout boodskappe wat ons sien, en om ons programme te hardloop. Maar uiteindelik, ons gaan om soveel meer te doen, as well. En jy kan selfs sagteware te installeer en te administreer jou werkplek binne CS50 IDE, as well. Maar meer oor dit 'n ander tyd. So laat ons gaan voort en skryf 'n baie eenvoudige program net om te gaan deur 'n warm-up van hello.c, wat miskien die eenvoudigste program wat ons kan skryf. Ek het reeds oop tot 'n nuwe blad. Ek gaan om voort te gaan en sê sluit in standaard io.h. Dan int main (void). En dan printf ("hello, wêreld" backslash N, naby quote, naby hakies, en kommapunt. Alles reg. So nou sien my venster is untitled. So ek baie vinnig gaan om te gaan na File, Save. En dit is belangrik dat Ek noem dit nie "hallo." So 'n baie algemene fout, veral in die probleem stel een is om per ongeluk net bel jou program "water" of "gulsig" of "Mario" of "krediet" of die wil. Maar jy eintlik wil maak seker dat jy die lêer uitbreiding want dit is die enigste manier waarop die samesteller en ook die kode redakteur weet dat jy eintlik skryf C-kode. So laat my gaan voort en klik op Save. En nou, ook, wat CS50 IDE vir ons gedoen het is dit ook sintaksis uitgelig alles. So dit is alles gemaak baie kleurvolle. En die hele doel van dit is nie funksioneel nie. Dis net om my oë te vestig op die konseptueel verskillende stukke van hierdie program. So laat ons gaan voort en stel hierdie. En ek kan dit stel in 'n paar van die maniere. En in week een, die ou-skool manier wat ons gedoen het dit was letterlik by die opdrag line-- "klang hello.c." En dan slaan ek Enter. En niks lyk om te gebeur in die terminale venster. Maar wat het verandering in die IDE? Waar, weer, IDE beteken net Integrated Development Environment. Dit is 'n fancy manier om te sê hierdie geïntegreerde ontwikkeling omgewing vir die ontwikkeling van sagteware. So, wat het verander in die UI? Wat het jy agterkom dit is anders, Maria? MARIA: Ek het opgemerk iets onder die IDE50 gids tot hier. David Malan: Ja. So hier, nie net het ons "hello.c." Ons het ook "a.out," wat is soort van 'n stom naam vir 'n program. Maar inderdaad, dit is die standaard naam vir 'n program wanneer jy net jou kode op te stel en moenie die samesteller vertel wat lêer uitset. So as ek wil hierdie hardloop, ek nodig het om die compiler-- vertel of eerder, ek moet vertel die werkplek dat ek wil die program genaamd hardloop "a.out." Betree. En daar is "hello, wêreld. "Nou is die" ./ ". is eintlik belangrik is. Selfs al is gewoonlik net ons skryf die name van opdragte, wanneer dit 'n program wat jy het geskryf, wil jy "./" sê want dit uitdruklik vertel Linux wat jy wil om 'n program genaamd hardloop "a.out" dit is in hierdie, waar dot beteken hierdie gids dat ek tans in, wat gebeur om te wees genoem werkspasie, "a.out. Want as ek het net gesê "a.out," Gee, Ek gaan om te kry "a.out opdrag nie gevind "omdat die computer-- want ek uitgevind "a.out," dit het nie kom met die computer-- nie weet waar om te kyk vir dit, selfs al is dit reg onder my neus, om so te praat. OK. So kan ons dit verander na wees "klang-o hallo hello.c." En as ek druk Enter watter program gaan dit uitset vir my? Wat is die naam van die lêer? Ja, in die rug. Dis reg. "Goeie dag." So "hallo" gaan wees die naam van die program want ons het gebruik om 'n sogenaamde command line argument, wat net 'n manier om die gedrag van veranderende samesteller eintlik uitset 'n spesifieke lêer naam. En inderdaad, as ek zoom uit en kyk hier, nou het ek nie net "a.out" en "hello.c" maar ook "hallo" as well. So nou kan ek doen "./hello," Enter. En daar is "hello, wêreld." Maar lastly-- en dit nou sal die konvensie ons gebruik regdeur die semester, typically-- is jy kan ook net sê "maak hallo." En inderdaad, dit is te sê dit is tot op datum, omdat dit reeds bestaan. Laat my gaan voort en te verwyder, met die rm opdrag, beide "a.out" - en sê: "verwyder gereelde lêer a.out?" Wat net beteken, is jy seker dat jy dit wil verwyder? Ek gaan om te sê ja. En dan gaan ek om te verwyder "hallo", maar nie "hello.c." Ek gaan om te sê "ja" uitdruklik, maar "y" is voldoende, as well. En nou sien as ek tik ls-- wat, onthou, beteken dit list-- lys van al van die lêers in my gids. En inderdaad, as ek zoom uit en kyk na bo links, dit bevestig dat dit wat is in hierdie gids, selfs al is dit bestempel as IDE50 hier en nie werkspasie, dit is net "hello.c." So nou af hier, as ek nie "maak hello," Gee, nou sien ek 'n baie langer, maar 'n opdrag meer gesofistikeerde opdrag wat gaan nuttig in die komende weke te wees. En nou kan ek sê "./hello." So laat ons neem 'n vinnige toer 'n ander Linux instruksies. Waarom dan nie ons neem 'n stap rug en eintlik kyk na C meer algemeen, die oorgang van Scratch C, en dan afsluit met 'n blik by die eerste probleem in C. Alle regte. So ek gaan om voort te gaan en net skoon my werkplek met Control-L net om die skerm netjies te hou. Maar dit het geen funksionele anders beïnvloed. Onthou dat ons gesien het 'n paar bevele nou. Dus het ons klang gesien, wat oor die algemeen jy sal nie meer met die hand te voer. Ons sal plaas gebruik. Maar ons het ook ls, wat 'n toon lys van die lêers in my gids. En nou, waarom is daar twee there-- lêers nou, "hallo" en "hello.c." Waarom is daar 'n ster of 'n asterisk na "hallo"? Wat het dit te kenne, gebaseer oor wat ons gesien het in week een? Wat dink jy? Wat beteken die ster dui? MARIA: For-- die program "hallo"? David Malan: "Hallo *". Ja. O, ja? O, uitvoerbare. Dis reg. So dit beteken dat "hallo" is uitvoerbare. So ja, dit is hoekom Ek kan doen "./hello." Alles reg. So wat anders kan ek hier doen nie? Wel, dit blyk ek kan skep ook dopgehou. So laat my gaan voort en skep byvoorbeeld, 'n gids "pset1". En die probleem stel spesifikasie sal jy presies dit te doen, sodat jy nie hoef te onthou vandag. Maar "mkdir pset1" lyk geen invloed hê. Maar weereens, geen fout boodskap is oor die algemeen 'n goeie ding. So as ek tik "ls" now-- ah, nou Ek het 'n uitvoerbare lêer genaamd "hallo", 'n C lêer genaamd "hello.c." En dan is die afsluitende slash, om so te praat nie, beteken dat hierdie is 'n gids. So ja, nou wil ek dit oop te maak. En ek het nie dubbel kliek op dit soos in 'n GUI, 'n grafiese omgewing. Ek plaas sê "cd pset1." Betree. Niks interessant lyk het gebeur, behalwe my klein vinnige here-- dit is Linux se manier herinner my waar ek is, so what gids oop is. Dit is net vir my sê uitdruklik as grafies teenoor. En as ek tik "ls," Hoekom moet ek 'n ander te sien onmiddellik gevra, dink jy, toe ek 'n lys van die inhoud van pset1? MARIA: jy waarskynlik nie iets daar. David Malan: Ja. So dan het ons nie ooglopend geskep enigiets daar want ek het net het die gids. Nou, as ek wou 'n file-- vir die skep Byvoorbeeld, ek kon nie 'n nuwe lêer te skep. En dan het ek kan gaan Spaar en stoor dit as, soos, "mario.c" as jy doen die standaard uitgawe van pset een. En dan, net soos enige Mac of PC, net kies die gids "pset1, Save. En nou het die lêer is leeg. Maar laat ons in zoom weer vir 'n tweede. Kom ons doen ls hier. Nou sien ons "mario.c". So is daar 'n paar ander opdragte wat is die moeite werd om in gedagte oor time-- duidelik of Control-L is wat ek was slaan; mkdir ons gesien; RM ons gesien het, so goed, wat is vir die verwydering van 'n lêer te verwyder of. Pasop wat jy kan also-- en as jy kyk by online tutorials, sal jy RM rf is 'n baie algemene manier om te sê 'n gids wat goed in dit te verwyder. Net super, super versigtig. rf beteken rekursief verwyder wat dit ookal is jy probeer om te verwyder en geweld verwyder. So rekursiewe middel as dit 'n gids met 'n gids met 'n gids met 'n gids, almal van hulle verwyder. En geweld beteken nie eens my vra Ja of Nee, ek seker? So dit is 'n super gevaarlike manier verwydering baie dinge vinnig. Maar beware-- te dikwels doen 'n onverskrokke student per ongeluk verwyder, sê, pset een, byvoorbeeld. MARIA: En as hulle net doen r, gaan hulle om hulle te vra oor elke enkele lêer. David Malan: Wat is matig irriterend. MARIA: Ja. David Malan: So dit is waarom so baie van ons, self ingesluit, is in die gewoonte van die gebruik van rf. Maar dit is gevaarlik. So koper pasop. En dan is mv soort Interessant naam. So, dit is die skuif opdrag, wat voel 'n bietjie weird omdat jy inderdaad kan dit gebruik om lêers te beweeg van een plek na 'n ander. Byvoorbeeld, veronderstel dat ek deurmekaar. Veronderstel dat ek geskep 'n nuwe lêer vir die pset. En ek gered word as "greedy.c." Maar dink ek per ongeluk stoor dit in IDE50-- so in my werkplek self en nie in pset1. Jy kan soveel links bo te sien. Daar is "greedy.c." En daar is 'n paar oplossings. So een, ek kan gebruik om die super gebruikersvriendelike wyse van net te sleep nie. En dit sou werklik los hierdie probleem. Maar vandag, ons probeer om te kyk na die meer arcane maar kragtige maniere hierdie doen. So laat my toe om "ls" in pset1. En ek sien net "mario.c." Laat my gaan voort en doen "cd ..". So CD is weer verandering gids. ".." Beteken wat, al is? Laaste keer het ek gesê "cd pset1 "om te gaan in pset1. So as ek sê "cd ..", wat doen ek? Agteruit. Ja. So dit gaan die sogenaamde ouer. Gaan een vlak, soos verlaat uit 'n gids. So Enter. En inderdaad, kyk wat dit gedoen het. Dit verskuif my net in werkspasie plaas van in pset1, wat in werkspasie. As ek dan nou tik "ls", daar is 'n hele klomp van die dinge. Daar is "greedy.c". So nou laat my gebruik mv letterlik beweeg "greedy.c" in pset1. En so 'n klomp Linux instruksies werk hierdie presies soos. Hulle neem geen argumente of hulle een te neem argument of neem hulle twee command line argumente en so meer. En in hierdie geval, dit is letterlik doen wat dit sê, al is dit succinctly-- greedy.c beweeg in pset1. Betree. Niks lyk om te gebeur. Maar as ek dit weer doen 'n ls, gulsig is weg. En as ek doen "cd pset1", Tik, en dan ls weer, is dit nou in die regte plek. As 'n eenkant, as vir sommige reason-- veral as jy het hortend verbindingsnetwerk of jy rondloop kampus met jou laptop deksel gesluit is en maak dit dan weer en jou werkplek lyk ietwat uit pas, geen groot deal. Net herlaai jou browser venster, en dit moet resync sodat die linker-hand lêer leser lyk presies soos die terminaal venster. Nie te bekommer nie. Wanneer jy twyfel, herlaai die bladsy, so Solank as wat jy het die lêers reeds gered. OK. So mv kan ook gebruik word om lêers te hernoem. En laat ons 'n blik op hierdie laaste opdrag hier. So suppose-- en dit is super algemeen, ook vroeg op. Sommige studente soms 'n lêer te skep genoem, laat say-- wat is 'n ander een? Soos "WATER.C." So ek sal net gil, vir geen rede, in hoofletters. Maar dit is nie die korrekte naam vir die lêer as net omdat ons probleem stel spesifikasie nie vertel om die lêer as hoofletters red "WATER.C." In plaas daarvan, ons verwag "water.c" in klein. En, in werklikheid, is dit problematies omdat check50, 'n program wat jy gaan om te voldoen aan in die probleem stel wat outomaties toetse die korrektheid van jou kode gaan gil op jou as dit kan nie vind "water.c" in alle klein. So ek moet dit regmaak. So baie verskillende maniere om doen dit, waarvan die eerste sou wees om beheer-klik of regs-kliek die naam van die lêer en net verander Naam verander. Heeltemal fyn om dit te doen. Maar weereens, vandag, laat ons doen dit 'n bietjie liefhebber. Kom ons gebruik mv verander "WATER.C" na "water.c." So kan jy ook die eerste argument gebruik om dit te hernoem na die tweede argument As die tweede argument is nie, in Trouens, 'n gids of 'n gids naam. Alles reg. En laastens, 'n bietjie trick-- so ek is in My Workspace gids op die oomblik. As ek wil om te kry in pset een Ek kan seker tik "cd pset1." Maar dit is so vervelig om "pset1" tik of langer lêer name of gids name steeds. So dikwels in Linux, wat wat jy kan doen is tik "asb" en net verveeld, druk Tab, en laat die rekenaar figuur dit uit vir jou. Super nuttig om te kry in daardie gewoonte. Die enigste vangs is as jy veelvuldige lêers of gidse begin met die letter "p" of "PS," jy mag hê om 'n paar meer voor die tik rekenaar weet wat om te doen nie. MARIA: Ons wil kortpaaie. David Malan: Dit wil red jy so baie tyd. En ook, soos ons sê in lesing, jy kan in die geskiedenis blaai, op en af, om uit te vind wat onlangs uitgevoer opdragte, as well. Alles reg. So nou, laat ons ons aandag terug om 'n eenvoudige program, hello wêreld. Dus het ons hierdie presies saamgestel. En nou, waarom nie ons 'n blik op die datatipes en dan die oorgang van 'n paar ooreenstemmende Scratch blokke C. MARIA: Awesome. So nou dat jy begin programme te skryf in C, ons gaan om te begin praat oor datatipes en veranderlikes. So 'n paar tipes data wat jy wil weet nou begin is die mense wat uitgelig in blou. So het ons int eerste, wat staan ​​vir heelgetal. En dat hou heelgetalle, soos jy dalk guessed-- so 1, 2, 3, en enige ander heelgetalle dat jy kan dink. David Malan: En ook negatief. MARIA: En ook negatiewe, yep. En 0. Dan het ons dryf, wat swaai punt nommers. So dit is al die reële getalle wat desimale punte. So 5,0, 5,2, en selfs meer syfers na die desimale punt so goed, en ook negatiewe. Dan het ons kar wat 'n karakter. So ek dink ons ​​het gepraat oor dit in lesing vandag. Maar ons het briewe vir example-- A, B, C-- wat gestoor kan word as 'n kar. Maar dan moet ons 'n baie meer simbole wat gestoor kan word as 'n kar. En diegene gestoor as ASCII. En dan het ons Bool, wat Booleans is. En diegene evalueer waar of Vals of 1 en 0, onderskeidelik. David Malan: En onthou dat Bool kom van die CS50 biblioteek. So dit is nie gebou in C, maar dit is super nuttig die idee van ware en valse hê. En selfs al is jy kan think-- pret feite. A Bool tegnies moet hoeveel stukkies, waarlik, om verteenwoordig True versus onwaar? Hoeveel stukkies dink jy jy nodig sou wees, maksimaal? Ja, net een. So dit blyk dat C kan nie gee jy net 'n bietjie. Die kleinste eenheid van meet wat jy kan kry is agt. So dit is 'n bietjie verkwistende hulle jy met behulp van 'n hele byte, of agt stukkies, om verteenwoordig Waar of Vals. Maar dit is net die manier waarop dit is in C geïmplementeer deur die CS50 biblioteek. MARIA: En dan is die mense wat ons is gaan nie om te praat oor so wyd reg now-- dubbel, dit is vir groter dryf. Lang lang en kort is ook vir heelgetalle. David Malan: Inderdaad. In hacker uitgawe van pset een ons eintlik lang lang gebruik. Maar vir die standaard uitgawe, dit moet nie nodig wees nie. MARIA: Cool. OK. So operators-- jy moet waarskynlik vertroud met die meeste van hulle nie. Daarbenewens +; aftrek, -. Vir vermenigvuldiging, ons het die *. So nie die X dat ons gewoonlik gebruik. Afdeling, het ons die agteroorskuinsstreep. En modulo is ons laaste operateur wat ons gaan om te praat oor nou. Dit is 'n operateur wat ons toelaat om te neem die res van 'n afdeling. So as ons het 4% 2, 4 verdeel deur 2 is 2 met 'n res van 0. So 4% 2 is 0. 4% 3 is 1. 4% 5 is 4, as jy kan raai. En onthou wanneer die gebruik van al hierdie operateurs die PEMDAS reëls te gebruik. David Malan: So duidelik wees, as jy doen 4% 2, hoekom is dit 0, presies? MARIA: Omdat 4 gedeel deur 2 is 2 met 'n res van 0. So modulo gee ons dat restant as in teenstelling met die uitslag van die verdeling. David Malan: En inderdaad, wat ons hierdie nuttige vind , is dat in 'n paar probleme dit is nie noodwendig die een, as jy wil hê na het effek van die beperking van jouself om 'n reeks getalle soos 0 deur iets, jy kan gebruik om modulo rondom draai vroeër as soos die 2000000000 of die 4 miljard waarde wat Ons het gepraat oor in lesing. MARIA: Ja. En selfs in "gulsig" Ons kan. David Malan: Ja, in probleem stel een, as well. MARIA: Ja, mooi. David Malan: Goeie wenk. MARIA: Jammer. Boole expressions-- so vir Boolese operatore, ons gaan oor al praat van hierdie wat jy sien hier. So nou het ons twee gelyke tekens gelys vir gelykes. So dit is vir 'n vergelyking. Tot dusver het ons net een gesien gelyk teken. Dit is wanneer ons toewys 'n waarde na 'n veranderlike. So as ons gesien int n = 5, dan ons het opgedra 5 aan die veranderlike n. Maar as ons wil == gebruik vergelyking, kan ons as n == 5 keur. En as N == 5, dan is dit is waar. So Boolese operatore toelaat dat ons, basies, om Boolean evalueer uitdrukkings waar of vals. So nie equals-- ons die uitroepteken en gelykes. Sodat ons kan ook kyk of N nie gelyk 5-- so n! = 5. Minder as, minder as of gelyk aan, groter as, groter as of gelyk aan en dan het ons die logiese EN en die logiese OR. En diegene ons toelaat om te evalueer verskeie Boole uitdrukkings bymekaar basies saam as kom 'n hele Boole-uitdrukking. So as ons wil 'n aantal te vind, sê wat groter is as 5 maar minder as 15 op dieselfde tyd, sal ons die logiese EN operateur om te sien as n meer as 5 && n minder as 15. David Malan: En hier, Ook, dit is regtig maklik vroeg op om per ongeluk gebruik net 'n enkele ampersand of 'n enkele vertikale bar. En hopelik sal die samesteller gil op jou omdat hulle eintlik het 'n baie ander betekenis. Vir diegene nuuskierig, hulle is gebruik word vir bis bedrywighede, wat op individuele stukkies. Maar jy doen wil hê dat die paar van hulle hier. En super belangrik is dat eerste een, die gelyk teken, wat die operateur gelykheid as teenstelling met die opdrag operateur. MARIA: En die vertikale bar is geleë tussen die Delete en Return. David Malan: Ja. Op 'n tipiese Amerikaanse sleutelbord. MARIA: Yep. So laat spring regs in voorwaardelike stellings. In Scratch, jy het reeds gesien, waarskynlik, As stellings wat jou toelaat om kyk of iets waar is, dan is iets anders te doen. So jy dalk wou om te kyk of jou sprite is raak 'n ander sprite of die grens van jou skerm. En dan kan jy wil die einde van die spel of iets anders te doen. So het die sintaksis vir daardie is "as (toestand)." So as jou sprite raak iets, dan is binne-in die krullerige draadjies. Dan het ons if-else stellings. Anders kan ons iets doen indien die voorwaarde dat ons kyk vir in die begin is nie waar nie. So as die sprite raak die grens doen, anders doen iets anders. So anders doen iets anders. Dan het ons 'n kort voorbeeld vir hierdie. So as (military_time <12), het ons wil printf "Goeie môre!" Anders gaan ons printf "Goeie aand!" Basiese voorbeeld. David Malan: Goed. MARIA: Cool. So nou het ons skakelaar state. Skakel state in die algemeen kan ons toelaat om 'n baie van die dieselfde ding te doen dat ons net gepraat oor met of stellings. Byvoorbeeld, nou het ons die algemene vorm van die skakelaar verklaring wat ons toelaat om te neem 'n veranderlike genaamd N en dit vergelyk met 'n baie verskillende waardes, wat ons hier constant1, constant2 geroep het. Ons kan 'n baie meer te hê. En dié is gevalle genoem. So as ons 'n skakelaar statement-- en dit werk net vir die integers-- ons 'n veranderlike in hierdie geval dit is n. As die veranderlike N is gelyk aan constant1 ons sal 'n paar van die kode uit te voer brokkie of iets wat ons wil doen. En dan sal ons breek. So die breek beteken dat die skakelaar verklaring sal ophou uitvoering as N is gelyk aan constant1, en dan jou program sal voortgaan. Dit sal verlaat uit die skakel verklaring en dit sal voortgaan om iets anders te doen. As jy egter nie gelyk N constant1, dan geval vir constant2 sal nagegaan word. So as N gelyk constant2 dat ander brokkie kode uitgevoer sal word. En dan sal dit breek As dit is gelyk aan dit. En dan kan ons also-- nie noodwendig, though-- 'n standaard geval, wat sal gebeur as N nie gelyk enige van die gevalle wat jy gelys het. En in die standaard geval, het ons ook nie 'n break nie noodwendig omdat die skakelaar verklaring sal weet dat dit moet eindig na die verstek geval as dit die geval is. David Malan: Maar stilisties, ons sit dit altyd daar. MARIA: Ja. David Malan: Ja. So veral wanneer jy begin, veral as onder diegene wat minder gemaklik, sou ek persoonlik net raai te hou met die ifs en ifs-elses en if-else-as-elses en so meer as net want hulle is 'n bietjie meer eenvoudig. Dit is 'n mooi optimalisering, of soms selfs esteties dit maak die kode meer leesbaar. En in die feit, waarskynlik mid-semester sal ons 'n probleem te sien stel waar dit lyk net beter en makliker om te lees vir die mense deur die gebruik van 'n skakelaar verklaring. Maar moenie bekommerd wees oor vasklou aan hierdie te vroeg. MARIA: Ja. As jy het 'n baie indien state, dit mag dalk net nie baie leesbare. Dit mag dalk nie baie vinnig vir jou om te gaan deur dit. So skakel state kan baie nuttig, as well. En ook, nie remember-- nie vergeet om die breek daar sit. David Malan: Moet dit nie onthou nie. MARIA: Want dan kan jy val deur van die een na die ander geval. So kom ons sê daardie geval constant1 het 'n breek verklaring nie in nie. Dan kan ons deur val binne geval constant2. En ons wil nie te doen dat as ons het reeds geval constant1 bereik en dit is gelyk aan n. So, byvoorbeeld, as ons 'n veranderlike N dat 'n klas getal bevat, en ons wil om te sien wat dit klas is-- as n gelyk 50, ons gaan druk "CS50 is Inleiding tot Rekenaarwetenskap I. " Dan gaan ons breek. En dit is dit. As jy egter n gelyk 51, gaan ons druk "CS51 is Inleiding Rekenaarwetenskap II. " Dan weer, ons gaan om te breek. Maar, as dan sit ons 124, 61, 'n ander nommer wat jy kan dink, of program is nie gaan om te erken dat. So dit gaan om te sê, "Jammer, ek is nie vertroud is met die klas. " En dit gaan om te breek. David Malan: So jy kan regtig sien die as, anders as, anders idee hier. Dis net verskillende sintaksis vir uitdrukking van die presiese dieselfde idee. MARIA: Presies. Nou het ons ons drieledige operateurs. So drieledige operateurs het drie parts-- 'n toestand, iets om te doen as daardie toestand is waar, en dan iets te doen As daardie toestand is onwaar. So jy sien, basies, Die sintaksis van hier. Ons het die vraagteken en dan the-- wat doen ons dit noem? David Malan: Die kolon. MARIA: kolon. Dankie. Jammer. So laat ons kyk na die voorbeeld te kyk of ons gevoel van this-- kan maak class_num == 50. So hier sien ons Boole operateur == wat vergelyk die veranderlike class_num 50. So class_num winkels 'n heelgetal. En as dit heelgetal gelyk 50, dan is ons gaan om te slaan "David Malan" binne-in die string professor. As die klas nommer nie gelyk 50, "nie David Malan" gaan die professor te wees. David Malan: Dankie. En so lyk dit gelykstaande aan Wat sou jy sê, met die eerste oogopslag? MARIA: Vir my lyk dit soos if-else stellings. David Malan: Ja. En in die feit, dit is soort van 'n mooi een sak, om so te praat, vir die implementering van presies die logika van if-else maar doen alles in een stap. MARIA: Presies. Ja. So if-else stellings mag neem 'n baie van die ruimte. Hulle kan te lank wees vir iets so eenvoudig soos dit. So hierdie baie kan wees bondige en baie mooi. So nou gaan ons na op soek na iets weer en weer uitvoer, so kyk vir 'n kondisioneer verskeie kere en dan voortgaan om iets te doen terwyl dié toestand is waar. So dit bring ons mooi in terwyl loops. Aan die linkerkant, ons het ons eerste while lus. Dus, terwyl iets waar is, iets weer en weer doen. So maak seker om te sien dat ons voorwaarde hier is bekragtig aan die bokant. Terwyl met ons tweede loop-- ons noem dat 'n do-while loop-- ons iets doen, dan gaan ons vir 'n toestand. En as daardie toestand gaan voort om waar te wees, ons terug te gaan en doen die ding weer. Dus is die belangrikste verskil is waar die toestand word gekontroleer vir. En die kode mag nooit uitgevoer word indien die toestand is nie waar met die while lus. Terwyl met die do-while lus, ons het die kode wat altyd ten minste een keer uitgevoer. En dan, terwyl die toestand gaan voort om waar te wees, ons kan terug gaan en Itereer weer binne. So hoekom dink jy ons sal gebruik 'n do-while lus oor 'n rukkie loop? Reg. So as ons wil hê dat die vinnige gebruiker vir 'n paar soort van insette, as ons wil om hulle te vra om hul naam, ons wil hulle ten minste een keer vra. En as hulle ingaan daardie naam, ons is nie gaan hulle weer vra want ons weet dit reeds. Maar as hulle nie ingaan hul naam, of as hulle Tik iets wat natuurlik nie 'n naam, ons nog wil voortgaan vra hulle vir hul naam. David Malan: En in lesing moes ons een soos hierdie met die kry positiewe int Byvoorbeeld, waar daar is niks om te kyk op die eerste, omdat jy nie eens gekry 'n int. So wil ons this-- doen kry 'n int uit die user-- check dit dan, miskien, weer en weer en weer. MARIA: Presies. Vir loops-- OK. Vir loops kan ons toelaat om byna te doen presies dieselfde ding, as well. Dit is eintlik presies dieselfde ding. So daar is niks wat wat jy kan doen met loops vir dat jy nie in staat sal wees te doen het met, terwyl loops. Maar vir sirkelroetes kan 'n bietjie lyk bietjie meer ingewikkeld sintakties want hulle het drie dele in watter was voor die net toestand met terwyl loops. So het die eerste deel dat jy die see, die links mees, ons het "int dwerge = 0." So dit is waar ons inisialiseer ons veranderlike. Dan het ons 'n kommapunt en "dwerge <7." So dit is waar uit toestand eintlik is. So dit is wat ons wil hê sit net in die tyd loop-- "Terwyl dwerge <7." Hier wat gaan in die middel van ons lus. So "dwaves <7." En dan is ons laaste deel is "dwerge ++," en dit is waar ons ons veranderlike te werk. So is die belangrikste ding om te besef is dat dit gaan om te gaan deur middel van hierdie lus sewe keer en uit te voer sewe keer. So het ons sewe dwerge, en hulle is almal gaan om te sê, "Ek is hier om jou te help, Sneeuwitjie " want hulle is gereed om te help Snow White. Met terwyl loops, sou ons gedoen het die inisialisering en die opdatering nie in die toestand, weer, maar voor of binne-in die while lus om seker te maak dat we-- omdat ons altyd moet daardie dele. So om seker te maak dat ons hulle sou ons nog steeds het bygevoeg hulle op, maar net nie in die hakies. David Malan: En so lyk dit like-- in die lesing, byvoorbeeld, Ek het amper altyd, soos, i en N en redelik vervelig veranderlikes. Dit lyk asof jy meer kan gebruik slim naam veranderlikes, ook. MARIA: Ja, dit is eintlik baie mooi om 'n bietjie meer beskrywende veranderlikes gebruik want veral as iemand anders is lees jou code-- miskien het jy padskraper of as jy saam met somebody-- jy wil om seker te maak dat hulle verstaan ​​wat jy doen. OK. So dit is iets baie funky-- lus in 'n lus. Ek weet nie of ons dit gesien het nie. Waarskynlik nie. Maar ons kan eintlik this-- so lusse in plaas van loops. So nie almal wil dalk loop my deur wat gaan hier aan? David Malan: Ek sal 'n steek te neem. MARIA: Cool. David Malan: OK. So, spoiler-- ons wil die dinge te druk dit is in die onderste regterkantste hoek daar is. MARIA: Right. Ja, ja. David Malan: So Ons het nou net sit daar daardie monster uitset. So ek kan aflei uit die boonste lus dat jy iterating oor rye die buitenste lus, om so te praat. En jy iterating oor kolomme met die binneste lus. En intuïtief, hierdie hopelik sinvol want uit die aard van elke program wat ons gesien het voor, printf, wat is die funksie wat ons gebruik, uiteindelik, het die vermoë om dinge te druk uit wese lyn deur die lyn. Soos, sodra jy outputted 'n nuwe lyn, is daar geen terug te verdubbel en die druk van iets hoër in die skerm, ten minste nie die gebruik printf soos hierdie. En so in daardie verband, maak dit sin dat die buitenste lus moet verwys na die rye want vir elke gegewe ry, jy gaan om te wil druk XXXXX, en dan skuif op na die volgende ry, XXXXX. So rye kom eerste. En dan binne elke ry, het jy kolomme te druk. As jy probeer om dit te doen die teenoorgestelde, sou dit waarskynlik nie kom uit as jy van plan is. MARIA: Ja. Ons kon net nie terug te gaan na die vorige ry met printf. David Malan: En wat is interessant per vandag se gesels oor die omvang, eintlik, is dat ry is 'n int dit is verklaar in die boonste lus. Maar let dat dit nog steeds binnekant van, so te sê, die krulhakies dat onmiddellik te volg, selfs al is dit nie tegnies binne daardie krullerige draadjies. So ry is in omvang vir die geheel van die kode uit, beide binne die buitenste lus en binnekant van die binneste lus. Maar in teenstelling, waar 'n kolom in omvang? Die veranderlike kolom? Ja, maar net in die binnekant lus. En dit is OK omdat ons nie toegang tot dit buite sy krullerige draadjies. Al wat ons doen is om druk uit 'n nuwe lyn aan die einde daar. Sodat in werklikheid is OK. So dit het die effek, dit lyk, doen drie rye en vier kolomme. MARIA: Right. So eerste gaan ons deur ons eerste ry. En net in ons eerste ry, ons doen die vier kolomme in die eerste ry. Sodat ons uit te druk vier X se. En dan kan ons die uitgang van die lus, aangesien ons het reeds gedruk vier X se. En ons druk 'n nuwe lyn. En dan gaan ons deur die Dieselfde proses vir twee rye om 'n totaal van drie te maak. David Malan: En dit is die moeite werd om daarop te let dit net 'n juweel van die skrif, die feit dat die monster uitset lyk so veel langer, asof daar meer rye as kolomme. Maar dit is net omdat die X is langer as die wydte. Dit is al wat daar gebeur, plus die wit spasie tussen lyne. MARIA: Right. Koel. David Malan: Alle reg. So 'n vinnige blik op die probleem stel een neem enige vrae het, en dan verdaag? Alles reg. So in die probleem stel een, daar is drie primêre uitdagings uiteindelik. Maar eers, sal jy vind dat die probleem stel spesifikasie, soos met baie van die psets hierdie val, gaan jy loop deur 'n paar warm-up oefeninge, wys julle 'n paar hulpbronne dat jy kan of mag nie reeds gesien het. Byvoorbeeld, CS50 het 'n suite van kortbroek, wat kort video's is, nie in teenstelling met hierdie, maar dit is baie onderwerp specific-- miskien vyf minute, 10 minute in lengte op loops of op toestande of algoritmes of later meer gevorderde onderwerpe, sowel. En ons in die algemeen te sluit diegene in die probleem stelle sodat studente 'n hulpbron waarmee materiaal wat dalk hersien reeds kom in lesing of afdeling. Maar op hierdie manier is dit meer gefokus en meer by hul vingerpunte. Ons is ook geneig om in te sluit in die probleem stel dinge genoem ipv. So byna al die voorbeelde wat ek doen in lesing hier stadium, het ons ook geskiet op kamera in bevorder 'n meer stadiger, 'n meer intieme walkthrough deur my op my laptop van daardie kode, reël vir reël sodat in die klas, sal ons dikwels vlugtig deur iets of iemand sal voord met 'n antwoord op 'n vraag. Maar dit beteken nie noodwendig sink in vir almal in die gehoor. So jy sal vind kode ipv vir die meeste van die voorbeelde dat ons hier te doen in lesing sodat jy kan loop deur dit op jou eie tempo en rewind of vinnig vorentoe of slaan geheel en al, as jy wil. Daar is dikwels 'n paar warm-up vrae wat vra jou om te sorteer van hierdie materiaal te versterk en maak seker dat jy gemaklik is voordat jy voortgaan met die res van die pset. En dan, natuurlik, daar is die pset self. En een van die dinge ons is baie doelbewus doen CS50 is byna elke oninteressant of intellektueel oninteressant meganiese stap wat jy mag hê om te doen is byna altyd baie goed gedokumenteer. Oor die loop van die kwartaal, sal ons begin om meer retoriese vrae te vra soos onthou hoe om dit of dat te doen? Maar oor die algemeen, sal jy vind dat die probleem stelle jy kry deur die meganika van iets sodat die interessante, intellektuele uitdagings word uiteindelik links na jou die student. Met wat gesê het, Zamyla, aan wie ons gehou verwys vandag in lesing is een van ons jarelange personeel lid wat ook hou ipv oor spesifieke probleme soos Mario pset en gulsig, maar nie water vanjaar. En dit is in daardie ipv dat sy dikwels bied 'n paar tips en truuks vir hoe om voort te gaan, jy nooit vertel presies wat om te doen nie, maar rather-- soos 'n toestand, as jy will-- gee jou ten minste 'n paar idees sodat dit is aan jou, uiteindelik besluit hoe om dit te benader. MARIA: soort van soos 'n hoë-vlak- begrip van die logika van wat ons is jy vra om te doen. David Malan: Presies. En, in werklikheid, Zamyla se ipv bedoel om die dikwels beantwoord gevra vraag van waar ek begin het, veral wanneer Hierdie lang spesifikasies is 'n bietjie skrikwekkend gegewe al die teks en beelde wat hulle in hulle. So water.c, sal jy vind nadat jy dit voltooi het, is eintlik relatief eenvoudig. Absoluut is 'n klomp van julle gaan bang julle hoofde teen die muur probeer om uit te vind hoekom dit nie die samestelling of waarom is dit nie korrek bestuur. Maar sodra jy klaar is met dit en sodra jy het 'n paar keer worstel met enige van die foute wat jy mag hê, jy sal vind dat dit 'n baie kort program. Dit kan gedoen word in net 'n paar reëls van die kode, waarvan die meeste ons het hier in lesing nou al jy bymekaar laat kom die reg boustene. En as ons voor hier, dit gaan om te vra jy na spesifiseer hoeveel minute iemand met 'n stort op die kampus. Ons spesifiseer in die probleem stel die tempo van vloei van water in, soos, 'n lae-vloei stort kop, baie soos die Seinfeld clip ons gister gesien het of die teenoorgestelde daarvan. En dan moet jy net om te doen 'n bietjie van wiskunde, really-- rekenkundige behulp C om te vertel ons hoeveel, rofweg, bottels water is dat gelykstaande aan as ons neem van 'n N-minute stort. Nou, in mario.c, dit gaan om 'n bietjie langer program. Dit is nog steeds nie van plan om hierdie lank wees. Net 'n paar lyne langer as water.c. Maar dit gaan geleentheid na die ou skool Mario herskep piramide van Super Mario Brothers of 'n opvolg. Dit gaan nie om te kyk as mooier of so kleurvol soos wat 'n mens daar. Ons is net gaan om te min hashtags gebruik soos ons hier op die skerm gebruik van ASCII-teks. Maar dit sal dieselfde idee benader. En dit gaan 'n wees oefening wat met die eerste oogopslag lyk redelik simple-- net druk 'n eenvoudige piramide. Maar daar is 'n paar eienskappe hier wat interessant is. Let daarop dat die regterkantste rand van die piramide het eintlik breedte twee. So is daar twee gelyke hoogte kolomme, wat maak dit 'n bietjie nodig bietjie van denke te maak seker jy kry wat presies reg, soos in teenstelling met net 'n perfek skuins lyn. So dit is 'n bietjie van 'n hoek geval maar pas by die werklike spel. En dit is ook nie-duidelik op die eerste oogopslag hoe om die wit spasie druk. So as ek kyk na die monster uitset here-- en dit is ook in die spec-- dit soort lyk soos 'n reghoek, maar 'n diagonaal van die reghoek is afgekap, en dit is net wit spasies, om so te praat. En so 'n dikwels gevra vraag hier is altyd goed, hoe kan ek die hashtags beweeg oor die reg? Of hoe ek die leë spasies druk? En dit is eintlik makliker as die meeste studente dink. Reg? Jy kan dit visueel benader deur net een of twee keer slaan die space bar of drie keer. En so selfs al met printf ons byna altyd druk 'n tou of 'n int of 'n woord soos "hello, wêreld "of reeks van woorde, jy kan ook net druk quote, ruimte, unquote. En dit sal eintlik gee jy 'n wit spasie daar. So hou dit in gedagte en dit nie doen nie oordink. Jy moet regtig besluit ry deur ry deur ry, nie in teenstelling met jou byvoorbeeld 'n oomblik gelede, hoeveel van diegene kolomme moet wit ruimtes en hoeveel van hulle moet wees hashtags. Dit sal 'n bietjie van die tyd te neem, maar dit is uiteindelik 'n logika legkaart van spesies. MARIA: Ja. Maar die logika van gaan ry deur ry gaan hier baie nuttig wees. David Malan: Ja. Ek dink die voorbeeld kode wat jy selfs gave-- al was dit nie 'n volledige program. Jy moet nog steeds int en die belangrikste en leeg en include stdio.h, 'n baie van die dinge van lesing. Maar die boustene lyk om daar te wees. En dan laastens is iets 'n bietjie meer algoritmiese. So dit blyk dat enige tyd wat jy gaan in CVS of enige geriefswinkel en iemand wat jy hande by die kassier rekeninge of muntstukke as verandering, dit blyk dat hulle, die mens, ongeag of hulle dit weet of nie, is waarskynlik met wat is bekend as 'n gulsige algoritme, waardeur as jy verskuldig is, sê, $ 21 in verandering want vir een of ander rede jy iets baie goedkoop gekoop met 'n baie groot wetsontwerp op CVS, Dit sou werklik irriterende as die wees kassier het jy 21 singles of, nog erger nog, 'n hele klomp van die muntstukke. Inteendeel, wat 'n redelike persoon waarskynlik gaan om te doen, is hulle gaan om 'n $ 20 en dan 'n $ 1 wetsontwerp, en gryp hand wat jy net twee wetsontwerpe in daardie geval. MARIA: So hulle is op soek na die minimum te beperk die verandering wat hulle aan julle teruggee. David Malan: Presies. En dieselfde ooreenkoms met munte, as well. As jy verskuldig is, sê, $ 0,50 Hopelik sal jy nie wil hê 50 pennies. Jy plaas wil twee kwartale, byvoorbeeld. Nou, beteken dit aanvaar dat die kassier het genoeg dat elke denominasie hy of sy dalk wil om jou te gee. Maar ons het jou toelaat om te aanvaar soveel in die probleem. En die doel te bereik, uiteindelik, is om implementeer in C-kode 'n gulsige algoritme. Sodat die gebruiker toegelaat word om te tik in hoeveel Hy verander of sy verskuldig is met dollars en sent, 'n soort van drywende punt waarde waarskynlik. En dan moet jy die wiskunde te doen en uit te vind algoritmies, goed, Hoeveel muntstukke kan ek gee jy minimaal te gee jy presies daardie bedrag van verandering. Maar daar gaan 'n wees paar moeilike dele hier, reg? Soos daar is die hele onakkuraatheid kwessie. MARIA: Presies. So swaai punt waardes onakkuraatheid. Het ons praat oor dit in lesing vandag? David Malan: Ons het die laaste keer in lesing. Ons het gepraat oor onakkuraatheid. En jy wil nie die gebruiker kul hoeveel verandering hy of sy verskuldig is. En so het die walkthrough in die probleem stel spesifikasie, gee sommige het gedink, uiteindelik, soos om hoe jy kan versag die onakkuraatheid foute, moontlik. Dit is vermybare, seker, want die insette wat ons praat. En, in werklikheid, pennies-- Miskien sal ons uitstel om Zamyla, Ek dink, vir die truuks daar. So uiteindelik, sal jy 'n te vind vordering van probleme hierdie week, waarvan die eerste is redelik klein, dan medium, dan 'n bietjie groter. Maar almal van hulle gebruik die gebou blokke van die afgelope week, Van hierdie supersection, probleem stel spesifikasie jy sit op ontelbare bronne. Maar nog steeds, indien enigsins sukkel, veral onder diegene wat minder gemaklik met geen vorige agtergrond, kom kantoorure Maandag en Dinsdag en Woensdag en Donderdag. Gaan na CS50 Bespreek via webwerf die kursus se via wat jy kan chat met personeel en klasmaats. Maar uiteindelik, ek dink die beste raad is net begin vroeg. Dit is nie die soort van die klas wat jy moet begin psets op Woensdag nag, of nog erger Donderdag nag. MARIA: My beste raad is het begin deur Maandag. David Malan: Maandag. So as jy het nog nie begin already-- no. Maar selfs as dit nie Maandag, dan Dinsdag. Hoe vroeër, hoe beter. En dit is die rede waarom die Natuurlik het so baie laat dae is om jou 'n bietjie van 'n sielkundige druk vroeër begin, maar nog steeds laat dinge glip wanneer dinge langer neem as wat jy verwag. MARIA: En jy wil gebruik te maak kantoorure soveel as wat jy kan, ook. David Malan: Enige vrae? Alles reg. Wel, hoekom doen ons nie hier verdaag?