[Glazbom] DAVID Malan: Pozdrav svima. Ovo je CS50 je supersection. Dodijeljeni Sekcije neće start za drugi tjedan. I tako danas, ovdje sam with-- MARIJA: Maria. DAVID Malan: --to je zapravo pogledajte problema jedan set, tečaj-a Prvih tjedana materijala, dobili ste orijentirani s CS50 IDE, malo Linux, operativni sustav koji je prikazuju na IDE, i pogledajte neke od tranzicije od nule C vodećih do problema postaviti jednu. Dakle, bez dodatnih teškoća, u problemu postaviti jedan, ti si idući u biti uveo u CS50 IDE, koji ovo web-based programiranje okruženje koje koristimo kako bi pisati programe. To je osmišljen kako izgledaju vrlo podsjeća na tipične računala Sustav trčanje operativni Sustav se zove Linux. Ali to je u tzv oblaka, što znači da svi u razredu zapravo može imati njegov ili njezin vlastiti račun i koristiti ga kao dobro. Dakle, većina vas vjerojatno nikada imati koristi Linux okruženju prije ili možda čak i komandne linije okoliš. I naredbenog retka okolina je drugačija. To je sve tekstualne. To je sve tipkovnice naredbe. I to nije mousing, nema ikone, bez prozora dijalog, nema izbornika. To je čisto tekst. Dakle, na prvi, je vrsta osjeća poput koraka unatrag u smislu sofisticiranost. Ali to završi kao mnogo snažnije, svakako, za računalni znanstvenik, u konačnici. Tako ćemo pogledati. Ovdje sam na CS50.io, preko kojih možete se prijaviti u CS50 IDE. I baš kao u Scratch, postoji Tri glavna područja na zaslonu. Dakle, na lijevoj strani, imamo što će biti preglednika datoteka. I tu je ovu mapu na vrh, što je sada prazna jer sam dobio osloboditi od svih mojih datoteka prije supersection. I to je gdje ćemo spremiti C datoteke koje pišemo. U gornjem desnom kutu, imamo mjesto gdje sve naše koda će dobiti pisani. I doista, ako ja kliknite ovaj plus, ovaj će neka mi izabrati novu datoteku. A ovdje mogu početi pisati C koda ili zapravo, bilo koji broj drugih jezika. A onda se na dnu, gdje ga kaže jharvard @ ide50-- i tvoje će reći nešto malo different-- što je to zove? Terminal prozor. Da. Dakle terminal prozor tzv komandne linije sučelje putem kojeg možete komunicirati s operacijskom sustavu u podlozi. A za sada, idemo čine vrlo malo iskoristiti this-- samo sastaviti, pogledati poruke o pogreškama koje smo vidjeli, i pokrenuti naše programe. Ali u konačnici, idemo učiniti mnogo više, kao dobro. A čak možete instalirati softver i administrirati svoj radni prostor u CS50 IDE, kao dobro. No, više o tome neki drugi put. Tako ćemo ići naprijed i pisati vrlo jednostavan program jednostavno proći kroz toplo-up hello.c, što je možda najjednostavniji program možemo pisati. Već sam otvorio novu karticu. Ja ću ići naprijed i kažu uključuju standardni io.h. Zatim int glavni (prazninu). A onda printf ("Hello, World" backslash nje, u neposrednoj blizini citat, zatvoriti zagrade i zarezom. U redu. Tako sada primijetiti moj prozor bez naslova. Tako sam vrlo brzo ide ići na File, Save. I važno je da Zovem to nije "zdravo". Dakle, vrlo česta pogreška, osobito u problemu postaviti jedno, je slučajno baš nazvati svoj Program "voda" ili "pohlepni" ili "Mario" ili "kreditne" ili slično. Ali vi zapravo želite napraviti jeste li datotečni nastavak jer je to jedini način da se prevodilac i kod urednika zna da si zapravo pisanje C kod. Pa neka mi ići naprijed i kliknite Spremi. A sada, također, ono što CS50 IDE učinio za nas je to isto sintaksu istaknute sve. Tako da je napravio sve što je vrlo intenzivan. A cijela svrha koji nije funkcionalna. To je samo nacrtati oči na konceptualno različiti dijelovi ovog programa. Tako ćemo ići naprijed i sastaviti to. A ja mogu prevesti ovo u nekoliko načina. A u tjednu jedan je old-school način smo učinili bilo je doslovno na Command line-- "zveket hello.c." A onda sam pritisnite Enter. I ništa ne čini da se dogodi u prozor terminala. No, ono što je učinio promjenu u IDE? Gdje, opet, IDE samo znači Integrated Development Environment. To je fancy način govoreći: Ovaj integrirani razvoj okruženje za razvoj softvera. Pa što je promjenu u sučelju? Što si primjetiti to je drugačije, Maria? MARIJA: primijetio sam nešto pod IDE50 mapu ovdje. DAVID Malan: Da. Dakle ovdje, ne samo imamo "hello.c." Također imamo "a.out", koji je vrsta glupi naziv programa. Ali, istina, to je zadani naziv za Program kada jednostavno sastaviti svoj kod i ne reći prevodilac ono datoteke za izlaz. Dakle, ako želim raditi ovo, trebaju reći compiler-- ili bolje rečeno, moram reći da sam radni prostor želite pokrenuti program pod nazivom "a.out". Unesite. I tu je "Pozdrav, Svijet. "sada" ./ ". je zapravo važno. Iako obično mi samo Napiši nazive naredbi, kada je program ste napisao, ti želiš reći "./" jer izričito kaže Linux da želite pokrenuti program pod nazivom "a.out" to je u ovom, gdje točka znači taj direktorij da sam trenutno u, koji se dogoditi da se zove radni prostor ", a.out. Jer ako sam samo rekao "a.out" Enter, Idem se "a.out naredbe ne pronašao "jer computer-- jer sam izmislio "a.out"; što nije došao s computer-- ne znam gdje gledati za to, iako je u pravu pod nosom, da se tako izrazim. U REDU. Tako bismo mogli promijeniti u biti "zveket -o Hello hello.c." I ako sam pogodio Enter, što program će to izlaz za mene? Što je naziv datoteke? Da, u leđa. Tako je. "Bok." Dakle, "Hello" će biti naziv programa jer smo se koristi tzv naredbenog retka argument, koji je samo način promjene ponašanja prevodilac zapravo izlaz specifičan naziv datoteke. I doista, ako ja uvećanje van i pogledati ovdje, sada imam ne samo "a.out" i "hello.c", ali i "Hello", kao dobro. Pa sad ja mogu učiniti "./hello," Enter. I tu je "Hello, World". Ali lastly-- i to Sada će biti konvencija koristimo u cijeloj semestar, typically-- je možete samo reći "učiniti pozdrav." I doista, to je rekao da je spreman do danas, jer već postoji. Dopustite mi ići naprijed i uklonite s RM naredba, i "a.out" - i reći "izvadite redovite datoteke a.out?" To samo znači, da li ste sigurni da želite izbrisati? Ja ću reći da. A onda ću ukloniti "Hello", ali ne "hello.c." Idem reći "da" eksplicitno, ali "y" je dovoljno, kao dobro. A sada primijetiti da sam upišite ls-- koja, podsjetimo, znači list-- prikazuje sve datoteke u mojoj mapi. I doista, ako ja uvećanje van i pogledajte gornjem lijevom, što potvrđuje da je ono što je u ovoj mapi, čak Iako je označen kao IDE50 ovdje a ne radni prostor, to je samo "hello.c." Tako sada ovdje, ako sam ne "napraviti Hello," Enter, sad vidim mnogo dulje naredbu ali sofisticiraniji naredba da se događa biti koristan u tjednima koji dolaze. I sada mogu reći "./hello." Tako ćemo uzeti brzi obilazak neki drugi Linux naredbe. Zašto onda ne bismo uzeti jedan korak natrag i zapravo pogled na C više Općenito, prijelaz od nule na C, a zatim sklopiti s pogledom u prvom problemu postaviti u C. U redu. Tako ću ići naprijed i samo čista moj radni prostor s upravljačke L samo držati zaslon uredan. Ali to nema funkcionalni utjecati na neki drugi način. Sjetite se da smo vidjeli nekoliko naredbi sada. Tako smo vidjeli zveket, koji obično si neće morati izvršiti ručno više. Umjesto toga ćemo koristiti make. Ali, mi također vidio ls, što pokazuje popis datoteka u mom imeniku. A sad zašto je there-- postoje dvije datoteke sada, "Hello" i "hello.c." Zašto je zvijezda ili Zvjezdica nakon "Hello"? Što to znači, na temelju na ono što smo vidjeli u tjedan jedan? Što misliš? Što je zvijezda znači? MARIJA: For-- programa "Hello"? DAVID Malan: "Pozdrav *". Da. O da? Oh, izvršna. Tako je. Dakle, to znači da je "Hello" je izvršna. Dakle, istina, to je razlog zašto Ja mogu učiniti "./hello." U redu. Dakle, što još mogu učiniti ovdje? Pa, ispada da mogu Također stvoriti direktorije. Pa neka mi ići naprijed i stvarati, Na primjer, "pset1" katalog. A problem postaviti specifikacija će vam učiniti upravo to, tako da ne morate zapamtiti danas. No, "mkdir pset1" izgleda da nemaju utjecaj. Ali opet, ne pojavi poruka je općenito dobra stvar. Dakle, ako sam tip "ls" now-- Ah, sada Imam izvršnu datoteku pod nazivom "Hello" C file "hello.c." A onda je kosa crta, tako da govoriti, znači da je to katalog. Dakle, istina, sada želim ga otvoriti. I ne dvostruko kliknuti na nju kao u GUI, grafičko okruženje. I umjesto da kažem "CD pset1." Unesite. Ništa zanimljivo izgleda da ima dogodilo, osim mog malog redak here-- to je Linux je način podsjećajući ja gdje sam ja, pa što mape otvorena. To je samo mi govori izričito za razliku grafički. A ako upišete "ls", zašto ne vidim drugi potaknuti odmah misliš, kad sam popis sadržaja pset1? MARIJA: Vjerojatno ne ništa u tamo. DAVID Malan: Da. Pa onda nemamo očito stvorio sve tamo jer sam upravo stvorili imenika. Sada, ako sam želio stvoriti file-- za recimo, ja mogao stvoriti novu datoteku. A onda mogla sam ići na Spremite i spremite ga kao, poput: "mario.c" ako radite standardni izdanje pset jednom. A onda, kao i bilo koji Mac ili PC, samo odaberite mapu "pset1, Spremi. A sada je datoteka prazna. Ali neka povećavanje opet za sekundu. Učinimo LS ovdje. Sada ćemo vidjeti "mario.c". Dakle, postoji nekoliko drugih naredbi vrijedi imajući na umu tijekom time-- Jasno, ili upravljačke L je ono što sam je udaranje; mkdir smo vidjeli; rm smo vidjeli, kao i, što je za uklanjanje ili brisanje datoteke. Čuvajte možete also-- i ako pogledate na online tutoriali, vi ćete rm-rf je vrlo čest način govoreći izbrisati mapu koja ima stvari u njemu. Samo biti super, super oprezni. rf znači rekurzivno izbrisati sve što je pokušavate izbrisati i silom ga izbrisati. Dakle rekurzivna znači ako je mapa mapa sa mape s mape, izbrisati sve njih. A prisilno znači uopće ne pitajte me da ili ne, ja sam siguran? Dakle, to je super opasan način brisanje puno stvari brzo. Ali beware-- prečesto radi neustrašivi Student slučajno izbrisati, recimo, pset jedan, npr. MARIJA: A ako su samo to -r, oni će ih pitati o svakoj jednu datoteku. DAVID Malan: Koji je umjereno neugodno. MARIJA: Da. DAVID Malan: Pa zato tako da mnogi od nas, samo su, sam u naviku korištenja rf. Ali, to je opasno. Dakle, kupac biti na oprezu. A onda MV je vrsta zanimljivo ime. Dakle, ovo je potez naredba, koji se osjeća malo čudno jer vi doista možete ga koristiti za premjestiti datoteke s jednog mjesta na drugo. Na primjer, pretpostavimo da sam zabrljao. Pretpostavimo da sam stvorio nova datoteka za pset. I ja sam ga spremiti kao "greedy.c." No, pretpostavimo sam slučajno spremite u IDE50-- tako da u samom mom radnom prostoru i ne pset1. Možete vidjeti koliko u gornjem lijevom kutu. Postoji "greedy.c." I tu je nekoliko rješenja. Dakle, jedan, mogu koristiti super razumljiv način samo povučete i ispustite. I to bi zapravo riješili ovaj problem. Ali danas, pokušavamo gledati na Više Arcane, ali moćne načine za to. Zato mi dopustite da poduzme "ls" u pset1. A ja vidim samo "mario.c." Dopustite mi ići naprijed i učiniti "CD ..". Dakle CD opet promjene katalog. ".." Znači ono, iako? Zadnji put kad sam rekao "CD pset1 "ići u pset1. Dakle, kad kažem "cd ..", što ja radim? Unatrag. Da. Tako da će tzv roditelja. Idi jednu razinu gore, kao što izlaska iz mape. Tako Enter. I doista, pogledajte što je učinio. To me preselio upravo u radnom prostoru, umjesto od u pset1, koja je u radnom prostoru. A sada, ako sam tip "ls", postoji cijela hrpa stvari. U tu je "greedy.c". Pa sad neka mi koristiti MV doslovno premjestiti "greedy.c" u pset1. I tako puno Linux naredbe rade upravo ovako. Oni se ne argumente ili ih uzeti jedan Argument ili oni uzeti dvije komandne linije argumenti i tako dalje. I u ovom slučaju, to je doslovno radi ono ona kaže, iako succinctly-- premjestiti greedy.c u pset1. Unesite. Ništa ne čini da se dogodi. Ali ako ja to ls opet, pohlepni je otišao. A ako radim "CD pset1", Enter, a zatim Je li opet, sada je na pravom mjestu. Kao na stranu, ako se za Neki reason-- posebno ako imate prekidima mrežnog povezivanja ili ste šetnju kampus sa svojim laptop poklopcem zatvorena, a zatim ga otvoriti opet i vaš radni prostor Čini se pomalo out of sync, nije velika stvar. Samo ponovno učitajte preglednik prozor, i to bi trebalo RESYNC tako da je lijeva ruka file browser izgleda točno poput prozora terminala. Bez brige. Kada su u nedoumici, učitajte stranicu, tako da dok ste spremili datoteke već. U REDU. Tako MV se također može koristiti za preimenovanje datoteka. I neka je pogledati ovo konačna naredba ovdje. Tako suppose-- a to je super uobičajeno, također, rano. Neki studenti povremeno stvoriti datoteku zove, neka je say-- što je još jedan? Kao "WATER.C." Pa samo ću vikati, za nema razloga, u svim kape. No, to nije Točan naziv za datoteku ako je samo zato naš problem postaviti Specifikacija ti nije rekao spremiti datoteku kao sve kape "WATER.C." Umjesto toga, očekujemo "water.c" malim slovima. A, u stvari, to je problematična jer check50, program idete susret u problemu jedan set koji automatski testira ispravnost kodu će vikati na tebe ako to ne uspije pronaći "water.c" u svim malim slovima. Dakle, moram popraviti. Toliko različitih načina na to, od kojih je prvi bi se kontrolirati klik ili desni klik naziv datoteke i samo promijeniti Preimenuj. Totalno redu to učiniti. Ali opet, danas, neka je to učiniti nešto ljubitelj. Idemo koristiti MV mijenjati "WATER.C" na "water.c." Dakle, možete koristiti prvi argument da ga preimenovati u drugi argument ako je drugi argument nije u Činjenica, mape ili naziv direktorija. U redu. I na kraju, malo trick-- pa sam u moj radni prostor katalog u ovom trenutku. Ako želim da se u pset jednom, Ja sigurno mogu upišete "cd pset1." Ali to je tako zamorno tipkati "pset1" ili više imena datoteka ili imena imenik još. Dakle, vrlo često u Linuxu, što što možete učiniti je početi na gumb "PSE" i samo dosadi, udario Tab, i neka računalo to shvatiti umjesto vas. Super korisno da se u tu naviku. Jedina kvaka je ako imate više datoteka ili mapa koje počinju slovom "p" ili "ps", možda ćete morati upisati još nekoliko prije Računalo zna što treba učiniti. MARIJA: Volimo prečaca. DAVID Malan: Ovo će uštedjeti puno vremena. I također, kao što smo rekli u predavanju, što možete pronaći u povijesti, gore i dolje, pronaći nedavno pogubljen naredbe, kao dobro. U redu. Tako sada, neka je skrenuti pozornost na jednostavan program, Hello World. Tako smo sastaviti to točno. A sad zašto ne uzmemo pogled na vrste podataka a zatim prijelaz iz neke odgovara Bloka blokova C MARIJA: Awesome. Pa sada da ste započeli pisanje programa u C, ćemo početi govoriti o vrstama podataka i varijabli. Tako neke vrste podataka koje bi željeli znati počinju danas su one koje su osvjetljeni plavim. Tako imamo int prvo, koja se zalaže za cijeli broj. I to drži prirodna broja, kao i vi možda guessed-- do 1, 2, 3, i bilo koji drugi cijeli brojevi koje se možete sjetiti. DAVID Malan: I također negativan. MARIJA: I također negativni, Yep. I 0. Onda smo plovi, koji su brojeve s pomičnim zarezom. Dakle, to je sve realne brojeve da imaju decimalne točke. Dakle 5.0, 5.2, i još znamenke nakon decimalne točke, kao i, kao i one negativne. Onda smo char koji je lik. Dakle, mislim da smo razgovarali o ovo predavanje danas. Ali imamo pisma, za example-- A, B, C-- koji se može pohraniti kao char. Ali onda imamo puno više simbola koji se može pohraniti kao char. A oni se pohranjuju kao ASCII. I onda imamo bool, koje su logičke izraze. A oni ocjenjuju da Točno ili Lažna ili 1 i 0, respektivno. DAVID Malan: i podsjetiti da je bool dolazi iz CS50 knjižnici. Dakle, to nije ugrađen u C, ali to je super korisno da pojam istinito i lažno. I iako vas Možda think-- zabava činjenice. Bool tehnički treba koliko bitova, doista, za zastupanje Točno Netočno odnosu? Koliko bitova mislite li ti bi trebao, maksimalno? Da, samo jednom. Tako ispada da je C Ne mogu vam dati samo jedan zalogaj. Najmanja jedinica mjere možete dobiti je osam. Dakle, to je malo razoran da ste pomoću cijeli bajt ili osam bitova, zastupati Točno ili netočno. Ali to je samo način na koji je to implementiran u C od CS50 knjižnici. Maria: I onda one koje smo neće govoriti o tako velikoj mjeri Pravo now-- dvaput, to je za veće plovcima. Dugo dugo i kratko su i za cijele brojeve. DAVID Malan: Doista. U hakerske izdanju pset jedne, mi zapravo koristiti dugo dugo. No, za standardno izdanje, ne bi trebalo biti potrebno. MARIJA: cool. U REDU. Dakle operators-- da bi trebao biti vjerojatno upoznati s većinom od njih. Osim toga, +; oduzimanje, -. Za množenje, imamo *. Dakle, nije da je X obično koriste. Odjel, imamo obrnutu kosu crtu. A modulo je naš zadnji operator koji ćemo razgovarati o sada. To je operator koji nam omogućuje da uzeti ostatak podjele. Dakle, ako imamo 4% 2, 4 podijeljeni od 2 je 2 s ostatkom 0. Dakle 4% 2 0. 4% 3 1. 4% 5 4, kao što ste mogli pogoditi. I zapamtite kada se koristi sve te operateri koristiti PEMDAS pravila. DAVID Malan: Dakle, da bude jasno, ako vas ne 4% 2, zašto je to 0, točno? MARIJA: Zbog 4 podijeljen 2 2 s ostatkom 0. Dakle modulo nam daje tu kao ostatak Za razliku od posljedica podjele. DAVID Malan: I doista, što ćemo naći ovaj koristan je da u nekim problemima to nije nužno jedan, ako želite imati učinak ograničavanje sebe na raspon brojeva kao 0 do nečega, možete koristiti modulo omotati oko ranije nego kao 2 milijarde ili vrijednost 4 milijarde koje smo razgovarali o predavanju u. MARIJA: Da. A čak iu "pohlepni" smo mogli. DAVID Malan: Da, u Problem postaviti jedno, kao dobro. MARIJA: Da, lijepo. DAVID Malan: Dobar savjet. MARIJA: Žao mi je. Booleova expressions-- tako za Boolean operatora, ćemo o svemu razgovarati od ovih koje ovdje vidite. Tako sada imamo dva jednake znakovi popisu za jednakima. Dakle, oni su za usporedbu. Do sada smo samo sam vidio jedan znak jednakosti. To je kad smo dodijelili vrijednost u varijablu. Dakle, ako smo vidjeli int n = 5, zatim dodijelili smo 5 na varijablu n. No, ako želimo koristiti == za usporedbu, možemo provjeriti da li je n == 5. A ako n == 5, onda je to istina. Dakle, Boolean operatora omogućuju nam, zapravo, ocijeniti Boolean izrazi na true ili false. Dakle, ne equals-- imamo uskličnik i jednaki. Tako smo se također može provjeriti, ako je n nije jednak 5-- tako n! = 5. Manje od manje od ili jednako, veći od, veći ili jednak, a onda smo logički I i logično ILI. A oni nam omogućiti da procijene više Boolean izraza zajedno na osnovi dolaze zajedno kao jedan cijeli logički izraz. Dakle, ako želimo pronaći broj, kažu, da je veći od 5, ali manje od 15 u isto vrijeme, mi bi koristiti logično i operater vidjeti ako je n veći od 5 && n manje od 15. DAVID Malan: I ovdje, također, to je stvarno lako rano slučajno koristiti samo jedan ampersand ili jedan okomita traka. I nadam se prevodilac će vikati na vas, jer oni zapravo imaju vrlo različito značenje. Za one radoznale, oni su koristi za bitovni poslovanja, djeluju na pojedinačne bitove. Ali vi želite par njih ovdje. I super važno je da Prvi je znak jednakosti, koji je operator jednakosti kao Za razliku od operatora dodjele. MARIJA: A okomita traka je nalazi između Delete i povratka. DAVID Malan: Da. Na tipičnoj američkoj tipkovnici. MARIJA: Aha. Tako ćemo skočiti pravo u uvjet. U nule, vi ste već vidjeli, vjerojatno, ako izjave da vam omogućuju da provjerite je li nešto istina, onda učiniti nešto drugo. Dakle, možda ste htjeli provjerite je li vaš duh je dodirujući neku drugu sprite ili granica zaslona. A onda ste možda željeli završiti igru ​​ili učiniti nešto drugo. Dakle sintakse za to je "if (uvjet)." Dakle, ako je vaš duh dodiruje nešto, onda je unutar vitičastih zagrada. Onda smo IF-ostalo izjave. Inače nam omogućuje da učinite nešto ako je uvjet da se provjerite u početku nije istina. Dakle, ako je duh dodiruje granični to, drugi učiniti nešto drugo. Dakle, na neki drugi način učiniti nešto drugo. Onda smo kratki primjer za to. Dakle, ako (military_time <12), mi želite printf "Dobro jutro!" Inače ćemo printf "Dobra večer!" Osnovni primjer. DAVID Malan: Dobro. MARIJA: cool. Tako sada imamo prekidač izjave. Zamijenite izjave općenito mogu omogućuju nam da napraviti puno iste stvari da smo samo razgovarali o s i ako izjavama. Na primjer, sada imamo opći oblik izjave prekidača koji nam omogućuje da se varijabla zove n i usporedite ga puno različite vrijednosti, što ovdje ćemo su pozvani constant1, constant2. Možemo imati puno više. A oni su pozvani slučajeve. Dakle, ako imamo prekidač statement-- i to radi samo za integers-- imamo varijabla u ovom slučaju to je n. Ako je varijabla n jednak constant1 smo će izvršiti neki isječak kôda ili nešto što želimo učiniti. I onda bismo razbiti. Tako je pauza znači da izjava prekidač će se zaustaviti izvršenje, ako n je jednak constant1, a zatim vaš program će se nastaviti. To će izaći iz kategorije prebaciti izjavu i to će nastaviti raditi nešto drugo. Ako je, međutim, n nije jednak constant1, onda slučaj za constant2 će biti provjereni. Dakle, ako je n jednak constant2, taj drugi Isječak koda će se izvršiti. A onda ćemo razbiti ako je jednak tome. A onda možemo imati also-- ne nužno, though-- zadani slučaj, što će se dogoditi ako n nije jednak bilo slučajeva da ste na popisu. I u zadanom slučaju, mi također ne treba predah nužno jer Izjava prekidač će znati da treba završiti nakon defaultu slučaj ako je to slučaj. DAVID Malan: Ali stilski, smo ga uvijek staviti unutra. MARIJA: Da. DAVID Malan: Da. Dakle, posebno na samom početku, pogotovo ako među onima manje udoban, ja bih osobno Samo preporučuju držati s MS i IFS-drukčije i ako je-drugo-ako-drukčije i tako dalje, ako se samo jer si malo više jednostavan. To je lijepo optimizacija, ili ponekad čak i estetski ga čini kod više čitati. A u stvari, vjerojatno Sredinom semestra vidjet ćemo problem postavljen je sad izgleda bolje i lakše za čitanje za ljude pomoću prekidača izjavu. No, ne brinite o držeći to prerano. MARIJA: Da. Ako imate puno ako izjave, možda samo ne biti vrlo čitljiv. To ne može biti vrlo brzo za vas da ide kroz njega. Dakle prebaciti izjave mogu biti vrlo korisna, kao dobro. I također, ne remember-- ne zaboravite staviti pauze tamo. DAVID Malan: Ne sjećam ovoga. MARIJA: Jer onda možda pasti kroz od slučaja do slučaja. Dakle, recimo da je slučaj constant1 nije imao break izjavu u njoj. Onda smo mogli pasti kroz u slučaju constant2. A mi ne želimo učiniti ako već smo postigli slučaja constant1 i to je jednaka n. Tako, na primjer, ako imamo varijablu n koji sadrži niz klase, i želimo vidjeti što je to Klasa is-- ako je n = 50, idemo ispisati "CS50 je Uvod u Computer Science I. " Onda ćemo razbiti. I to je to. Ako je, međutim, n je jednak do 51, idemo za ispis "CS51 je Uvod Computer Science II. " Zatim, opet, idemo razbiti. Međutim, ako je onda stavio 124, 61, bilo drugi broj da biste mogli misliti, ili program ne ide prepoznati da. Dakle, to će reći: "Žao mi je, ja sam nije upoznat s tom razredu. " I to će se slomiti. DAVID Malan: Dakle zaista možete vidjeti if, else if, drugo ideju ovdje. To je samo drugačije sintaksa za izražavajući točno istu ideju. MARIJA: Točno. Sada imamo ternarna operatora. Dakle ternarne operateri moraju tri parts-- stanje, nešto učiniti ako taj uvjet je istina, a zatim nešto učiniti ako je uvjet lažan. Dakle vidite, u osnovi, sintaksa koja se ovdje. Imamo upitnik i onda the-- što mi to nazivamo? DAVID Malan: debelo crijevo. MARIJA: Colon. Hvala. Oprostite. Pa pogledajmo naš primjer vidjeti možemo li smisla this-- class_num == 50. Dakle ovdje vidimo našu Boolean operator == koji uspoređuje varijablu class_num do 50. Dakle class_num trgovinama cijeli broj. A ako taj cijeli broj jednako 50, onda smo će pohraniti "David Malan" unutar niza profesora. Ako poslovni broj ne jednaka 50 "Ne David Malan" će biti profesor. DAVID Malan: Hvala vam. I tako to čini ekvivalent Što biste rekli, na prvi pogled? MARIJA: Za mene to čini kao i ako-ostalo izjave. DAVID Malan: Da. A u stvari, to je vrsta od prilično jednog broda, da tako kažemo, za provedbu upravo logika ako-ostalo ali radi sve u jednom koraku. MARIJA: Točno. Da. Dakle, ako-else izjava možda zauzimaju puno prostora. Oni mogu biti predug za nešto kao jednostavan kao taj. Dakle, to može biti vrlo sažet i vrlo lijepo. Dakle, sada idemo u potrazi na i opet izvršavanju nešto, pa ček za stanje više puta a zatim nastavlja raditi nešto dok je uvjet true. Dakle, to nas dovodi lijepo u while petlje. S lijeve strane, imamo naš prvi while petlja. Dakle, dok je nešto istina, nešto opet i opet. Dakle, pobrinite se da je naš Stanje je ovdje potvrditi na vrhu. Dok s našim drugom loop-- zovemo da do-a loop-- smo nešto učiniti, onda smo provjeriti stanje. A ako taj uvjet i dalje biti istina, možemo se vratiti i učiniti što više. Dakle, glavna razlika je u kojoj uvjet se provjerava na. I kod svibanj nikada biti izvršiti ako uvjet nije istina s while petlje. Dok s do-vrijeme petlje, imamo kod koji je uvijek izvršiti barem jednom. A onda, dok je stanje i dalje biti istina, možemo se vratiti i opet ponoviti unutra. Pa zašto misliš da bi koristili do-while petlja iznad while petlji? Pravo. Dakle, ako želimo brz Korisnik za neku vrstu ulaza, ako želimo da ih pitam unijeti svoje ime, želimo ih barem pitati jednom. A ako oni ne ulaze to ime, mi nismo će ih ponovno pitati jer smo već znali. Ali ako oni ne ulaze njihovo ime, ili ako se upišite nešto što je očito nije ime, mi i dalje želite nastaviti moleći ih na za svoje ime. DAVID Malan: I u predavanju imali smo jednu ovako s dobiti pozitivan int primjer, tamo gdje je ništa provjerite na prvi, jer imate ni dobivši int. Dakle, želimo napraviti this-- dobiti int od user-- onda to provjeriti, možda, opet i opet i opet. MARIJA: Točno. Za loops-- OK. Za petlje može nam omogućiti da učinite gotovo točno istu stvar, kao dobro. To je zapravo točno istu stvar. Dakle, nema ništa što što možete učiniti s for petlje da ne bi bio u stanju učiniti s while petlje. Ali za petlje može činiti malo malo više komplicirano sintaktički jer su tri dijela u ono bio prije samo Stanje s while petlje. Tako je prvi dio koji si more, lijevo-većina, imamo "int patuljci = 0." Dakle, ovo je mjesto gdje smo inicijalizirati naše varijable. Onda imamo zarez i "patuljci <7." Dakle, ovo je mjesto gdje se Stanje je zapravo. Dakle, to je ono što bi staviti samo u vrijeme loop-- "dok su patuljci <7." Evo, da se ide u Sredina našeg for petlje. Dakle, "dwaves <7." A onda je naš zadnji dio je "patuljci ++" koji je mjesto gdje ćemo ažurirati naš varijablu. Tako je važna stvar shvatiti da je ovaj će proći kroz to za petlju sedam puta i izvršiti sedam puta. Dakle, imamo sedam patuljci, i oni su svi će reći: "Ja sam ovdje da vam pomogne, Snjeguljica " jer oni su spremni pomoći Snjeguljicu. Uz dok petlje, što bi učinio inicijalizacije i ažuriranje ne u stanju, opet, ali prije ili unutar while petlji kako bi bili sigurni da we-- jer mi uvijek trebati one dijelove. Dakle, kako bi bili sigurni da imamo ih, mi bi ste dalje dodaje ih na, samo ne u zagradama. DAVID Malan: I tako to izgleda volimo-članovima za predavanje, na primjer, Ja gotovo uvijek koristiti, kao što je, ja i n i prilično dosadno varijable. Izgleda možete koristiti više pametno zove varijabli, previše. MARIJA: Da, to je zapravo jako lijepo koristiti malo više opisne varijable jer pogotovo ako je netko drugi čitajući vaše code-- možda ste ocjenjivač ili ako ste za suradnju s somebody-- želite da biste bili sigurni da su oni Razumijem što radiš. U REDU. Dakle, to je nešto vrlo funky-- for petlja unutar petlje za. Ja ne znam da li smo vidjeli prije. Vjerojatno ne. Ali mi zapravo može imati this-- tako petlje umjesto petlje. Tako se bilo tko želi možda prošetati meni kroz ono što se ovdje događa? DAVID Malan: Ja ću uzeti ubod. MARIJA: cool. DAVID Malan: U redu. Dakle, spoiler-- želimo ispisati stvari to je u donjem desnom kutu tamo. MARIJA: Tako je. Da da. DAVID Malan: Pa mi smo samo staviti taj primjer izlaza nema. Dakle, ja mogu zaključiti iz najviši petlje da ste iterating preko reda u najudaljeniji petlje, da se tako izrazim. A ti iterating više stupovi s najintimnijeg kruga. I intuitivno, to trebali nadamo smisla jer po prirodi svaki program smo vidjeli Prije, printf, koji je Funkcija mi koristimo, u konačnici, ima mogućnost ispisa stvari iz suštini redak po redak. Kao, nakon što ste reproduciraju nova linija, postoji nema dubliranje natrag i tiskanje nešto više na zaslonu, barem Ne koristite printf ovako. I tako u tom smislu, čini osjećaj da je vanjski petlje treba se odnosi na nizove jer je za svako dano red, ti si idući u ištanje to ispis XXXXX, a zatim premjestiti na sljedeći redak, xxxxx. Dakle, redovi na prvom mjestu. A onda unutar svakog red, ispisujete stupce. Ako ste pokušali da ga se ne suprotno, to bi vjerojatno ne izaći kao namjeravate. MARIJA: Da. Mi jednostavno ne mogu vratiti na prethodni redak s printf. DAVID Malan: A što je zanimljivo po današnjem razgovor o opsegu, zapravo, da je red je int koji je proglašen u najvišem petlji. Ali primijetite da je još uvijek unutar, da tako kažemo, Kovrčava aparatić koji Odmah slijedi, iako to nije tehnički unutar tih vitičastih zagrada. Pa red je opseg za cjelokupnost isječku koda, kako unutar vanjskog za petlje i unutarnje strane za petlju. No s druge strane, gdje je je stupac u opsegu? Varijabla stupac? Da, samo u unutarnjoj petlji. I to je u redu, jer mi ne pristupiti je izvan njenih vitičastih zagrada. Sve što učiniti je ispisati iz nova linije na samom kraju tamo. Tako da je zapravo u redu. Dakle, to ima učinak, izgleda, raditi tri retka i četiri stupca. MARIJA: Tako je. Dakle, prvo ćemo proći kroz naš prvi red. I samo u prvom redu, mi učiniti četiri stupa unutar prvog reda. Tako smo ispisali četiri X-ih. A onda možemo izlaz za petlju, jer već smo isprintati četiri X-ih. A mi ispisati novu liniju. A onda idemo kroz Isti postupak još dva reda da bi ukupno tri. DAVID Malan: I to je vrijedno napomenuti da je samo artefakt fonta, činjenica da uzorak izlaz čini toliko jači, kao da postoji više redaka nego stupaca. Ali to je samo zato što je X je viši nego što je širok. To je sve što se tamo događa, plus bijeli prostor između redaka. MARIJA: Tako je. Cool. DAVID Malan: U redu. Tako brz pogled na problemu postaviti jedan, uzeti na sva pitanja, a zatim prekinuti? U redu. Tako je u problema postaviti jednu, ima tri primarni izazovi, u konačnici. Ali prvo, vi ćete kako postaviti problem specifikacije, kao što je s mnogima psets ove jeseni, će vas provesti kroz nekoliko zagrijavanja vježbe, ukazuju vas iz nekoliko izvora koji svibanj ili svibanj nisam vidio već. Na primjer, CS50 ima paket gaćice, koji su kratki video, Nije za razliku od toga, ali to Vrlo tema specific-- možda pet minuta, 10 minuta u dužini na petlji ili o uvjetima i na algoritme ili kasnije više napredne teme, kao dobro. I općenito ugradili oni u problemu postavlja tako da učenici imaju resurs s kojim pregledati materijal koji bi mogli imati Već se u predavanju ili dijelu. No, ovaj put to je više fokusiran i na dohvat ruke. Mi također imaju tendenciju da se ugraditi u problemu postavlja stvari zove Walkthroughs. Dakle, gotovo sve primjere radim u predavanju, na pozornici se ovdje, mi također su pucali na kameri u unaprijed više sporije, više intimni prohod po meni na moj laptop tog koda, redak po redak tako da je u klasi, mi ćemo se često kliziti kroz nešto ili nekoga će ubaciti Sa odgovoriti na pitanje. No, to ne mora nužno potonuti u za svakoga u publici. Tako ćete naći kod Walkthroughs za većinu primjerima da mi ovdje u predavanju, tako da mogu hodati kroz njega na vlastitim tempom i natrag ili naprijed ili preskočite zajedno, ako želite. Tu je često malo topla-up pitanja koja Vas molimo da vrsta ojačati taj materijal i uvjerite se da si udoban prije nastavite s ostatkom pset. I onda, naravno, tu je sama pset. I jedna od stvari smo vrlo namjerno učiniti u CS50 je gotovo svaki nezanimljiv ili intelektualno nezanimljiv mehanička korak koji možda ćete morati učiniti je gotovo uvijek vrlo dobro dokumentirana. Tijekom roka, mi ćemo početi tražiti više retorička pitanja kao što se sjetiti kako ovo ili ono? Ali općenito, vidjet ćete da je problem setovi dobiti kroz mehanika nešto tako da zanimljive, intelektualni izazovi su u konačnici lijevo za vas studenta. Uz to, rekao je, Zamyla, kojima smo čuvaju se danas odnosi na predavanja, je jedan od naših dugogodišnjih zaposlenika član koji također drži Walkthroughs na specifične probleme kao što su Mario pset i pohlepni, iako ne zalijevati ove godine. I to je u onima Walkthroughs da je ona često nudi neke savjete i trikove za kako postupiti, nikada vam govorim točno što učiniti, ali rather-- kao uvjet, ako will-- dajući vam najmanje Nekoliko ideja tako da je na vama, u konačnici, odlučiti kako im pristupiti. MARIJA: Nešto poput visoke razine Razumijevanje logike što tražimo od vas da učinite. DAVID Malan: Točno. I, u stvari, a Zamyla Walkthroughs značilo odgovoriti na najčešća pitao pitanje gdje Počeo sam raditi, pogotovo kada ove duge specifikacije malo zastrašujuće dao sav tekst i slike koje su u njima. Dakle water.c, naći ćete Nakon što ste ga završili, je zapravo relativno jednostavan. Apsolutno su hrpa od vas će lupati glave o zid pokušavajući shvatiti zašto to nije sastavljanju ili zašto to nije ispravno radi. No, nakon što ste učinili s njom i nakon što ste proveo neko vrijeme bori s bilo od bugova koji bi mogli imati, vidjet ćete da je to vrlo kratki program. To se može obaviti u samo nekoliko linija koda, od kojih je većina vidjeli smo ovdje u predavanju već, ako sastavljanja pravo blokova. I kao što predlažemo ovdje, to će pitati da odredite koliko minuta netko tuširanja na kampusu. Mi navesti u problemu podešavanje brzine protoka vode u, kao što su tuš, low-flow Glava, baš kao Seinfeld isječak što smo vidjeli jučer ili ih budete suprotno. I onda samo trebate učiniti malo matematike, really-- aritmetiku pomoću C ispričati nam koliko, otprilike, boce vode da je ekvivalentna ako smo uzimanje n-minutni tuš. Sada, u mario.c, to se događa biti nešto više programa. To još uvijek neće biti tako dugo. Samo nekoliko redaka dulje nego water.c. Ali to će biti prilika stvoriti staru školu Mario Piramida od Super Mario Braća ili neki nastavak na. To neće izgledati kao ljepše ili kao boja kao da je jedan igrač. Samo ćemo koristiti malo izraze s oznakom # kao što mi imamo ovdje na zaslonu pomoću ASCII tekst. Ali to će se približna istu ideju. I to će biti vježbe koje na prvi pogled izgleda prilično jednostavno simple-- ispisati jednostavan piramidu. No, tu je par obilježja ovdje su zanimljivi. Obavijest da rightmost rubu piramida zapravo ima širinu dva. Dakle, postoje dva jednaka Visina stupova, koji čini to zahtijevaju malo Malo misli da bi jeste li dobili koji točno pravo, kao što je za razliku od samo savršeno nagnuti linije. Dakle, to je malo kutak slučaja ali odgovara stvarnoj igri. I to je također nije očito na prvi pogled kako ispisati bijeli prostor. Dakle, kada sam pogled na Uzorak izlaz here-- i to je također u spec-- se vrsta izgleda kao pravokutnik, ali dijagonalom od pravokutnik je odrezala, i to je samo bijela mjesta, da se tako izrazim. I tako često postavljana Pitanje ovdje je uvijek, dobro, kako mogu premjestiti izraze s oznakom # na to pravo? Ili kako mogu ispisati prazne prostore? I to je zapravo lakše nego većina studenata misli. Pravo? Možete ga približan vizualno jednostavno udaranje razmaknicu jednom ili dvaput ili tri puta. I tako, iako s printf smo gotovo Uvijek ispisati niz ili int ili riječ poput "Pozdrav, svijet "ili niz riječi, možete samo ispisati citat, prostor, citat. A to će zapravo dati što bijeli prostor postoji. Pa imajte to na umu i Ne overthink ovo. Vi stvarno trebate odlučiti red po red, Nije za razliku od vašeg primjer trenutak prije, koliko je onih koji stupovi bi trebali biti bijeli prostor i koliko ih treba biti izraze s oznakom #. Trebat će malo vremena, ali to je konačnici logika puzzle sorti. MARIJA: Da. Ali logika ide red će biti vrlo korisno ovdje. DAVID Malan: Da. Mislim da je uzorak koda si gave-- čak iako to nije bio kompletan program. Još uvijek je potrebno int i glavni i praznina i #include stdio.h, puno stvari iz predavanja. No, zgrada blokovi Čini se da su tamo. A onda na kraju je nešto malo više algoritamski. Tako ispada da je bilo koje vrijeme ići u CVS ili bilo trgovini i netko pruži Na blagajničko računa ili novca kao promjena, ispada da su oni, ljudi, da li ili ne oni to znaju ili ne, Vjerojatno koristite ono što je naziva pohlepni algoritam, pri čemu ako ste duguje, kažu, $ 21 u promjeni, jer iz nekog razloga ste kupili nešto vrlo jeftin s vrlo velikim zakona na CVS, to bi bilo jako neugodno ako je Blagajnik vam je dao 21 singlova ili, još gore ipak, puno novca. Umjesto toga, ono što razumna osoba Vjerojatno ćete učiniti je da ide da zgrabite $ 20, a zatim $ 1 računa, a ruka vam samo dva računa u tom slučaju. MARIJA: Tako oni traže kako bi se smanjila promjena koje daju natrag na vas. DAVID Malan: Točno. A isto bave novca, kao dobro. Ako ste duguje, kažu, $ 0.50, nadam se da ne želite 50 penija. Umjesto toga žele dva četvrtine, na primjer. Sada, to ne pretpostaviti da blagajnik mora dosta svake vjeroispovijesti koji on ili ona možda želite dati. No, mi vam omogućiti da preuzme koliko u problemu. A cilj, u konačnici, je implementirati u C kod pohlepan algoritam. Dakle, korisnik je dopušteno upisati u koliko mijenjati on ili ona je dugovao s dolara i centi, neka vrsta pomičnim zarezom vrijednost vjerojatno. A onda morate učiniti za matematiku i shvatiti algoritamski, dobro, koliko novca mogu dati što minimalno da vam upravo taj iznos promjene. No, tu će biti Nekoliko lukav dijelova ovdje, zar ne? Kao da je cijeli Pitanje nepreciznost. MARIJA: Točno. Dakle, s pomičnim zarezom Vrijednosti su nepreciznost. Jesmo li razgovarati o tome u predavanju danas? DAVID Malan: Napravili smo Posljednji put u predavanju. Razgovarali smo o nepreciznosti. A vi ne želite prevariti korisnika koliko promjena on ili ona duguje. I tako prohod, u problem postaviti specifikacija, dati neki mislili, u konačnici, kako bi se kako možete ublažiti one nepreciznost pogreške, potencijalno. To je izbjeći, sigurno, za ulazi mi govorimo. I, u stvari, pennies-- Možda ćemo odgoditi za Zamyla, Mislim, za trikove tamo. Dakle u konačnici, pronaći ćete progresija problema ovaj tjedan, prvi od kojih je prilično mala, zatim medij, onda je malo veći. No, svi oni koriste zgradu blokova od prošlog tjedna, iz ovog supersection, Problem postaviti Specifikacija stavlja vas u bezbroj izvora. Ali ipak, ako uopće bore, osobito među onima manje ugodno bez prethodne pozadini, dolaze radnog vremena u ponedjeljak i utorak i Srijedu i četvrtak. Idi na CS50 Raspravite putem Web stranica tijeku je, preko kojeg možete razgovarati s osobljem i kolege. Ali u konačnici, mislim da je najbolji savjet je samo započeti rano. To nije vrsta klase koja vas treba početkom psets srijedu noć, ili još gore u četvrtak navečer. MARIJA: Moj najbolji savjet je da su počeli u ponedjeljak. DAVID Malan: ponedjeljak. Dakle, ako niste započeli already-- br. No, čak i ako nije u ponedjeljak, a zatim u utorak. Što prije to bolje. I to je razlog Naravno ima toliko kasno je dana da vam malo psihološki pritisak početi ranije, ali još uvijek neka stvari skliznuti kada stvari potrajati dulje nego što očekujete. MARIJA: A želite iskoristiti Radno vrijeme koliko možete, previše. DAVID Malan: Ima li pitanja? U redu. Pa, zašto ne bismo odgoditi ovdje?