[Predvaja glasba] DAVID Malan: Pozdravljeni, vsi. To je CS50 je supersection. Namenski oddelkov ne bo začeti še en teden. In tako je danes, tukaj sem with-- MARIA: Maria. DAVID Malan: --to dejansko poglej na problem nastavite eno, seveda je Prve tedne materiala, dobite usmerjen z CS50 IDE, malo Linux, operacijski sistem, ki je teče na IDE, kot tudi pogled na nekatere od prehoda iz nič do C vodilnih do problema nastaviti enega. Torej, brez odlašanja, v problem določiti enega, si bo predstavil CS50 IDE, ki je to spletno programiranje okolje, ki jih uporabljamo, da bi pisati programe. To je bilo zasnovan tako, da izgleda zelo spominja na tipično računalniku Sistem teče operacijski Sistem se imenuje Linux. Ampak to je v tako imenovanem oblaku, kar pomeni, da vsi v razredu lahko dejansko ima njegovo ali njeno za svoj račun in ga uporabite, kot dobro. Torej, večina od vas verjetno nikoli ne uporablja okolju Linux pred ali morda celo okolje v ukazni vrstici. In ukazni vrstici Okolje je drugačna. To je vse tekstovne. To je vse ukaze tipkovnice. In to ni mousing, brez ikon, brez oken dialog, brez kosila. To je zgolj besedilo. Torej na prvi, je nekako od počuti kot korak nazaj v smislu izpopolnjenosti. Ampak to konča pa veliko močnejši, seveda, za računalniški znanstvenik, navsezadnje. Torej, kaj si zdaj. Tukaj sem na CS50.io, preko katerega se lahko prijavite v CS50 IDE. In podobno kot v nič, tam je tri osnovne površine na tem zaslonu. Tako na levi strani, imamo kaj se bo datoteka brskalnik. In tam je ta mapa na top, ki je sedaj prazna saj sem se znebil vseh mojih Datoteke pred supersection. In to je, če bomo shranite datoteke C, ki jih pišejo. V zgornjem desnem kotu, imamo na mestu, kjer vse naše kode se dogaja, da se napisana. In res, če sem kliknite na to plus, to se dogaja, da mi izbrati nove datoteke. In tukaj lahko začnem pisati kodo C, ali Res poljubno število drugih jezikih. In potem na dnu, kjer ga pravi jharvard @ ide50-- in tvoje bo reči nekaj malo different-- kaj je to imenuje? Terminal okno. Ja. Torej okno terminal tako imenovani ukazni vrstici vmesnik, prek katerega lahko sodelujete z operacijskega sistema. In za zdaj, gremo na da zelo malo uporabljajo this-- samo za zbiranje, da pogled na sporočila o napakah, ki jih vidimo, in za zagon naših programov. Ampak na koncu, gremo narediti toliko bolj, kot dobro. In lahko celo namestiti programsko opremo in upravlja svoj delovni prostor v CS50 IDE, kot dobro. Ampak več o tem kdaj drugič. Torej, gremo naprej in pisati zelo preprost program le iti skozi toplo-up hello.c, ki je morda najenostavnejši Program moremo pisati. Sem že odprli nov zavihek. Grem, da gredo naprej in pravijo, vsebuje standardne io.h. Potem int main (praznino). In potem printf ("Hello, world" poševnica nazaj n, blizu citiram, Zapri oklepaje in podpičjem. V redu. Torej, zdaj opazili moje okno je neimenovana. Tako da sem zelo hitro dogaja iti gor na File, Save. In to je pomembno, da Tega ne pravim "zdravo." Torej, zelo pogosta napaka, zlasti pri problemu določi eno, je, da se po nesreči samo pokliči Program "voda" ali "požrešen" ali "Mario" ali "kredit" ali podobno. Ampak si dejansko želite Preverite, ali imate pripono ker je to edini način, da prevajalnik in tudi urednik koda ve, da ste dejansko pisanje C kode. Zato mi dovolite, pojdi naprej in kliknite Shrani. In zdaj, preveč, kaj CS50 IDE je naredil za nas je, da je tudi sintaksa izpostavil vse. Torej je narejen vse zelo barvita. In celoten namen da ne deluje. To je samo, da pripravi svoje oči na konceptualno različni kosi tega programa. Torej, gremo naprej in zbrati to. In to lahko zbere v nekaj načinov. In v enem tednu se je old-school način smo naredili je bil dobesedno Na ukaza line-- "Jek hello.c." In potem sem udaril Enter. In nič ne kaže, da se zgodi v terminalskem oknu. Toda kaj naredil spremembo v IDE? Kjer je, še enkrat, IDE pomeni le Integrirano razvojno okolje. To je fancy način rekel Ta celostni razvoj okolje za razvoj programske opreme. Torej, kaj se je spremenilo v UI? Kaj ste opazili da je drugačen, Maria? MARIA: sem opazil nekaj pod IDE50 mapo tukaj. DAVID Malan: Ja. Torej tu, ne samo imamo "hello.c." Imamo tudi "a.out", ki je vrsta neumna imena za program. Ampak res, to je privzeto ime za Program ko si zbere svojo kodo in ne povej prevajalnik kakšna datoteka za izhod. Torej, če želim teči to sem morali povedati compiler-- ali bolje, moram povej delovni prostor, da sem želite zagnati program, imenovan "a.out." Enter. In tam je "zdravo, svet. "zdaj" ./ ". je dejansko pomembno. Čeprav ponavadi smo samo napisati imena ukazov, ko je program, ki ste jih napisan, vam želim reči "./" ker to izrecno pove Linux da želite zagnati program, imenovan "a.out", ki je v tem, kjer je pika pomeni ta imenik, da sem trenutno v, ki se zgodi, da bo imenovani delovni prostor, "a.out. Ker, če sem rekel "a.out," Enter, Jaz grem, da bi dobili "a.out ukaz ne Najdenih ", ker computer-- ker sem izumil "a.out;" ni prišel z computer-- ne vem, kje si za to, čeprav je prav pod nos, tako rekoč. V REDU. Torej bi lahko to spremenili, da biti "Jek -o zdravo hello.c." In če sem zadeti nastopiti, kaj program, se to dogaja, da izhod za mene? Kako je ime datoteke? Ja, v hrbtu. Tako je. "Zdravo." Tako "zdravo", se bo ime programa ker smo uporabili tako imenovani argument linije ukaz, ki je le način spreminjanja obnašanja prevajalnik za dejansko proizvodnjo posebno ime datoteke. In res, če sem povečavo ven in poglej gor, zdaj imam, ne le "a.out" in "hello.c", ampak tudi "zdravo", kot tudi. Tako da zdaj ne morem storiti "./hello," Enter. In tam je "zdravo, svet." Toda lastly-- in to Zdaj bo konvencija ki jih uporabljamo v celotnem semester, typically-- je lahko tudi samo reči "da zdravo." In res, pa je rekel, da je do do danes, saj že obstaja. Naj gredo naprej in odstranite z ukaz rm, tako "a.out" - in reči "odstrani redno datoteke a.out?" To samo pomeni, ste prepričani, da želite to izbrisati? Bom rekla ja. In potem bom odstraniti "zdravo", a ne "hello.c." Bom rekel "da" izrecno, vendar "y" je dovolj, kot tudi. In zdaj opazili, če bom tip ls-- ki je odpoklic, pomeni list-- našteva vse datotek v moji mapi. In res, če sem povečavo ven in poglej zgornjem levem kotu, potrdi, da je tisto, kar je v tej mapi, celo čeprav je to označeno kot IDE50 tukaj in ne delovni prostor, to je samo "hello.c." Torej, zdaj tukaj, če I ne ", da zdravo," Enter, zdaj vidim veliko dlje ukaz, ampak bolj sofisticirane ukaz, ki se dogaja bi bilo koristno v tednih, ki prihajajo. In zdaj ne morem reči "./hello." Tako da je lahko hitro turnejo nekatere druge Linux ukazi. Zakaj potem ne bomo naredili korak nazaj in dejansko poglej C več splošno prehodu iz nič za C, nato pa se konča z videzom na prvi problem nastavite v C. V redu. Tako da sem šel naprej in samo čisto up moj delovni prostor z Control-L samo ohraniti zaslon čist. Ampak to nima funkcionalne vplivajo drugače. Spomnimo se, da smo videli nekaj ukazov zdaj. Tako smo videli Jek, ki na splošno si ne bo treba ročno izvesti več. Bomo raje uporabljajo make. Vendar pa smo videli tudi ls, ki kaže seznam datotek v mojem imeniku. In zdaj, zakaj je there-- tam je dva Datoteke zdaj, "zdravo" in "hello.c." Zakaj je zvezda ali Zvezdica po "zdravo"? Kaj je pa to pomenilo, temelji na to, kar smo videli v teden enega? Kaj misliš? Kaj zvezda pomenilo? MARIA: For-- programa "zdravo"? DAVID Malan: "Hello *". Ja. Oh, ja? Oh, izvršljiv. Tako je. To pomeni, da "zdravo", je izvršljiva. Torej res, da je, zakaj Jaz lahko naredim "./hello." V redu. Torej, kaj še lahko storim tukaj? No, se je izkazalo, da sem lahko Prav tako ustvarite imenike. Zato mi dovolite, pojdi naprej in ustvariti, na primer, "pset1" imenik. In specifikacija problem določiti vas bo naredil točno to, tako da vam ni treba zapomniti danes. Toda "mkdir pset1" Zdi se, da nimajo nikakršnega vpliva. Ampak še enkrat, nobenega sporočila o napaki je na splošno dobra stvar. Torej, če sem tip "ls" now-- ah, zdaj Imam izvedljivo datoteko z imenom "zdravo," datoteka C imenuje "hello.c." In potem je zamujala slash, tako da rekoč, pomeni, da je to imenika. Torej res, zdaj jo želim odpreti. In jaz ne dvakrat kliknite na to, kot v GUI, grafičnem okolju. Jaz namesto reči "cd pset1." Enter. Nič zanimivega se zdi, da imajo se je zgodilo, razen moj mali poziv here-- je na ta način Linuxa opozarjali me, kje sem, kaj mapa je odprta. To je samo mi je povedal, je izrecno v nasprotju z grafično. In če sem tip "ls", zakaj ne vidim drugega takoj pozove, misliš, ko sem Vsebino pset1? MARIA: Verjetno ne imeti ničesar tam. DAVID Malan: Ja. Torej imamo očitno ne ustvaril ničesar notri ker sem ustvaril mapo. Zdaj, če sem želela ustvariti file-- za primer, sem lahko ustvarite novo datoteko. In potem sem lahko šel na Shranite in ga shranite kot, podobnega, "mario.c" če delaš standard izdaja pset enega. In potem, kot vsak Mac ali PC, samo izberite mapo "pset1, Shrani. In zdaj je datoteka prazna. Ampak kaj je povečate spet za sekundo. Naredimo ls tukaj. Zdaj vidimo, "mario.c". Tako da je še nekaj drugih ukazov, ki so vredni v obzir več time-- jasno, ali Control-L je tisto, kar sem imel bil hitting; mkdir smo videli; rm smo videli, kot tudi, kar je za odstranjevanje ali brisanju datoteke. Pazite lahko also-- in če pogledaš na spletnih vajah, boste rm -rf je zelo pogost način rekel zbrisati mapo, ki ima stvari v njem. Samo super, super previdni. -rf pomeni rekurzivno izbrisati karkoli že je skušate izbrisati in nasilno izbrisati. Torej rekurzivni sredstva, če je to mapa z mapa z mapo z mapo, izbrisati vse od njih. In prisilno pomeni sploh ne me sprašujejo, da ali ne, sem prepričan? Torej, to je super nevaren način brisanje veliko stvari hitro. Ampak beware-- prepogosto does neustrašni študent pomotoma izbrišete, recimo, pset ena, npr. MARIA: In če so le storiti -r, oni 'tekoč da jih vprašati o vsaki posamezni datoteki. DAVID Malan: Kateri je zmerno nadležno. MARIA: Ja. DAVID Malan: Torej, to je, zakaj tako mnogi od nas, self vključen, sem v navado uporabe -rf. Ampak to je nevarno. Torej kupec pazi. In potem mv je nekako zanimivo imenom. Torej, to je ukaz poteza, ki se počuti malo čudno ker lahko zares jo uporabite za premikanje datotek iz enega kraja v drugega. Recimo, da sem zamočil. Recimo, da sem ustvaril novo datoteko za pset. In sem ga shrani kot "greedy.c." Ampak, da sem po nesreči jo shranite v IDE50-- tako v mojem delovnem prostoru samem in ne v pset1. Ogledate si lahko toliko v zgornjem levem kotu. Tam je "greedy.c." In tam je nekaj rešitev. Torej ena, lahko uporabite super-uporabniku prijazen način za samo povlečete in spustite. In da bi dejansko popraviti to težavo. Ampak danes, smo poskušali pogledati bolj Skrivnosten vendar zmogljive načine to početje. Torej, kaj mi bo "ls" v pset1. In vidim samo "mario.c." Naj gredo naprej in narediti "cd ..". Torej CD spet sprememba imenika. ".." Pomeni kaj, čeprav? Nazadnje, ko sem rekel "cd pset1 "iti v pset1. Torej, ko rečem "cd ..", kaj počnem? Nazaj. Ja. Tako se dogaja, da ti starša. Pojdi eno raven navzgor, kot izhodu iz mape. Torej Enter. In res, poglej, kaj je storil. To me je namesto preselil šele v delovnem prostoru za v pset1, ki je v delovnem prostoru. In zdaj, če sem tip "ls", tam je cel kup stvari. Tam je "greedy.c". Torej, zdaj mi uporabite mv dobesedno premakniti "greedy.c" v pset1. In tako veliko Linux ukazov deluje natanko tako kot je ta. Vzamejo nobenih argumentov ali vzamejo eno argument ali jih bodo vzeli dve ukazno vrstico argumenti in tako naprej. In v tem primeru je to dobesedno to, kar pravi, čeprav succinctly-- premakniti greedy.c v pset1. Enter. Nič ne kaže, da se zgodi. Ampak, če sem spet naredil ls, požrešen je izginil. In če naredim "cd pset1", Enter in nato Je spet, zdaj pa je na pravem mestu. Kot prahi, če za nekateri reason-- posebej če imate s prekinitvami omrežno povezljivost ali si hodil okrog campus s svojim prenosnim pokrovom zaprt, nato pa ga odprli znova in vaš delovni prostor Zdi se, nekoliko iz ravnotežja, ni big deal. Samo osvežite brskalnik okno, in bi morala RESYNC tako da je leva datoteka brskalnik videti natanko kot terminalskem oknu. Ne skrbite. Če ste v dvomih, osvežite stran, tako da Dokler ste jih shranili datoteke že. V REDU. Torej mv se lahko uporablja tudi za preimenovanje datotek. In dajmo si oglejte ta zadnji ukaz tukaj. Torej suppose-- in to je super pogosta, preveč, že na začetku. Nekateri učenci občasno ustvarite datoteko imenuje, kaj je say-- kaj je še ena? Like "WATER.C." Torej bom kričati, za Nobenega razloga ni, v vseh kape. Vendar to ni Pravilno ime za datoteko če samo zato, ker naš problem določiti Specifikacija ni povedal da shranite datoteko kot vsi pokrovčki "WATER.C." Namesto tega pričakujemo "water.c" z malimi črkami. In, v bistvu je to problematično, saj check50, program, boste da se sestane na problem nastavite enega, ki se samodejno testira pravilnost kode se bo kričal na vas, če se ne more našli "water.c" v vse male. Tako da moram popraviti to. Toliko različnih načinov za to naredili, od katerih je prvi bi bilo Control-klik ali desni klik ime datoteke in samo spremenite Preimenuj. Popolnoma v redu, da to storim. Ampak še enkrat, danes, dajmo naredi malo Ljubitelj. Oglejmo uporabite mv spremeniti "WATER.C" v "water.c." Torej, lahko uporabite tudi prvi argument da jo preimenujete v drugem argumentu če je drugi argument ni, v Dejstvo, mapo ali ime imenika. V redu. In nenazadnje, malo trick-- tako da sem v moj delovni prostor imenik v tem trenutku. Če hočem priti v pset eno, Ne morem zagotovo tip "cd pset1." Ampak to je tako dolgočasno, da tip "pset1" ali daljša imena datotek ali imena imenik Še vedno. Torej, zelo pogosto v Linuxu, kar ki jo lahko naredimo je začeti tipkati "PSE" in samo dolgčas, hit Tab, in pustite, računalnik podatek je za vas. Super koristno, da se v to navado. Edini catch je, če imate več datotek ali map začnejo s črko "p" ali "ps", boste morda morali vnesti nekaj več, preden Računalnik ne ve, kaj storiti. MARIA: Radi bližnjice. DAVID Malan: Ta volja vam lahko prihrani veliko časa. In prav tako, kot smo rekli v predavanju, si lahko pomikate navzgor v zgodovini, gor in dol, najti pred kratkim izvršen ukazi, kot tudi. V redu. Torej, zdaj, dajmo obrniti našo pozornost nazaj na preprost program, zdravo svet. Torej smo to pripravljeni natančno. In zdaj, zakaj ne vzamemo pogled na podatkovnih tipov in nato prehod iz nekaterih ustreza hitrih blokov C. MARIA: Awesome. Torej sedaj, da ste začeli pisanje programov v C, bomo začeli govoriti o podatkovnih tipov in spremenljivk. Torej nekatere vrste podatkov, ki jih bi želeli vedeti, že sedaj so tisti, ki so poudarjeno v modri barvi. Torej imamo int prvi, ki stoji za celo število. In da ima cela, saj vas morda guessed-- tako 1, 2, 3, in vse druge cela ki si jih lahko zamislite. DAVID Malan: In prav tako negativna. MARIA: In prav tako negativni, ja. In 0. Potem imamo boje, ki so s plavajočo vejico. Torej, to je vse realne številke da imajo pikami. Torej 5,0, 5,2, in še bolj številke za decimalno vejico, kot tudi, in tudi negativne. Potem imamo znak, ki je znak. Zato mislim, da smo se pogovarjali o to v predavanju danes. Vendar imamo pisma, za example-- A, B, C-, ki se lahko shrani kot char. Ampak potem imamo veliko več simbolov ki jih je mogoče shraniti kot char. In so tisti, ki so shranjeni kot ASCII. In potem imamo bool, ki so Booleans. In tisti, oceniti na True ali False ali 1 in 0, v tem zaporedju. DAVID Malan: in opozarjajo, da bool prihaja iz knjižnice CS50. Torej to ni vgrajen v C, vendar je super uporabno da imajo pojma true in false. In čeprav vas Morda think-- zabavno dejstvo. Bool tehnično potrebuje, koliko bitov, resnično, da predstavljajo True primerjavi False? Koliko bitov misliš bi potrebovali, maksimalno? Ja, samo eden. Tako se izkaže, da je C vam ne more dati samo en bit. Najmanjše merska enota lahko dobite, je osem. Torej, to je malo potratno, da ste uporabo celotnega bajt, ali osem bitov, za zastopanje True ali False. Ampak to je samo način, da je izvajajo v C, ki jih knjižnici CS50. MARIA: In potem tisti, ki sva Ne bom govorila o tem, kot je obširno Pravica now-- dvojna, da je za večje plovci. Dolga dolge in kratke tudi cela števila. DAVID Malan: Zares. V hekerski izdaji pset enega, smo dejansko uporabili dolgo dolgo. Ampak za standardni izdaji, to ni potrebno. MARIA: Cool. V REDU. Torej operators-- morate biti verjetno seznanjeni z večino od njih. Poleg tega +; odštevanje, -. Razmnoževanju, imamo *. Torej ne X, ki se običajno uporabljajo. Division, imamo poševnico. In modulo je naš zadnji izvajalec, ki bomo govorili o sedaj. To je gospodarski subjekt, ki nam omogoča, da prevzeti preostanek delitve. Torej, če imamo 4% 2, 4, deljeno z 2 je 2 s preostanek 0. Torej 4% 2 0. 4% 3 je 1. 4% 5 je 4, kot bi si mislil. In ne pozabite, ob uporabi vseh teh upravljavcem, da uporabljajo pravila PEMDAS. DAVID Malan: Torej, da bo jasno, če vas narediti 4% 2, zakaj je to 0, točno? MARIA: Ker 4, deljeno s 2 je 2 z preostanek 0. Torej nam modulo daje ta ostanek kot nasprotuje zaradi delitve. DAVID Malan: In res, kaj bomo našli to koristno za to, da v nekaterih problemov da ni nujno ena, če želite imeti Učinek omejevanja sami v območju od števil všeč 0 do nečesa, lahko uporabite modulo zaviti okoli prej kakor kot 2 milijardi ali 4 milijarde vrednost, ki smo govorili v predavanju. MARIA: Ja. In celo v "požrešen", smo lahko. DAVID Malan: Da, v Problem nastavitev ene, kot tudi. MARIA: Ja, lepo. DAVID Malan: Dober namig. MARIA: Žal mi je. Boolean expressions-- tako za Boolovih operatorjev, bomo govorili o vsem od teh, ki jih vidite tukaj. Torej, zdaj imamo dva enačaj naveden za enakimi. Torej tistih, ki so za primerjavo. Do sedaj smo videli le en enačaj. To je, ko smo dodeliti vrednost spremenljivke. Torej, če smo videli int n = 5, potem smo dodeljena 5 spremenljivki n. Toda, če želimo uporabiti == za Primerjava, lahko preverite, če je n == 5. In če je n == 5, nato pa, da je res. Torej Boolove operaterji nam omogočajo, v bistvu, oceniti Boolean izrazi na True ali False. Torej ni equals-- imamo Klicaj in je enak. Tako smo lahko, če n preverite tudi ni enako 5-- tako n! = 5. Manj kot, manjši ali enak, večja kot, večja ali enaka in potem imamo logičen IN in logična ALI. In tisti, nam omogočajo, da ocenijo več Logični izrazi skupaj v bistvu pridejo skupaj kot ena celota Logični izraz. Torej, če želimo, da bi našli številko, pravijo, ki je večja od 5, vendar manj kot 15 hkrati pa bi jih uporabljamo logični IN operator da vidim, če je n večja od 5 && n manj kot 15. DAVID Malan: In tukaj, Tudi to je res enostavno zgodaj, da po nesreči uporabite samo en 'znak ali njena samostojna navpična bar. In upajmo, da bo prevajalnik kričati na vas, ker so dejansko imajo zelo drugačen pomen. Za tiste, radoveden, oni uporablja za bitni operacije, ki delujejo na posameznih bitih. Vendar vam želim par njih tukaj. In super pomembno je, da Prvi, enačaj, ki je upravljavec enakost kot za razliko od operaterja odstop. MARIA: In navpična vrstica ki se nahaja med Delete in vračanju. DAVID Malan: Da. Na tipično ameriško tipkovnico. MARIA: Yep. Torej, kaj je skok v desno v pogojni stavki. V Scratch, ste že videli, je verjetno, Če izjave, ki vam omogočajo, da preverite, če je kaj res, potem storiti kaj drugega. Torej, ste morda želeli da preverite, če vaš sprite je dotika kakšno drugo sprite ali rob zaslona. In potem boste morda želeli končate igro ali pa kaj drugega. Torej skladnji za da je "if (pogoj)." Torej, če je vaš sprite dotika nekaj, potem pa je znotraj zavitih oklepajev. Potem bomo imeli, če-ostalo izjav. Else nam omogoča, da naredite nekaj če je izpolnjen pogoj, da bomo preverite v začetku ni res. Torej, če je sprite dotika mejni to storite, še nekaj drugega. Torej drugače narediti nekaj drugega. Potem imamo kratek zgled za to. Torej, če (military_time <12), smo želite printf "Dobro jutro!" Else bomo printf "Dober večer!" Osnovni primer. DAVID Malan: Dobro. MARIA: Cool. Torej, zdaj imamo izjave stikal. Preklopite izjave Na splošno je mogoče Dovolite nam, da narediti veliko isto stvar da smo pravkar govorili o, če izkazih. Na primer, zdaj imamo splošna oblika izkaza stikala ki nam omogoča, da sprejmejo spremenljivka imenovan n in ga primerjajte z veliko različne vrednosti, ki je tu so pozvali constant1, constant2. Morda imamo veliko več. In tisti, ki se imenuje primere. Torej, če imamo stikalo statement-- in to deluje Samo za integers-- imamo spremenljivka v tem primeru, ki je n. Če je spremenljivka n enako constant1 smo bo izvršiti nekaj del kode ali nekaj, kar želimo narediti. In potem bi prekinil. Torej odmor pomeni, da izjava stikalo bodo prenehali izvršitve, če n je enak constant1, in potem bo vaš program nadaljuje. To bo izhod iz nje stikalo izjavo in jo bom še nekaj drugega. Če pa nni enako constant1, potem velja za constant2 se bo preverjala. Torej, če je n enak constant2, da druga odrezek kode bo usmrčen. In potem bomo odmor če je enaka njo. In potem bomo lahko imeli also-- ne nujno, though-- privzeto primera, kar se zgodi, če n ni enak katerega koli od primerov, ki ste jih naštetih. In v privzetem primeru smo tudi Ne potrebujem odmor nujno ker izjava stikalo bo vedel da mora končati po privzeto primeru, če je temu tako. DAVID Malan: Ampak slogovno, smo ga vedno dal noter. MARIA: Ja. DAVID Malan: Ja. Torej, še posebej, ko se začenjajo, še posebej, če med tistimi manj udobna, bi jaz osebno Samo Priporočamo držijo z investicijskim skladom in IFS elses in če-ostalo-če-elses in tako naprej, če le ker oni so malo bolj enostavno. To je lepo optimizacija, ali včasih celo estetsko jo naredi kodo bolj berljivo. In dejansko verjetno mid-semester bomo videli problem določi, kjer je samo izgleda bolje in lažje branje za ljudi z uporabo switch stavka. Ampak ne skrbite oklepa to prezgodaj. MARIA: Ja. Če imate veliko, če izjav, da le ne bi bilo zelo berljiva. To morda ne bo zelo hitro da greš skozi to. Torej preklop izjave lahko zelo koristne, kot tudi. In tudi, ne remember-- ne pozabite postaviti premorov tam. DAVID Malan: Ne spomnim tega. MARIA: Ker potem boste morda padec skozi od primera do drugega. Torej, recimo, to sodno constant1 ni imel izjavo odmor v njem. Potem bi mi padli skozi znotraj primera constant2. In ne želimo storiti, da če smo že dosegli sodno constant1 in je enako n. Tako, na primer, če imamo spremenljivko n, ki vsebuje številko razreda, in želimo, da bi videli, kaj da Razred is-- če je n enak 50, bomo print "CS50 je Uvod v računalništvo in informatiko I. " Potem bomo prekinil. In to je to. Če pa je n enak do 51, bomo za tiskanje "CS51 je Uvod Computer Science II. " Potem pa, še enkrat, bomo prekinil. Če pa potem damo 124, 61, kateremkoli druga številka, ki jo lahko zamislite, ali program ne bo priznati, da. Tako se dogaja, da rečemo: "Žal mi je, da sem ne poznajo tega razreda. " In to se dogaja, da bi prekinil. DAVID Malan: Torej lahko res videli if, else if, drugega idejo tukaj. To je samo drugačna sintaksa za izražanje natančno isto idejo. MARIA: Točno tako. Zdaj imamo ternarnih operaterjev. Torej ternarno operaterji tri parts-- pogoj, kaj storiti, če da je pogoj izpolnjen, in potem je nekaj storiti če ta pogoj je napačen. Torej vidite, v bistvu, skladnja, da je tu. Imamo vprašaj, in potem the-- kaj pravimo to? DAVID Malan: debelo črevo. MARIA: Colon. Hvala. Žal mi je. Zato si oglejmo našem primeru do vidim, če bomo lahko osmisliti this-- class_num == 50. Torej, tukaj vidimo našo logični operator == da primerja spremenljivo class_num 50. Torej class_num trgovin celo število. In če te celo enak 50, potem smo dogaja, da shranite "David Malan" znotraj niza profesor. Če razred številka ne enak 50, "ni David Malan" se bo profesor. DAVID Malan: Hvala. In tako se zdi to enakovredno Kaj bi rekli na prvi pogled? MARIA: To se mi zdi kot če-ostalo izjave. DAVID Malan: Ja. In v bistvu je to nekako o lepi eno podlogo, tako rekoč, za izvajanje natanko logika če-ostalo ampak delaš vse v enem koraku. MARIA: Točno tako. Ja. Torej, če-else stavki morda zavzamejo veliko prostora. So morda predolgo za nekaj tako enostavno, kot to. Torej je to lahko zelo jedrnat in zelo lepo. Torej, zdaj gremo v gledaš znova in znova izvršitve nekaj, tako Preverjanje pogojeval večkrat in nato nadaljuje, da narediš nekaj medtem ko je pogoj izpolnjen. Torej, to nas pripelje lepo v while zanke. Na levi imamo naša prva while zanko. Torej, medtem ko je nekaj res, nekaj narediti znova in znova. Zato poskrbite, da opazite, da je naš pogoj tukaj je potrjena na vrhu. Ker je z našim drugim loop-- mu pravimo da do-medtem loop-- naredimo nekaj, potem smo preveriti pogoj. In če tega pogoja še vedno velja, gremo nazaj in še enkrat stvar. Tako je glavna razlika je, če pogoj je preveriti. In koda nikoli ne sme biti izvrši, če je pogoj ne Res z while zanko. Ker je z do-časa zanka, imamo kodo da se vedno izvajajo vsaj enkrat. In potem ko je pogoj še vedno velja, gremo lahko nazaj in spet Ponovil notranjosti. Torej, zakaj misliš, da bi uporabili do-while zanko čez while? Prav. Torej, če želimo morala spodbuditi Uporabnik za neke vrste vhodu, če želimo od njih zahteva, vnesti svoje ime, želimo, da bi jih enkrat vsaj vprašati. In če ne vstopijo to ime, nismo dogaja, da jih ponovno vprašati ker smo že vedeli. Ampak, če ne vnesete njihovo ime, ali če so vnesti nekaj, kar je seveda ni ime, smo še vedno želijo nadaljevati jih prosi za njihovo ime. DAVID Malan: In v predavanju smo imeli eno kot je ta z dobili pozitivno int Primer, kjer ni nič preverite na prvi, ker imate sploh ne gotten int. Tako smo želeli narediti this-- dobili int od user-- Nato preverite, morda, znova in znova in znova. MARIA: Točno tako. Za loops-- OK. Za lahko zanke nam omogočajo, da storiti skoraj točno isto stvar, kot dobro. To je pravzaprav točno isto stvar. Torej ni nič, da lahko storite z za zanke ki jih ne bi mogli storiti z while zanke. Ampak za zanke lahko zdi malo malo več skladenjsko zapleten ker imajo trije deli v notranjosti, kar je bil pred samo stanje z while zanke. Torej je prvi del, ki jih morje, levo-najbolj, imamo "int škratje = 0." Torej, to je, če smo inicializacijo našo spremenljivko. Potem imamo podpičje in "škratje <7." Torej, to je, če iz pogoj dejansko je. Tako, da je tisto, kar bi morali dal le v nekaj časa loop-- "medtem ko škratje <7." Tukaj, da gre v Sredi našega zanko. Torej "dwaves <7." In potem je naš zadnji del je "Škrati ++" ki je, če smo posodobili našo spremenljivko. Torej je pomembna stvar zavedaš, da je to se dogaja, da gredo skozi to zanko sedemkrat in izvršiti sedemkrat. Torej imamo sedem Škrati, in oni so vsi reči: "Jaz sem tukaj da vam pomaga, Snow White " ker so pripravljeni pomagati Sneguljčico. Z while zanke, bi smo naredili inicializacija in posodabljanje ne znotraj stanju, še enkrat, vendar bodisi pred ali znotraj while se prepričajte, da we-- ker smo vedno potrebujemo te dele. Torej, se prepričajte, da imamo jih, bi imel še vedno jih je dodal no, samo ne v oklepaju. DAVID Malan: In tako izgleda like-- v predavanje, na primer, Sem skoraj vedno uporabite, kot so, i in n in precej dolgočasno spremenljivke. Izgleda, da jih lahko uporabite več spretno imenom spremenljivke, preveč. MARIA: Ja, to je pravzaprav zelo lepo uporabiti malo bolj opisne spremenljivke ker še posebej, če nekdo drug branju vašega code-- morda ste greder ali če ste sodelovanje z somebody-- želite prepričati, da razumeti, kaj počnete. V REDU. Torej je to nekaj zelo funky-- za zanko znotraj za zanko. Ne vem, če smo videli že prej. Verjetno ne. Vendar smo lahko dejansko this-- tako zank namesto zank. Torej, ali kdo želi morda sprehod me skozi kaj se tukaj dogaja? DAVID Malan: bom zabodel. MARIA: Cool. DAVID Malan: OK. Torej, spoiler-- želimo natisniti stvari da je v kotu spodnjem desnem tam. MARIA: Right. Ja, ja. DAVID Malan: Torej smo pravkar dal, da je izhod vzorec tam. Torej lahko sklepamo iz vrhunska zanka, da ste ponavljanjem več vrsticah oddaljenih zanke, tako rekoč. In ste ponavljanjem več kolone z najgloblje zanke. In intuitivno, to upajmo smiselna ker po naravi vsak program, ki smo jih videli Prej, printf, ki je Funkcija smo s pomočjo, na koncu, ima možnost tiskanja stvari ven v bistvu po vrsticah. Kot, ko ste na izhodu nova linija, tam je ni podvojitev nazaj in kaj tiskanje višje na zaslonu, vsaj ne uporabljate printf, kot je ta. In tako v tem pogledu, da naredi Občutek, da je najbolj zunanja zanka Treba je sklicujoč se na vrstic ker je za vsako dati vrstica, boste želeli izpisal xxxxx, in nato premaknete na naslednjo vrstico, xxxxx. Torej vrstice pridejo prvi. In potem v vsak vrstica, tiskate stolpce. Če si se potrudil, da ga je naredil nasprotno, bi to verjetno ne pridi ven, kot jih nameravate. MARIA: Ja. Mi samo ne more iti nazaj prejšnja vrstica z printf. DAVID Malan: In kaj je zanimivo na današnjem klepetu o obsegu, dejansko je, da je vrstica int ki je izjavil v vrhunski zanko. Ampak obvestilo, da je še vedno notranjosti, tako rekoč so zaviti oklepaji, ki takoj sledi, čeprav to ni tehnično v teh zavitimi oklepaji. Torej vrstica je v okviru za celota odrezek kode, tako znotraj zunanjega za zanko in notranjost notranje zanke. Ampak nasprotno, kadar je stolpec v obsegu? Spremenljivka stolpec? Ja, samo v notranjosti zanke. In to je v redu, ker nimamo dostopa do je izven njenih zavitimi oklepaji. Vse mi je izpisal novo črta na samem koncu tam. Tako, da v bistvu v redu. Torej, to ima učinek, izgleda, početje tri vrstice in štiri stolpce. MARIA: Right. Torej, najprej gremo skozi naš prvi vrsti. In ravno v našem prvi vrsti, delamo štirje stolpci znotraj prve vrste. Tako smo izpisal štiri Xe. In potem bomo lahko izhod iz zanke, saj smo že natisnjene štiri Xe. In smo natisniti novo linijo. In potem gremo skozi Isti postopek za dve več vrstic da bi skupaj tri. DAVID Malan: In to je treba omeniti, da je samo artefakt pisave, dejstvo, da izhod vzorca zdi toliko višji, kot da to še ni vrstic kot stolpcev. Ampak to je samo zato, ker je X je višja, kot je široka. To je vse, kar je tam dogaja, plus bel prostor med vrsticami. MARIA: Right. Cool. DAVID Malan: V redu. Torej, hiter pogled na problem določiti enega, sprejme kakršna koli vprašanja, nato pa prekine? V redu. Torej, problem en niz, tam je tri poglavitni izzivi, na koncu. Najprej pa boste našli da je problem določiti specifikacije, tako kot mnoge psets to jesen, se dogaja, da sprehod skozi nekaj vaj toplo-up, opozoriti vas ven nekaj sredstev da vam lahko zahteva ali ne bi že videli. Na primer, CS50 ima zbirko kratke hlače, ki so kratke video posnetke, ni v nasprotju to, vendar so Zelo temo specific-- morda pet minut, 10 minut v dolžino na zank ali o pogojih ali o algoritmih ali kasneje več napredne teme, kot tudi. In smo na splošno vgradili tiste v problem sklopov, tako da študenti imajo vir s katero pregledati gradivo, ki bi ga lahko imela že prišli v predavanju ali oddelku. Ampak na ta način, da je bolj osredotočen in bolj na dosegu roke. Mi ponavadi tudi vlagati v problemu postavlja stvari imenovanih walkthroughs. Torej skoraj vse primere delam V predavanju, na odru tukaj, smo tudi so posnet na kamero v napreduje bolj počasneje, bolj intimno walkthrough mene na moj laptop navedenega zakonika, po vrsticah tako da v razredu, bomo pogosto posneto skozi nekaj ali nekoga bo interject z odgovoriti na vprašanje. Vendar ne nujno potopi v za vse v občinstvu. Tako boste našli kodo walkthroughs Za večino primerov da delamo tukaj v predavanju, tako da boste lahko sprehodite skozi njo v svojem tempu in previti nazaj ali naprej ali preskočite skupaj, če želite. Tam je pogosto nekaj toplo-up vprašanja, vas prosim, da nekako okrepiti ta material in se prepričajte, da ste udobno pred boste nadaljevali s preostalim pset. In potem seveda tam je pset sama. In ena od stvari, smo zelo namerno storiti v CS50 je skoraj vsak nezanimivo ali intelektualno nezanimiva mehanska korak, ki boste morda morali narediti je skoraj vedno zelo dobro dokumentirano. Tekom izraza, bomo začetek vprašati bolj retorična vprašanja kot se spomnite, kako to ali ono? Ampak na splošno, boste našli da vas je problem kompleti dobili prek mehanike nečesa tako da zanimive, intelektualnimi izzivi se na koncu prepuščena vam študenta. S tem je dejal, Zamyla, za katere smo hranijo danes sklicuje na predavanju je eden od naših dolgoletni osebja Član, ki ima tudi walkthroughs o posebnih problemih pset, kot so Mario in pohlepni, čeprav ni voda letos. In to je v tistih, walkthroughs, da je pogosto ponuja nekaj nasvetov in trikov za kako nadaljevati, nikoli ne pove, točno, kaj storiti, vendar rather-- kot pogoj, če will-- vam daje vsaj Nekaj ​​idej, tako da je do vas, v končni fazi, da se odločijo, kako se jim približati. MARIA: Nekako všeč visoki ravni razumevanje logike, kaj vas prosi, da storiti. DAVID Malan: Točno tako. In v bistvu Zamyla je walkthroughs so namenjeni odgovoriti na pogosto vprašal vprašanje, kje naredil sem začel, še posebej, če te dolge specifikacije so malo zastrašujoče, saj vso besedilo in podobe, ki jih imajo v njih. Torej water.c, boste našli po tem, ko ste ga zaključili, je pravzaprav dokaj preprosta. Absolutno so kup od vas bo bang tvoje glave proti steni poskuša da ugotovimo, zakaj to ni sestavljanje ali zakaj to ne deluje pravilno. Ampak, ko ste končali z njo in ko ste Nekaj ​​časa se spopadam s katerim koli hroščev, ki jih lahko imajo, boste ugotovili, da je zelo kratek program. To je mogoče storiti v samo nekaj vrstic kode, ki so večinoma smo tukaj videli v predavanju že, če si sestavite prave gradnike. In kot vam predlagamo, tukaj pa se dogaja, da se posvetujte da določite, koliko minut nekdo se tušira na kampusu. Mi določite v problemu nastavitev hitrosti toka vode v, kot, prho z nizkim pretokom glava, podobno kot Seinfeld posnetek smo videli včeraj, ali njegov nasproti. In potem boste morali narediti malo matematike, really-- aritmetično uporabo C povedati nam, koliko, približno, steklenice vode je, da je enakovreden, če smo ob n-minutni prha. Zdaj, v mario.c, to se dogaja biti nekoliko daljši programa. To še vedno ne bo tako dolgo. Le nekaj vrstic, daljše od water.c. Ampak to se dogaja, da je priložnost poustvariti starodobnim Mario piramida iz Super Mario Brata ali nekaj nadaljevalnih. To se ne bo videti, kot lepša ali kot barvita, kot da je eden tam. Mi smo le, da bo za uporabo malo oznake tem kot jih imamo tukaj na zaslonu uporabi besedilo ASCII. Vendar pa bo približno isto idejo. In to se dogaja, da je uveljavljajo, da je na prvi pogled Zdi se precej simple-- samo tiskanje preprosto piramido. Ampak tam je nekaj značilnosti tukaj, ki so zanimive. Obvestilo, da je skrajni desni rob piramida dejansko ima širino dveh. Torej je dva enaka višina kolone, ki naredi to zahtevajo malo malo misli, da bi da boste dobili, da je ravno prav, kot nasprotju s samo popolnoma nagnjen linijo. Tako da je malo primeru kota vendar se ujema z dejansko igro. In to je tudi non-očitno na prvi pogled kako natisniti bel prostor. Torej, ko sem pogled na Vzorec izhod here-- in to je tudi v spec-- je nekako izgleda kot pravokotnik, toda diagonali Pravokotnik je odsekal, in to je samo belih lis, tako rekoč. In tako pogosto zastavljena Vprašanje tu je vedno dobro, kako premakniti oznake tem kot da je pravica? Ali kako natisniti presledkov? In to je pravzaprav lažje kot večina študentov misliš. Prav? Lahko ga približati vizualno, samo hitting preslednico enkrat ali dvakrat ali trikrat. In tako, čeprav z printf smo skoraj vedno izpisal niz ali int ali beseda kot "zdravo, svet "ali niz besed, lahko pa tudi samo tiskanje quote, prostor, konec citata. In da bo dejansko dal si bel prostor tam. Tako da se vodijo v mislih in ne overthink to. Res je, da odloči, vrsto za vrsto, ki zapored ni v nasprotju z vašo primer pred trenutkom, koliko od tistih, stolpci morajo biti belih lis in koliko jih mora biti oznake tem. To bo trajalo nekaj časa, vendar je navsezadnje logika puzzle z menoj. MARIA: Ja. Toda logika dogaja vrsto za vrsto se bo zelo koristno tukaj. DAVID Malan: Ja. Mislim, da je koda vzorec ste gave-- celo čeprav to ni bil celoten program. Morate še vedno int in glavna in neveljavne in #include stdio.h, Veliko stvari iz predavanja. Toda gradniki Zdi se, da obstaja. In potem na koncu je nekaj malo več algoritmično. Tako se izkaže, da kadarkoli boste gredo v CVS ali katero koli priročno skladišče in nekdo ti kazalci v Blagajniški zapisi ali kovanci so spremembe, se izkaže, da so se ljudje, ali ne veste ali ne, Verjetno uporabljate, kaj je imenuje požrešen algoritem, pri čemer če ste dolguje, recimo, 21 $ V spremembah, ker iz neznanega razloga ste kupili nekaj zelo poceni z zelo velikim račun na CVS da bi bilo zelo nadležno če Blagajnik ti je dal 21 singlov, ali slabše še cel kup kovancev. Namesto, kaj je razumna oseba verjetno bo storiti, je, da si bo da zgrabite 20- $ in nato $ 1-račun, in izročil le dva račune v tem primeru. MARIA: Torej, oni želijo, da se zmanjša sprememba, ki dajejo nazaj k tebi. DAVID Malan: Točno tako. In isto se ukvarjajo s kovanci, kot dobro. Če ste dolguje, pravijo, $ 0.50, upajmo, da ne želite, da 50 penijev. Ste namesto želeli dva četrtine, na primer. Zdaj, to ne prevzemajo da ima blagajna Dovolj vsakega imena, ki on ali ona morda želeli, da vam. Ampak mi vam omogočajo, da prevzame toliko v problemu. In cilj, v končni fazi, je izvajati v C kodo požrešen algoritem. Torej je uporabnik dovoljeno da tip v koliko spremenite on ali ona dolguje s dolarjev in centov, nekakšen plavajočo vejico vrednost verjetno. In potem, kar morate storiti matematike in ugotovimo algorithmically, dobro, koliko kovancev lahko dam ste minimalno, da bi vam točno ta znesek sprememb. Ampak tam se dogaja, da je Nekaj ​​trikov deli tukaj, kajne? Kot da je celotno Vprašanje nenatančnost. MARIA: Točno tako. Torej s plavajočo vejico Vrednosti imajo nenatančnosti. Ali govorimo o tem v predavanju danes? DAVID Malan: Nismo zadnji čas v predavanju. Pogovarjali smo se o netočnosti. In ne želite, da se goljufija uporabnika koliko sprememb je on ali ona dolguje. In tako walkthrough, v problem določiti specifikacije, dati nekaj misli, na koncu, kot da kako lahko ublaži tiste nenatančnost napake, potencialno. To je mogoče izogniti, gotovo, za vhodi smo govoriš. In v bistvu pennies-- Mogoče bomo odloži do Zamyla, Mislim, da za trikov tam. Torej v končni fazi, boste našli napredovanje težav ta teden, od katerih je prvi je zelo majhna, nato medij, potem malo večji. Vendar pa so vsi uporabljajo stavbe bloki tega zadnjem tednu od tega supersection, problem nastaviti specifikacija vas postavi na neštetih virov. Ampak še vedno, če sploh borijo, zlasti med tistimi manj udoben brez predhodnega ozadju, prišli do uradnih ur v ponedeljek in torek in Sredo in četrtek. Pojdi na CS50 Pogovorite se s pomočjo Spletna stran predmeta je, preko katerega lahko klepetate z osebjem in sošolci. Ampak na koncu, mislim, da je Najboljši nasvet, ki je pravkar začel zgodaj. To ni vrsta razreda, ki vas je treba z začetkom psets v sredo noč, ali še huje v četrtek zvečer. MARIA: Moj najboljši nasvet je, da so se začeli do ponedeljka. DAVID Malan: ponedeljek. Torej, če še niste začeli already-- št. Toda tudi če ne ponedeljek, potem torek. Prej, tem bolje. In to je razlog, Seveda ima toliko pozno dnevi da vam malo psihološki pritisk začeti prej, vendar še vedno pustil Stvari zdrs, ko se stvari trajalo dlje kot ste pričakovali. MARIA: In želite izkoristiti Uradne ure toliko, kot si lahko, preveč. DAVID Malan: Kakšna vprašanja? V redu. No, zakaj ne prekine tukaj?