[Powered by Google Translate] David J. MALAN: U redu, ovo je CS50 i to je kraj tjedna 1, pa studijskih kartice su i ukupni broj kolege koje su u ovoj godini je 745. A mi tako smo oduševljeni da su mnogi od vas u tijeku ovaj semestar, ali iako je ovaj tečaj je toliko velika, shvatiti da je ove stvari poput petak ručkove, poput radno vrijeme, 15-osoba sekcije, i tako dalje da su zapravo značilo stvoriti ovo intimnije okoliš. Dakle, iako možemo skupiti jednom ili dvaput tjedno, ovdje u Sanders, znam da velik dio svog iskustva u ovom tečaju će biti jako puno hands-on na uz svoje kolege i nastavno osoblje. Dakle, ovdje mi ići, Jesen 2012. Dakle podsjetiti da smo zadnji put završila na note nepreciznost, govori o zastupljenosti brojeva. I mi smo gledali jedan od propusta koji su se dogodili, u stvarnom svijetu, kada je došao do nesporazuma kako računala rade. Pa, danas ćemo ponovno jedan od onih ideja kao te nastaviti našu raspravu o CS50 klijenta i C i što to znači da stvarno programu. Ali prvo, samo par vihoru najavama. Sekcije početi ove nedjelje, a prvi tjedan je uvijek malo brzog starta, jer smo upravo dobili u Vaši sekcija forme. Mi radimo isto, sada, s nastavnim bližnjima, sada da znaju svoje rasporede, tako da smo s ciljem, prema Subotnje jutro, pratiti s vama s vašim dijelu Raspored i TF. Shvatite da će početi sljedeći dan, nedjelja ili ponedjeljak ili utorak. A onda ćemo ugostiti sekcija promjene kao što su nastali u danima koji dolaze. Radno vrijeme, u međuvremenu, su, opet, večeras, 8:00 do 11, u Annenberg, kao sutra. Iako se problem setovi su uglavnom zbog četvrtkom u podne, shvatite da ste i do pet dana kasni provesti, stoga dostupnost radnog vremena četvrtkom ako ste novac u jednom od tih kasnih dana, a time i dostaviti nešto je u petak. Dopustite mi sugeriraju da Scratch je među više zabave, među više niske ključni problem seta. I ja bih objesiti na tim kasnim dana, strateški, samo za kasnije u semestru kad život počinje da se na putu s midterms i druge klase. Problem Set 1, u međuvremenu, će biti objavljen na tečaj je Web stranica ovog petka, kao što će biti u toku hoda kroz video, koji će biti sniman u 14:30 u petak , a zatim objavljena putem sljedećeg dana. Tako smo završili u ponedjeljak. Želim - zapravo, jedan napomenuti ovdje. Budući da su razredi - jer Sanders nije točno posuditi sama povremeni Q & A natrag i naprijed strašno dobro, mi smo će pokušati nešto malo novo u ovoj godini, pri čemu ako nisi ugodno podizanje ruku ili ste samo radije ne digne ruku u sobi kao što je ovaj, idemo da imaju neke od nastavnih bližnjima i CAS popunu cs50.net/discuss tijekom predavanja. Dakle, ako imate pitanje, jer sam bio posve nejasno o nečemu ili vas zanima o nekim tema, pokušajte ga posting postoji. Tag ga s oznakom Predavanje, a mi ćemo se potruditi danas i sljedeći tjedan - hrapavi pokušati ovo - to teren ili elektronski, on-line, ili ako se osjeća kao da smo trebali stvarno baviti masovno, jedna od nastavnih bližnjima ili CA će podići svoju ruku i pitati anonimno na vaše ime. Dakle, mi ćemo dati ovo probati i vidjeti koliko dobro to radi. No, svim sredstvima, i dalje podizati ruke kao što ste željeli. Dakle, zadnji put kad smo otkrili da je 10% ili jednu desetinu nije, u Činjenica, 0.1, kao što su nas učili prije mnogo godina. To je u stvari, kao što je to vrijednost. No, to nije u potpunosti točno, zar ne? Moramo samo ovo ograničenje u računala pri čemu, ako samo imaju ograničen količinu memorije, RAM, ili više posebno bita, dobro, postoji samo konačan broj stvari koje mogu predstavljati. Na primjer, ako imamo broj nula, a mi želimo da predstavljaju u binarnom pomoću osam bitova, gdje je malo, opet, nula ili jedan, možemo ga predstavljaju kao 00000000. I to je nešto nepotrebno preopširan. Baš kao u decimalnom sustavu u stvarnom svijetu, općenito, ako želite napisati broj 123, što ljudi vjerojatno ne pisati 00000123 iako, funkcionalno, to je isti broj. Mi samo kap vodeće nule, da se tako izrazim. U binarnom, možemo učiniti isto. Binarni i nula, nula i binarni je samo nula. Vi samo trebate jedan malo. Ali opet, najčešći jedinica mjere u svijetu računalstva je bajtova, osam bita. Samo zato što jedan zalogaj, prilično beskoristan. Osam bitova, nije strašno korisno, ali barem to je više korisniji od jedne mjerne jedinice. Tako je s osam bita, obično ćete predstavljaju binarni. Dakle, ovdje imamo brojeve nula, jedan, dva, a onda, kao Nate je učinio u našem videu prošle srijede, možemo nastaviti računajući do sedam, osam. A onda, ako ćemo koristiti sve više i više bitova, mi može računati do beskonačnosti. Ali ako imate samo ograničen broj tih bitova, kao što je slučaj u bilo kojem računalnom sustavu ili čak raketa sustav, dobro, doista imate samo konačnih iznosa preciznosti. Dakle, ako želite da predstavljaju broj kao 0,1, dobro, Računalo mora izabrati. A ako ima samo konačan broj brojeva što može predstavljaju, može doći blizu 0,1 za vas, ali to ne može nužno dati vam točno vrijednost koju želite. A to je samo jedan od izazova računala, ispod poklopca motora, srećom. Kao što smo krenuti dalje u semestru, te niža razina Detalji postao mnogo manje zanimljiva, ali sigurno primjena tih ideja može imati neki vrlo stvarni svijet posljedice. Jedan od njih je malo zabavno. Kako mnogi od vas su vidjeli iznenađujuće Space film Office? Ako niste, to je vaš neslužbeni zadaća za tjedan dana. No, u uredski prostor, na novaci u tom filmu uzeti Prednost upravo ovom idejom, ali oni zapravo ukrao ona iz drugog filma koji bi mogli imati vidio, čak i godinama prije. Pa neka mi vam dati nekoliko sekundi ovog prikolicu od Ova nevjerojatna film i to je jako puno akademski relevantno. [Igra film] Zapravo sam se promovirala. Ja mogu programirati virus koji će parati da stavljajte off veliki put. Pa, kako se to radi? Svaki put ima bankovne transakcije u kojoj je interes kompjutorska, postoje tisuće dan, računalo završi s tim frakcija centa. Ali neću to učiniti ništa protuzakonito. Ilegalna? Samir, ovo je Amerika. Morate Kunem se Bogom. Ako nitko ne zna o tome, ali nas, u redu? No članovi obitelji, nema djevojke, nitko. [Nečujan]. Ne brinite, čovječe, neću nikome reći bilo. [MOVIE ZAVRŠAVA] U redu, pa možda sam pronašao ovaj film bolji od većine ljudi ovdje, ali u svakom slučaju, virus koji su bili pokušava stvoriti - te u filmovima, bilo da bih nazvati nešto virusa, to je općenito nije zapravo virus. To je samo program koji je netko napisao nešto učiniti. I u ovom slučaju, dečki su pokušali napisati program da je iskoristio svoju tvrtku pod nazivom Innotech je računalni sustav, pri čemu Računala, također, čak i kada je to dolazi do novca, ne može nužno predstavljaju novac precizno. Dakle, iako ste možda 0,10 dolara u svoj bankovni račun, 0,10, dobro, računalo zapravo možda mislite da imate to mnogi centi u svoj bankovni račun. I tako ono što ti dečki su teže učiniti - i oni ukrao ideju, ispada iz Superman III, gdje Richard Pryor učinio istu stvar - oni su u suštini pisanje programa koji teže da se svi prateći brojevi, svi od sitnih, sitnih, sitnih frakcija penija, i siphoning one off, tako da su ljudi samo misao, oh, to je samo 0,10 dolara tamo, ali sve one prateći brojevi na kraju zbrojiti. Dakle prekrasnom idejom i osvetio urnebesno u tome posebno film. No, u stvarnom svijetu, također, postoji puno više u vezi implikacije ovih svašta. A jedan od razloga da se upustim u području računala Znanost je, opet, njezina primjenjivost ne tehničkih znanosti sama, ali samo za druga područja. Dakle, ovo je manje raspoložen pogled na ono što može poći po zlu, ali to je također prilično otvara oči, mislim, kad je u pitanju razumijevanje kako točno sveprisutna tehnologija poput računala i programiranje i ovih dana, u obliku softvera. Dakle, ovo Sljedeći isječak je samo oko šest minuta, nastavlja gdje smo stali zadnji put, ali nam omogućuje da pogledate malo više u dubinu na jednom takvom od tih pitanja. Dopustite mi da preskočite naprijed tamo gdje smo stali, koji je bio ovdje. I mi smo dio dva od dva, za oko šest minuta ovdje. [PLAY MOVIE] Udario moderne raketne tehnologije. Godine 1991, s početkom prvog Zaljevskog rata, Patriot raketa doživjeli sličnu vrstu Broj pretvorbe problem. I kao rezultat toga, 20 osoba, 20 američkih vojnika, ubijeno a oko 100 ranjeno, kada Patriot, koji je trebao za zaštitu od dolaznih Scuds, nije uspio ispaliti projektil. Kad Irak napao Kuvajt i Amerika pokrenula Desert Oluja je početkom 1991, Patriot raketne baterije su razmještene kako bi zaštitili Saudijsku Arabiju i Izrael iz Irački Scud raketnih napada. Patriot je američki srednjeg dometa zemlja-zrak sustav, proizveden od strane tvrtke Raytheon. Veličina Patriot interceptor sama, riječ je o otprilike 20 metara dug i težak oko 2.000 kilograma. I to nosi bojevu glavu od oko - Mislim da je to otprilike 150 £. A bojne glave sama je visoka eksploziv koji ima Fragmenti oko njega. Kućište glavom je zamišljen kao sačma. Rakete su provedena četiri po kontejneru i prevezeno polu prikolicu. Patriot proturaketni sustav seže barem do 20 godina. To je bio izvorno zamišljen kao raketa protuzračne obrane na pucati dolje neprijateljske zrakoplove, u prvom Zaljevskom ratu. Kada je taj rat došao zajedno, vojska želi da ga koristiti za pucanje dolje Scuds, a ne zrakoplova. Air Force Irački nije toliko problem, ali vojska bio zabrinut Scuds. I tako su pokušali nadograditi Patriot. Presretanje raketa neprijatelj putuju na MACH 5 ide se dovoljno izazovan. No, kada je Patriot je prevezena u službu, vojska nije bio svjestan nekog iračkog izmjene koje je napravio njihov Scuds gotovo nemoguće pogoditi. Ono što se dogodilo je Scuds koje su dolaze u bilo nestabilno. Oni su klimatav. Razlog za to je bio Iračani, kako bi dobili 600 kilometara iz 300km raspon projektila, uzeo težina od prednjeg glavom i napravio bojne glave upaljač. Tako sada Patriot pokušava doći na Scud, a većina vrijeme, velika većina vremena, to bi samo lete po Scud. Nakon Patriot sustava operateri shvatili Patriot promašio svoj cilj, oni detonirao Patriot bojevu glavu. Da biste izbjegli moguće gubitke, to je dozvoljeno da padne na tlo. To je ono što većina ljudi vidjeli, kao velike vatrene kugle na nebu, i neshvaćen kao presreće od Scud bojevih glava. Iako, na noćnom nebu, Patriotsi pojavio se uspješno uništili Scuds, na Dhahran, nije moglo biti pogreška o njegovu učinkovitost. Tu, Patriot je radarski sustav izgubio trag dolazni Scud i nikada pokrenut zbog do programskog mana. To je bio Izraelci koji je prvi otkrio da je više Sustav je uključen, to je veća diskrepancija vrijeme postao, zbog sat ugrađen u sustavu računala. Oko dva tjedna prije tragedije u Dhahran, The Izraelci izvijestio da Ministarstvo obrane da je Sustav je gubljenje vremena. Nakon što je oko osam sati rada, oni su primijetili da Sustav je postao osjetno manje točne. Ministarstvo obrane je reagirao rekavši sve baterije Patriot da ne napuštaju sustave na dulje vrijeme. Oni nikada nije rekao ono što je dugo vremena bio - 8 sati, 10 sati, 1000 sati. Nitko nije znao. Patriot baterija stacioniran u vojarni u Dhahran i njegov manjkav unutarnji sat je bio na više od 100 sati na noć 25. veljače. To prati vrijeme do točnosti od oko desetine sekunde. Sada desetina drugi je zanimljiv jer je broj to se ne može izraziti u binarnom, točno, što znači to se ne može izraziti točno u bilo Suvremeni digitalni računalo. To je teško vjerovati. Ali ovo koristiti kao primjer. Ajmo uzeti broj trećine. Jedna trećina ne može izraziti u decimalnom, točno. Jedna trećina je 0,333 za odlazak na beskonačnost. Nema načina da to učinite s apsolutnom točnošću u decimalama. To je točno ista vrsta problema koje se dogodilo u Patriot. Što duže sustav trčao, što je još gore vrijeme pogreška postala. Nakon 100 sati rada, pogreške u to vrijeme bio samo oko jedne trećine drugi. No, u smislu cilja projektil putuje na MACH 5, to je rezultiralo praćenje pogrešaka više od 600 metara. To će biti fatalna pogreška za vojnicima na Dhahran. Ono što se dogodilo je Scud lansiranje je otkriven rano upozorenje sateliti i oni znali da je Scud je dolazio u njihovom opći smjer. Oni nisu znali gdje je dolazio. To je sada do radarske komponente Patriot sustav, braneći Dhahran, locirati i pratiti dolazni neprijatelj projektila. Radar je jako pametna. Ti bi zapravo pratiti položaj Scud, a zatim predvidjeti gdje će vjerojatno biti sljedeći put radarski poslao puls van. To je bio pozvan u rasponu vrata. Zatim, nakon što je Patriot odluči dovoljno je vremena prošlo da ide natrag i provjerite sljedeću lokaciju za to otkriven objekt, to ide natrag. Dakle, kada se vratio na krivom mjestu, onda ne vidi prigovoriti, i to odluči da nema objekt. To je lažna detekcija i padne sa staze. Dolazni Scud nestao iz radaru. I sekundi kasnije, udario u vojarni. The Scud ubili 28, a bio je posljednji otkaz tijekom prvi Zaljevskog rata. Tragično, ažurirani softver stigao u Dhahran sljedećeg dana. A softver mana je fiksna, zatvaranje jednog poglavlja u uznemiri povijest Patriot rakete. Patriot je zapravo skraćenica za "phased Array praćenje Presresti od Target. " U redu, tako mnogo žalosni ishod nije sasvim razumijevanje ovaj svijet. I takeaway, stvarno, iz filma je da rješenje tamo je ponovno pokrenuti sustav obrane proturaketne svako jednom u neko vrijeme. I tako opet, jedan od ciljeva ovog kolegija, svakako na više skromnom skali od tih aplikacija, je stvarno otvori svačiji oči na točno kako idete o Strojevi za izradu učiniti ono što želite ih učiniti i kako idete o da radi ispravno, a usput radi dobro, elegantno, i tako dalje. I tako danas, ajmo zaroniti malo više od toga, ali tako da mi ne ide prebrzo, posebice za one manje ugodno, ali isto tako da možemo zadržati interes one ugodnije, neka je samo brzo početi s malo od rekapitulacija neke od tih ideja. I opet, pitajte dalje, kako u osobi ili online, ako imate pitanja tako da možemo zadržati sve na istoj stranici. Dakle CS50 aparati, brz korak natrag, je ono, u svojim riječima? To je u redu ako nemate pojma što te riječi mogu biti još. [Nečujan] Ok, tako univerzalno sučelje za - da možemo sve dijeliti. Apsolutno. Tako smo mogli, na primjer, reći da ide na neke web stranica, preuzimanje datoteka ovaj softver za Mac OS. Preuzmite ovaj softver za Windows, konfigurirati u na taj način i da. No, stvarnost je tada ćemo izvoditi u bezbroj tehničke podržavaju pitanja. I također ovih dana, mnogo od onoga što je učinjeno strani poslužitelja, u svijetu računalstva, posebno kada je u pitanju web development i web aplikacije temeljene, zapravo vrlo često radi na Unix ili Linux računala, za razliku od Macovi ili Windows računala. Dakle, među odlika, onda, koristeći ovu stvar zove CS50 Appliance je svi ćemo imati istu okolinu. Dakle, svatko je na istoj stranici bez obzira na hardveru koji vam došao na kampusu s, ali će također biti brbljanje u točno Isto okruženje koje ćete koristiti prema Semestar je kraj, kao i za izradu web stranica, kao iu Budućnost za stvarnim aplikacijama istih. Dakle, konkretno, CS50 Appliance je besplatno komad softver koji vam omogućuje da pokrenete drugi operativni sustav, Linux, u ovom slučaju, na vašem računalu, u prozoru. Sada ne možete samo preuzeti aparat. Trebate program s kojim se igraju ili pokrenuti uređaj. A taj komad softvera je općenito poznat kao hypervisor. Hipervizorskog dolaze u obliku proizvoda kao što su VMware, Virtualni Box, Paralele. Sve vrste tvrtki čine softver, i slobodan i komercijalne, podjednako. Što ćete vidjeti u problemu Set 1 su upute o tome kako dobiti besplatni softver s kojim se pokrenuti CS50 Appliance. A kada to učinite, imat ćete, u prozoru na vašem Mac ili PC, desktop okruženje koje izgleda baš tako, gdje je ima početni izbornik poput stvar donji lijevi kut. To je u kući mapu, ili home direktorij, u gornjem lijevom postoji, kanta za smeće, i tako dalje. Tako ćemo zafrkavati osim potrebne pojedinosti što idemo. Ali sada počnimo zaroniti u C. Dakle, C je ovo programski jezik, sličan u duhu Scratch, ali daleko manje grafički, ali ironično, daleko snažnije jednom kad se pamet s njom. Dakle, u C, pišemo programe pisanjem izvornog koda, što je ovo Engleski poput sintakse, slično čarape dokaz da smo zadnji put koji vam omogućuje da izraziti sebe dosta precizno, ako arcanely, na računalo. Pa kakav proizvoda softvera ti zapravo treba pisati programe na jeziku poput C, na temelju naših razgovor u ponedjeljak? [Nečujan] OK, trebate samo tekst editor. Ne trebate bilo koji poseban softver po sebi pisati programe. Vi samo trebate tekst editor kao što je Notepad, na Windowsima, TextEdit na Mac, ili nešto što se zove gedit, u svijetu Linux, koji ćemo koristiti ovdje. I to je to, pisati programe. No pisanje je samo polovicu jednadžbe. Nakon toga je potrebno da ih pokrenuti. No, kako bi se pokrenuti programe - ne možete pokrenuti izvorni kod. Umjesto toga morate učiniti ono što za njega prvi? Da. David J. MALAN: Morate prevesti ga. A, netko drugi, sastavljanje izvornog koda znači - [Nečujan] David J. MALAN: Točno. Ga Prevođenje na nula i one. Zbog svih nas, ovih dana, imaju računala koja imaju CPU, Gotovo svi koji su napravljeni od strane tvrtke pod nazivom Intel i Intel Inside, znači da je to mozak unutar vašeg računalo, poznat kao CPU-a. A jedna od stvari koje činimo da mozak, to zna kako razumjeti obrasce nula i one. To zna što uzorak bitova predstavlja dodatak, što uzorak predstavlja oduzimanja, ono uzorak bitovi predstavljaju ispis i stvaranje zvučnim zvuk. Dakle, u kratko, CPU, zajedno s operativnim sustavom, što je komad softvera koji radi na vrhu CPU, da se tako izrazim. Zajedno, ta dva komada znati kako pokrenuti programe koji mi ljudi pisati. Dakle, ako sam otići u CS50 Appliance ovdje, moram otvoriti gore tekst editor, a ja mogu pristupiti ovo u nekoliko načina. Ja mogu ili ići na Izbornik, Programiranje, i onda mogu odabrati - Nope, ne da izbornik. Ja mogu ići na Accessories / gedit ovdje otvoriti moj mali tekst editor. Ili jednostavno, ja mogu kliknite ovaj mali ikonu na dnu lijevom kutu. A sada ću dobiti ovu sredinu ovdje. To je prilično podsjeća na jednostavan tekst editor, sa samo jedan ili dva razlike. U vrhu, gdje je kursor treperi sada, ovo je mjesto gdje Ja mogu početi pisati svoj kod. U dnu je ta stvar zove prozor terminala. A što vrste stvari mogu učiniti u ovom takozvani terminal prozor? [Nečujan] Ok, tako ću pokrenuti naredbe. A neke od naredbi smo vodili u ponedjeljak bili malo grobni na prvi, ali li za popis, cd za promjenu direktorija, rm, za uklanjanje. Dakle, to je svojevrsna old-school način Kretanje računalo, koristeći samo tipkovnicu i tekstualnih naredbi, a ne, općenito, pomoću miša. No, vidjet ćemo, prije dugo, to zapravo nam daje malo više snage i malo više preciznosti s kojom se izraziti. I onda ovdje na lijevoj strani, samo mi ćemo vidjeti, kao što smo početi pisanje softvera, malo sažetak Program koji smo napisana na gornjem lijevom kutu. No, vidjet ćemo da je opet ne zadugo. Tako ćemo učiniti nešto prilično jednostavan ovdje. Neka me prvi ići naprijed i idite na File, Save, a ja sam samo ide kliknuti na jharvard ovdje, više na lijevoj strani, a jharvard je, opet, ime za moj dom mapu, moje osobne datoteke, mene, sada je John Harvard, kao i sve vas uskoro će biti John Harvard u ovom okruženju. On je dobio ovu Home imenik, Moji dokumenti i tako dalje, da želim spasiti, sada, ova datoteka u. Dakle, ja ću to nazvati hello.c. Onda ću otići naprijed i kliknite Spremi, a što sad imam ovdje je kartica zove hello.c, toliko kao drugi tip urednika. Pa sada neka mi ići naprijed i početi pisati program. int main (void). A onda sam učinio zadnji put, printf, za ispis formatiran, ("Hello, World!" );. Gotovo završiti. Ali ja sam nedostaje nekoliko detalja. Ono što nedostaje iz ovog programa da sam stvarno potrebno za to je zapravo sastaviti? Da. [Nečujan]? David J. MALAN: Da, pa trebam uključiti standard I / O biblioteka. Dakle, to treba ići iznad glavni, tako da sam samo ću napraviti neki prostor za njega tamo. I ja ću to učiniti # include . I primijetiti angled zagrade tamo. I kao stranu, gedit je malo user friendly, ako ponekad malo konfuzno, u smislu da pokušava pomoći vašem Oči primijetiti ono linije s kojim. Dakle, činjenica da je moj kursor je tik do ove kutno Nosač, primijetiti kako se to isticanje drugog kutno Nosač plus ovo. A to je samo privući moju pozornost na činjenicu da sam imaju simetriju. I simetrija u programiranju je općenito dobra stvar. Isto tako, ako sam premjestiti moj kursor do kraja, primijetiti kako vitičastih zagrada redati pokazati da, da, imam otvoren jedan i zatvoreni jedan, da tako kažemo. U redu, a ja mogu napraviti jednu drugu stvar. To nije strogo potrebno, ali dobra praksa, kako kažu povratak 0. A povratak 0 ne ono što za nas ovdje? Ili znači što? [Nečujan] David J. MALAN: Ali ništa ne valja. I iskreno to je teško za mnogo pogriješiti u programirati ovaj kratki. Dakle, ja sam samo biće super eksplicitno da je sve dobro. Ja, čovjek, kad sam pokrenuti ovaj program, vjerojatno neće nikada vidim da 0. Općenito, ovi brojevi koji su se vratili iz glavne samo stražnji glave prema ljudima kada nešto pođe po zlu. A ti se malo pop-up rekavši pogreške sustava, jedan, dva, tri, ili bez obzira na broj je da je zapravo vratio. Tako nešto drugo krivo s tim? [Nečujan] David J. MALAN: Dakle, to nije toliko funkcionalna pogreška ali estetski jedan. Vjerojatno sam trebao staviti u newline karaktera tamo kraj ovog niza, tako da smo zapravo pomicanje kursora sljedeći redak, a program samo izgleda malo ljepše. Dakle, sada me pusti do mog prozora terminala i zoom natrag u. A ova stvar ovdje, to se zove brz. To samo me podsjeća tko sam ja, jharvard @ aparata, gdje Uređaj je naziv računala sam na. U zagradama je to tilda, migoljiti simbol, koji predstavlja što? PUBLIKA: Početna katalog. David J. MALAN: Početna katalog. Dakle, to je samo skraćeni zapis za reći da su u vaš osobni folder gdje sve svoje datoteke ići po defaultu. Tako sada, ovdje, ja mogu upisati ls za popis. I jedino što ovdje vidim u ovom trenutku je hello.c. I to je dobro, jer sam upravo to napisao. Pa neka mi ići naprijed i ne bi pozdraviti. I primjetiti nisam tipkati napraviti hello.c. Umjesto toga, ja sam samo tipkati osnovni naziv datoteke, halo. I da, kao što smo vidjeli u ponedjeljak, samo će zaključiti da želim c. datoteka. Dakle, sada sam upisali bi pozdravio. Sada vidim ovu prilično dugo naredbu, a nastavit će Vidjevši to ponovo i ponovo. Ali da bude jasno, zveka, riječ koja je upravo pojavio, da je stvarna prevodilac. Provjerite je samo graditi alat. To je samo više user friendly program koji me spašava, u dugoročno, iz potrebe da tip iz nevjerojatno dosadan dugo naredbe kao što je to jednom. Dakle, da bi mogao pokrenuti zveka ručno. Ti bi mogao upisati sve to ručno. Samo se jako dosadan. I tako bi je samo program koji pojednostavljuje naš život i radi složenije naredbe za nas. U redu, tako da sada ono što bi datoteka trebala sam u mom trenutnom direktoriju? Ne samo hello.c, ali i bok. Dakle, ako želim pokrenuti halo, podsjetiti da kažem dot crtu, gdje dot znači ići u trenutačnoj mapi, gdje god su, a zatim pokrenuti program pod nazivom Pozdrav, i doista, sada, Imam Hello World. U redu, bilo kakva pitanja na tijek ili sintaksa ono što smo upravo učinili? U redu, tako da ćemo uzeti stvari u usjek opet. Dakle, ovo je underwhelming samo napisati program koji samo ikada kaže halo, svijet. Tako smo ga mijenjali, u ponedjeljak, kako kažu, halo, David. To je malo više osobni, ali jednako teško kodirana kao Prva verzija. Dakle, nije sve što je uvjerljiv. Ali postoji, u C, funkcije sigurno osim ispis, funkcije koje vam doći korisničkog unosa. I način na koji smo to učinili, drugi dan, bio je kako slijedi. Prije nego što sam zapravo isprintati nešto, prvo sam dobio nešto od korisnika. Pa neka mi to učiniti opet. Gudački a, gdje je samo proizvoljna ime, ovdje, za string, jednako GetString. Dakle, ono što je GetString? To je očito dobiva niz, na temelju svoje ime. Ali što je to, više tehnički? To je funkcija. Dakle, to je funkcija koja ne dolazi s C po sebi. CS50 osoblje to napisao. I tako bi koristili ovu, ne možete samo su stdio.h, Također je potrebno uključiti što? Da. Dakle cs50.h, što je samo datoteka smo pisali prije nekoliko godina. Mi ga instalirali na aparatu za vas uz sve standardne datoteke. I tako u ovih prvih nekoliko tjedana razreda, koristit ćemo to samo kako bi se pojednostavio proces radi vrlo osnovni stvari kao što je dobivanje korisničkog unosa. Jer kao što ćemo vidjeti u nekoliko tjedana, uzimajući korisnički unos u jezik kao C je zapravo iznenađujuće složena, Posebno zato što ne znaju unaprijed, obično, kako puno stvari korisnik će se upisati u. A kad ne znaš koliko podataka za očekivati, ne znaš znati koliko je memorije izdvojiti. A ako zaista imati optužni korisniku koji je pokušavao zasjeći svoj sustav, srušiti računalo, dobro, općenito prva metoda napada je, baš kao što sam učinio na Ponedjeljak, upišite cijeli dug niz slučajnih znakova, Unesite hit, i vidjeti što razbija. Jer općenito, ako program pauze, koja nagovještava sigurnosni propust, potencijalno. To svakako nagovještava vas, programer, nakon što je pogreška, ali više opasno, možda ste napravili sigurnosti vezane pogreška, i općenito vidjet ćemo da to je kako su strojevi ugrožena na ovaj dan, oboje u svijetu weba i programa na naredbenog retka, kao što je ovaj. U redu. Dakle, niz je jednak GetString. Dakle, konkretno sada, što znači linija 6 učiniti ovdje? Dakle, funkcija na desnoj strani dobiva niz, traje koliko argumenti? Ok. Dakle, nitko. Malo razum ček. Argument, opet, samo ulaz u funkciji mijenjati njegova zadano ponašanje na neki način. No, u ovom slučaju, ne želim mijenjati ponašanje GetString. Samo sam htjela da biste dobili niz. Pa sam stavio ništa u zagradama, a zatim sam stavio zarez markiranja kraj retka koda. Sada, znaka jednakosti ne znači jednak, sama po sebi. To znači da zadatak, što znači staviti što god dobiva outputted na desnoj unutarnjoj god je na lijevoj strani. Dakle, na lijevoj strani, možemo reći da smo proglasio Niz se zove e. I točnije, mi smo dodjeljuje memoriju unutar koje ćemo staviti bitova koji predstavlja slijed likovi. No, za danas smo izdvojili ili proglašen niz. U redu. Dakle, sada kada sam to učinio, želim priključiti u vrijednosti e, a ne vrijednost Davida. Dakle, to je krivo zašto? Dakle, ovo je samo doslovno teško kodirana je. To je za reći "bok, a", što nije ono što ja želim. Dakle, ja to mogu. Posto znak je rezervirano, ali sada moram proći u ispisati drugi argument. Sjetite se da su argumenti funkcije odvojeni zarezi, pa sljedeći zarez ovdje sam stavio nakon toga pismo je. I u tom kontekstu sada, a je varijabla, i printf, Po primitku ta dva ulaza - string na lijevoj i ime varijable s. na desno - to će se priključiti potonji u bivši za nas, a samo isprintati lijep lijep niz koji sadrži bez obzira na to je da smo upisali u. Dakle, pokušajmo to. Idete ići naprijed i smanjivanje, natrag na moj prozor terminala. Povećavanje na dnu ovdje. Ponovno bi pozdravio. Jeka Čini se da su reprizu. Ja ću upisati. / Halo, Enter. Ništa se čini da se događa, no to je u ovom retku da mogu upisati nešto poput Natea, Enter, a sada imamo Pozdrav, Nate. I ja mogu to učiniti opet s Rob, i tako dalje. Dakle, nadamo se da sada ovaj program se ponaša kao ja namjeravam. Sada, nije sve što je user friendly. Nemam pojma što se očekuje od mene. Dakle, mi sigurno može počistiti ovo gore malo. Dopustite mi vratiti se ovdje, i umjesto da samo ronjenje i pita korisnika za niz, dopustite mi reći izričito Korisnik ono što sam očekivao. Dakle printf ("Unesite string:" ); Dakle, nema varijable ovdje. No posto znakovi. Samo jednostavna engleski izraz. Dopustite mi sada ići na dno i ovdje ponoviti moj program. Ali ništa ne čini da su se promijenile. Zašto? Moram ga rekompiliranje. Tako jednostavno pogreška za napraviti. No, morate ne samo spremiti datoteku, ali rekompiliranje program. I tako, ako sam ponovno pokrenuti čine halo, sada zveka radi. Sada mogu trčati. / Bok. I sada vidim "Unesite string:". Ok. Sada je malo više user-friendly. Nate, Enter, halo, Natea. Pa, ajmo probati ovo opet i početi razmišljati o kutu slučajevima. Dakle, baš kao u nule, ti si potaknuo ili su se poticati u spec. da vrsta razmišljati o tome što bi moglo ići krivo ako ne predviđaju sve korisnik može učiniti. Nedostaci, dakle, moglo uslijediti. Dakle, unesite string - što je kutak ovdje slučaj? Što je scenarij da sam, programer, možda neće imati Predviđeno? Da. Ok. Pa što ako sam upisati u velikom broju kao što je ovaj? U redu. Dakle, to još uvijek radi. Gramatically nema smisla. Ali barem program radi. Što je još kutak slučaj? Nešto nisam očekivao. Da? Ok. Tako smo mogli učiniti nešto poput jako, jako velikom broju. Dakle, neka je to učiniti ovdje. Dopustite mi smanjili za drugi, neka mi istaknuti. Ne možete kopirati i zalijepiti ovdje dolje. U redu. Dakle, ja ne mogu kopirati i zalijepiti u ovom terminalu prozora, pa ćemo samo ga simulirati. Dopustite mi da smanjivanje, idući u obaviti. Neću to učiniti za predugo, jer to neće zapravo break u ovom programu. Ali, to bi mogao. Upišite. Ali to nije. U redu. No, to je pravi kut slučaj. I jedini razlog da ponašao korektno, tako da govoriti, jer CS50 funkcija GetString je zapravo dizajniran ispod haube, kao što ćemo vidjeti u nekoliko tjedana, automatski dodijeliti više i više RAM-a, sve više i više memorije od operativnog sustava, kada to shvati, vau, stvarno ste upisali u nešto prilično dugo. Sada, to je malo bijelog laži. Ako mi zapravo zastao već neko vrijeme i ja upisali u nešto poput 5000000000 znakova na tipkovnici ovdje, ili stvarno hit copy-paste dosta smo vrlo vjerojatno mogla prouzročiti da se program za srušiti. Samo malo teže simulirati da je s konačnim iznos od vrijeme. Što je još kutak slučaju možemo pokušati? Da? Da. Pa zašto ne bismo odgovorili ništa? Dakle, mi zapravo moramo nešto poduzeti, jer inače Program će sjediti tamo treperi cijeli dan. Ali ako sam samo pritisnite Enter - OK, sada, još uvijek izgleda u redu. Nije li srušiti, ali možda tu je sada prilika da se početi provoditi strože programa koji zapravo provjerava. A ako je string, rečenica, riječ da sam upisali u ima dužinu 0, dobro, možda sam trebao vikati na korisnik, ili mu reći ili joj unijeti string opet, tako da je mi smo zapravo dobili ono što izgleda kao ispravno ponašanje, a ne Samo potpuni nadzor na moj dio. Pitanje u leđa? Decimalni broj. Tako bismo mogli pokušati da, previše. 1,10000005. Čini se kao da će se raditi samo zapravo ok. I to je zapravo očekuje. Iako možda smo upisali taj broj postoji, ili veći broj ranije, shvatiti da kad smo tipkati korisnika ulaz, a mi smo pomoću GetString funkciju, ne obzira da li ono što sam tipkati izgleda kao broj. Podsjetimo da je prema ASCII, sve na svom Tipkovnica ima brojčanu vrijednost koja se može preslikati na lik, char. Dakle, u ovom slučaju, iako sam možda upisati broj, Računalo će se razmišljati o tome, da se tako izrazim, kao niz - nešto što izgleda kao broj, ali je zapravo ne broj. No, to je zapravo savršen segue, jer sada možemo zapravo prijelaz na pisanje programa koji koristiti i druge vrste podataka. Dakle, osim pomoću znakova, odnosno, osim pomoću žice, shvatiti da imamo i druge vrste podataka u C, kao iu drugi jezici. Char, kao ime sugerira, je samo jedan znak. Plovak je Krajnja vrijednost, a to je samo fantazija način da se kaže pravi broj - nešto što ima decimale točka u njoj s nekim brojevima na lijevo i / ili desno. Int je cijeli broj, koji je samo broj kao 123. I sada više zanimljivo su stvari poput kontre. Što ćemo reći dvaput bio zadnji put? To je 64, u pravu. Dakle, dok je obično float je 32-bitni - tako da je ovo dugo u sjećanju, koristi 32 nula i one na predstavljaju vrijednosti - dvostruka doslovno dvostruko, što znači da možete ili predstavljaju veći broj, ili možete predstavljaju preciznije brojeve. Dakle, možete imati više brojeva nakon decimalne točke, ali kao kolega rekao u videu, čak i nešto jednostavno konceptualno kao trećina ne može predstavljati upravo računalo, jer na kraju vam ponestane bita, a Stoga možete učiniti samo .33333333 toliko puta, na kojem trenutku imate samo reći da sam iz reprezentacije prostor, moram samo nazvati dan i zastupanje pomalo neprecizno sviđa. I dugo dugo - glupo ime, ali to je zato što je vrsta podataka poznat kao dugo u C koji slučajno je često 32 bita, baš kao i int je 32 bita, ali dugo dugo je općenito 64 bita. Dakle, to samo znači da može predstavljati veći brojevi od toga. U redu. Dakle, ako smo zapravo žele započeti predstavljajući stvari, mi Možda ćete morati više sofisticirane vrste, i to je razlog zašto smo niz. Dakle, u CS50 knjižnici, da datoteka zove cs50.h, mi smo zapravo proglasio vrsta podataka, da se tako izrazim, zove string, ali niz zapravo ne postoji. To je, opet, jedan od tih slojeva idemo oguliti natrag u tjedan ili dva i baciti ga daleko, a zapravo pogledajte ispod haube na ono string zapravo, i kako se to predstavlja. Mi također idemo pogledati Boolean vrijednosti. Dakle, ono što je bool u kontekstu Scratch? To je istinita ili lažna. Dakle, to je samo vrijednost koja je istinita ili lažna, ili isključiti, 1 ili 0, međutim želite vidjeti svijet. Dakle, u C, zahvaljujući CS50 knjižnici, što pak uključuje još biblioteku ispod haube, imamo pristup bogatu tipa koji se zove bool, koji će doslovno nam omogućiti da dodijeliti vrijednosti true ili false da stvari u programu. Dakle, idemo naprijed i ovdje napisati mali program koji učini nešto uključuje brojeve umjesto. Dakle, neka mi se vratiti na CS50 Appliance, pusti me naprijed i stvoriti novu datoteku ovdje zove - recimo samo da nešto jednostavno, poput math.c. U redu. A sada idi gore na vrhu moj program, ja sam će učiniti i obično - # Include , tako da ja mogu koristiti printf, int main (void) - vratit ćemo se, na kraju, ono što int znači ovdje, što znači void ovdje, ali za sada, samo znam da je morate pokrenuti programe kao što je ovaj. Sada ću ići naprijed i reći nešto malo drugačije - printf ("Daj mi broj:" );. Tada ću učiniti int n = GetInt, jer Ispada GetInt je još jedna funkcija u CS50 knjižnici osim GetString. A sada ću učiniti nešto glupo, kao što je "zahvaljujući za% d, "za decimalni broj, a zatim zarez n i zatim se vratiti 0. Pa opet, povratak 0 ima veze s brojem ja sam pita korisnika za. Samo znači na kraju da su svi, vjerojatno, je dobro. Tako da me pusti do mog prozora terminala ovdje. Dopustite mi upišite napraviti matematiku, ući. I nešto nije u redu. Napravite matematika nije uspjelo. Evo prvi od naših poruka. Zašto? Malo zagonetan, ali - Da. Dakle cs50.h. Pa opet, pogotovo u početku, vi ćete napisati svoj prvi program za pset 1 u dijelovima, u uredu sata, a Iskreno, to će biti velika ponekad ono što ove stvari zapravo govore. Ali shvatit ćete vrlo brzo počnu padati u ćelije pri čemu ovo znači da ste stali jedan od # uključuje na vrhu datoteke. I zveka, prevodilac, vas obavijestili o to govoreći, prilično maštovito, implicitno deklaracija Funkcija GetInt je nevažeći. U redu. Dakle, što to znači? To samo znači da ste implicitno proglasio GetInt u Osjećaj da niste eksplicitno ga proglasio. Da izričito izjavljujem int, morate naučiti Zveka da postoji. A vrlo jednostavno rješenje za to je da ga naučiti po uključujući ove druge datoteke, cs50.h, na vrh datoteci. Jer doslovno, ono # include nema je ona priča zveka prilično ići pronaći datoteku pod nazivom cs50.h, kopiranje, zalijepite automatski u vrhu mog programa za mene, , a zatim pretvoriti izvorni kod za nula i one. No, da bi očito biti vrlo zamorno ako mi ljudi imali ići kopiranje i lijepljenje ove velike datoteke svih vremena, tako # uključiti samo čini sve da se automatski bez muddying moj broj s tuđim knjižnici. A knjižnica je samo još jedan datoteka koja sadrži funkcije i druge stvari koje je netko drugi pisani, da smo utjecati zbog nas samih. U redu. Idemo pokušati ponovno. Napravite matematiku. Upišite. Dobro. Tako da izgleda kao da su radili. Pa neka mi sada pokrenuti matematike;. / Matematike. Unesite daje mi broj, 123. Hvala za 123. Sada ćemo pokušati još corner slučaj. Niz je prilično velikodušan, jer Niz može biti ništa. Može izgledati brojeva, izgledati likovi, izgledati riječima. No int je int. Pa sad, ako sam teško korisnik, i to je govoreći: "Daj mi broj, "što ako ja pokušati učiniti nešto poput 0,1? Pa, to je broj, i to je u skladu s gramatika sam ovdje, ali ispod haube, ja sam od Tečaj pomoću funkcije GetInt. Tako ćemo vidjeti što će se dogoditi. Unesite, pokušajte ponovno. U redu. Dopustite mi biti teško i samo pritisnite Enter ponovo. Enter, Enter. Dakle, sada se čini da GetInt je malo više moćniji od GetString. Mi, djelatnici, provodi na takav način da, ako smo primijetili niste dali nam int - i int je decimalni broj sadrže nule, one, dvojke, trojke, četvero, petero, šestero, Sevens, osmice, ili očnjaci. I to je to. Nema decimalna mjesta, nema znakova, nema interpunkcije. Čini se da ćemo morati surađivati. Pa neka mi probati četiri, pet, šest, i da me prođe. Pa stvarno, da se analni ovdje, vjerojatno sam trebao reći: "Daj mi cijeli "kako bi se prenio na korisnika točno ono što ja namjeravam. Sada ćemo razmišljati o ispod haube. Nećemo pogledati kako cs50.h se provodi danas, da knjižnica. Ali ako ga čuva rekavši ponovo, ponovo, ponovo, ono programiranje konstruirati sam vjerojatno pomoću ispod haube na implementirati da? Dakle, samo petlja, zar ne? Jedan od najjednostavnijih ideja koje smo vidjeli na Scratch. Zauvijek konstruirati, izgraditi Ponovi. Vjerojatno, u ovom programu, ispod poklopca motora, čak i iako je napisan u C, a ne ispočetka, to radi nešto što se zove ekvivalentna zauvijek ako korisnik nije upisali u cijeli broj, recimo ponovo, ponovo, ponovo, ponovo, pa onda napokon kad mi se cijeli broj, onda vam pobjeći iz tog kruga. Dakle, ono što drugi funkcije možemo koristiti ovdje u CS50 knjižnici? Pa, neka vrsta od očitih, barem na temelju vrste podataka koje sada znamo postoje. Proveli smo GetString, GetInt, ali u cijeloj prvi tjedana mandata, također možete koristiti i GetFloat GetDouble i GetLongLong kako bi dobili upravo vrste podataka koje želite. Zbog ključ detalj ovdje je da za razliku od nekih jezika, kao Python i Ruby, gdje se ne moraju nužno proglasiti tip podataka varijable - nemate reći računalo kakav stvari ideš staviti u varijablu - u C, moraš biti uvijek tako precizan. Dakle, ako želite varijablu nazvanu n, komad pohranu da je u ovom slučaju se dogodi da se 32 bita po konvenciji, što moram reći računalu da ti bitovi će pohraniti broj - nije lik, a ne niz, ne plovak. A to rješava problem možemo učinkovito ran u zadnjih tjedan dana. Ako smo koristite nula i one brojeve predstavljaju ne samo brojevi, ali kao i B i Cs, kako u svijetu je Računalo će znati da je ovaj uzorak bitova zapravo predstavlja broj 65, za razliku predstavlja pismo, koji u isto vrijeme, u skladu s ASCII, podsjetimo, bio je ekvivalent za 65? Dakle, ovi tipovi podataka pružiti kontekst s računalom, tako da ne zna je li ta bita treba tumačiti kao int ili kao string. Sva pitanja, a zatim, na ovo? Da? David J. MALAN: Dobro pitanje. Ako uzmemo iz stdio.h, mi spremite datoteku - pusti me do prozora terminala i trčanje napraviti matematiku, zoom i ući - Sada sam dobiti drugu pogrešku, jer sam implicitno izjavljujući ono što funkcionira sada? Printf. Dakle, sada sam stvorio novi problem, čije rješenje je u suštini isti. Trebam staviti to natrag. PUBLIKA: [nečujan] David J. MALAN: Oh. Dakle, ako sam izvaditi - Dobro, da. Dakle, ako sam ukloniti standardni I / O biblioteka je uključivanje gore ovdje, a onda si rekao da sam riješi printf, dobiti osloboditi od printf? Da. Ovo bi trebalo raditi, jer sam više ne koristite bilo - ups. Jesam li samo ležati? Oh, u redu. To neće raditi zbog novog pogreške smo upravo uveden. I ovo je malo više samorazumljivo. U čemu je problem? Neiskorišteni varijabla n. Dakle, to je pogreška rezultat našeg nakon konfiguriran Uređaj se osobito pedantan, stvarno vikati na ti za svaku moguću pogrešku, čak i ako je to vrsta ne-fatalna pogreška ovako - je li to doista tako velika nositi da sam dodijeljen int, stavi broj u njega, a zatim upravo učinio ništa s njom? Dakle, funkcionalno, br. To se neće prekinuti program. To je samo glupo, zar ne? Nema vrijednosti za što pitao za tog broja, pohranjeni to u varijablu, ako ne ide ništa učiniti s njim, da li ga ispisati ili ga spremiti. Dakle, u ovom slučaju, zveka je priznati koliko i to govori nekorištene varijabilne n. Tako možemo popraviti, ako zaista želimo. Ali opet, to nije dobro za programiranje sada. Tako sam mogao to učiniti - ići dolje, dopustite mi da jasan zaslon, napraviti matematiku. To funkcionira. Sada mogu pokrenuti moj program matematike, ima ulaz - dobro, što je loše. Vodi ulaz, i da je sve to ipak, u ovom slučaju. Pa zapravo, pokušajmo jednom drugom kutu slučaj da smo nije misliti ranije. U tom slučaju - ovdje, vratimo se na onaj koji je malo više user-friendly. Pusti me natrag ovdje i pokrenuti učiniti math opet. Joj, što sam učinio krivo? Moram vratiti dalje. Ok. Sada smo se vratili u prvobitno stanje, gdje je sve je nadam se dobro. A sada, ako sam pokrenuti matematiku, 123 čini se da rade. No, to zapravo i nije učinkovita dokaz, samo reci ok, da radi. 789, koji radi. Vrijeme podnijeti. Budući da je drugi kutak slučajeva ovdje. Niz nije stvarno nam puno problema upisom u puno znakova. No, što ako sam upisati u to? Udaranje broj jedan puno, puno ovdje - sve u redu, to je sve malo dosadno, pa idem zaustaviti ovdje, a ja ću udariti Enter. Što, dovraga, upravo dogodilo? Dakle, to zapravo može biti objašnjeno. Dakle, nije to to uzeti kao binarni? Dobra misao, ali ne, to nije činjenica da ga je uzeo kao binarno, jer doista, to je bio samo vrsta slučajnost. Možemo to učiniti opet. Dakle, nema 2 u binarnom sustavu, koji je vjerojatno dovoljno svejedno. Upišite. Dakle, to nije problem. Što još? Točno. Dakle, mislim natrag na ono int zapravo jest. To je 32 bita koji su kolektivno interpretirana kao broj. Ako imate 32 bita, što znači da svaki od bitova može biti 0 ili 1, 0 ili 1. Dakle, to znači da postoje dvije mogućnosti za to malo, dvije mogućnosti za to, dvije mogućnosti za to malo - tako da je dva puta dva puta - tako da je 2 do 32-snage je ukupan broj permutacije nula i one ako imaju 32 rezerviranih mjesta, nula ili one, u ispred vas. Dakle, ako imam dva do 32, Matematički, to je ono što? Dakle, to je puno. To je 4 milijarde kuna, dati ili uzeti. I 4000000000 ne čini da se ono što je tiskana ovdje. U stvari, to izgleda bliže dvije milijarde. No, to nije slučajnost. Činjenica da je računalo krivo protumačena moj veliki broj, moj veliki niz one i onda se moj veliki nizom dvojke, kao otprilike dvije milijarde, je objasnio kako? Tu je kapa na int. Tu je svakako najveća vrijednost koju mogu predstavljati. No, to je obično 4000000000, zar ne? Ako dvije do 32 je oko 4 milijarde kuna, da izgleda kao da je najveći broj. Dakle, ne ostatak, ali dobra misao. Negativni brojevi. Dakle, ako imate 4 milijarde mogućih stvari koje možete predstavljaju s tim različitim permutacija od 32 0S i 1s, dobro, to stoji da je razlog da mi ljudi možda želite predstavljaju ne samo pozitivne integers ali negativni cijeli brojevi. I doista, to je pretpostavka da je C čini. Tako je s 32 bita, što može predstavljati grubo negativna 2 milijardi skroz do pozitivnog 2000000000. I tako, u ovom slučaju, ono što smo stvarno vidjeli samo rub kapacitet naših cijeli broj, a mi imamo, pa govoriti, preplavila cijeli broj. Pokušali smo nagurati više bitova u njemu nego što zapravo može stati. Dakle, krajnji rezultat je da smo u suštini imaju sve 1 bita. Mi smo zrcaljeno svim našim bitova na, mi smo pokušali da predstavljaju Najveći broj moguće, ali to očito nije gotovo dovoljno velika da predstavljaju dvije stvari sam upravo upisali u. Da? PUBLIKA: [nečujan] David J. MALAN: Dobro pitanje. Zašto ne možemo jednostavno predstavljaju da negativna potpisati samo kao lik? Tako smo apsolutno mogli, a mi onda mogao spasiti dodatni zalogaj. No, još uvijek si idući u morati zastupati tu crticu, a to će vas koštati barem nešto, vjerojatno malo. Tako da, mogli bismo imati 32 bita koriste za naš broj, ali sada moramo još malo koristi za naše crtica simbol, znak minus. Tako sada imamo 33-bitne vrijednosti, koje smo mogli učiniti, ali to je samo ne onako kako je učinjeno. Napravili smo presudu poziva godina, 32 bita je vrsta jedinica mjere ovdje. Tako ćemo koristiti jedan od tih bitova učinkovito predstavljaju negativnosti, a 31 bita da predstavljaju broj. Ostala pitanja? U redu. To je puno. Zašto ne možemo ići naprijed i uzeti našu pet minuta pauze ovdje? U redu. Pa opet, ne prenaglasiti matematičke aplikacije programiranja, Ajmo iščupati s ovog jednog primjera prije nego što smo preseliti u drugim tvorevinama, samo zato što će ilustrirati nekoliko zajedničkih točaka spoticanja na neke od osnove kada je u pitanju pisanje programa. U ovom slučaju, radi aritmetickih izraza koji imaju neke Zanimljivo relevantnost sintakse. Dakle, ovo je samo formula s kojima možemo pretvoriti Temperature od fahrenheit do Celzija. Ako se ne sjećate, to je samo formula. Dakle, ako smo priključiti Fahrenheit vrijednosti od 32 stupnjeva, što je smrzavanja, to će biti 32 minus 32 je 0, i doista, 0 u Celzija je također smrzavanja. Tako brzo razum ček postoji - da je upoznat formula. Pusti me preko aparata, ipak, i početi pisanje programa koji se zove, kao što su, f2c; "Fahrenheit na Celzija dot c ". A gore na vrhu ovdje, ja ću krenuti s # include stdio.h, i ja ću učiniti int main (void), a opet, vratit ćemo se u budućnosti kao što int znači postoji i ono void znači da postoji. I sada neka mi ići naprijed i provoditi program koji suštini to čini pretvorbe za nas. Dakle printf, recimo, temperatura u Fahrenheit. I onda neka mi ići naprijed i dobiti vrijednost od korisnika. Kakve vrijednosti trebam dobiti od korisnika, ako želim ih da mi daju temperaturu u Fahrenheit? Da? Što bi ti predlažeš? Da. Dakle plovak osjeća prilično razumno. Mi smo, opet, samo nekoliko mogućnosti da Vidjeli smo dosad. Imamo stvari poput char, float, bračnim, int, long long, bool, niz. Dakle, tih, plovak se osjeća prilično razumno. Mogli bismo koristiti dvostruko, pravo, jer ako doista želimo predstavljaju ljudske temperaturu - 98,60000 - možemo koristiti 64 bita za to, ali to se osjeća kao overkill za temperature. Dakle, neka je samo ići s pomičnim zarezom. Sada trebam varijablu. Samo držati jednostavne stvari, ja ću ga nazvati ž, ali ja mogao jednako ispravno nazvati temperatura, ali bilo je u redu. Dakle plutaju F = GetFloat. Čim sam sada odlučio koristiti GetFloat, iako sam trebate napraviti jednu korekciju. Da. Dakle, moramo # include , inače prevodilac je će vikati na nas. Sada imam plovak, dopustite mi ići naprijed i učiniti pretvorbe. Tako je prvi, neka mi također dobiti u naviku ovdje od komentirajući moj broj. Pa opet, komentar je samo zapis na čovjeka koji je nije dio programa po sebi, ali to jednom, te pomaže razumjeti ono što si učinio sljedećeg jutra, ili sljedeći mjesec, to pomaže vaš demonstrator razumiju ono što si učinio ili ono što namjerava učiniti, tako da je općenito vrlo dobra praksa. Svakih nekoliko linija koda, napisati komentar sami ili vaš kolega. Dakle, ovdje ću reći, "Pitaj korisnika za temperaturu." Ne mora biti potpuna rečenica, samo kratka fraza. No, ideja komentirajući u C je da svaki od vaših komentari bi vas osnažiti - ili, recimo, TF ili kolegu - da obranim svoj program i znam točno što radi, a ne toliko čitanja koda, ali čitajući komentare, koji treba biti kratak i jasan. U redu, tako da sada pusti me naprijed i reći, "Pretvorba Celzijusa na Celzija. "Tako ću ići naprijed i učiniti, recimo, plutaju c. Mi ćemo zadržati Celzijevih kao pomičnim zarezom vrijednosti. I neka mi se ubosti na to. Formula je, opet, ovdje gore. Kao 5/9 puta F minus 32. Tako ćemo to učiniti. Dakle, pet podijeljena 9, minus - ups, ja sam to zabrljati gore već. Times. Dakle, 5/9 puta F minus 32. Dakle, F minus 32, zarez. A sada, ovdje dolje, ja ću ići naprijed i kažu, ispisati rezultat. I ovaj dio je jednostavno. Printf. Kako mogu ići o ispisu ovo? Pa, mogao bih reći: "To je broj u Celzija je% f \ n", samo za neke estetike. I što se onda vrijednost ne želim priključiti ovdje printf-a Drugi argument? Ok. Dakle, samo c. Tako ćemo početi s tim, a onda samo vrate 0. Opet, to nema nikakve veze s matematikom. To samo znači da je sve dobro. Sada, je li to točno, ovaj program? U redu. Pa sam napravio neke pogreške. Čak i ako nemate pojma što je programiranje, možete sortirati od zaključiti leđima osnovnoj školi što greške ovdje moglo biti. Što je jedan od prvi? PUBLIKA: [nečujan] David J. MALAN: Da. Tako smo nedostaje zagrade. To je namjerno da sam zagrade u govoru slajd ovdje, jer tu je zapravo taj pojam bi poslovanja, ili prednost, pri čemu određene radnje - množenje - imaju veći obvezujuća, imaju veću prednost, nego stvari kao zbrajanje ili oduzimanje. Tako smo to učinili za godina samo da bi jasno točno ono što matematička operacija bi trebalo biti učinjeno na prvom mjestu. Tako sam vjerojatno bi trebao oponašati upravo to. Inače, računalo vjerojatno će pokušati učiniti nešto poput podjele pet do devet, zatim pomnožite F, onda oduzimati 32 od cijele stvari. Koji nije, u stvari, ono što želimo učiniti. Tako ćemo staviti u zagradu. Dodajmo moje zagrade ovdje, zagrade ovdje. Stavimo ovo ovdje. Evo, upravo sam primijetio drugu pogrešku sam napravio na putu. Da? PUBLIKA: [nečujan] David J. MALAN: Ah. Dobro. Tako smo zapravo imaju isti cijeli Podjela problem od prije. Ja ispraviti da, ajmo vidjeti što je simptom. No, mi ćemo morati ispraviti jedan druga pogreška. Da? PUBLIKA: [nečujan] David J. MALAN: Da. Dakle, glupa pogreška sam napravio, ali nevjerojatno važno. Računalo se ne događa samo progledati kroz prste i pustiti mi koristiti kapitala F, kada sam zapravo proglasio varijabla kao mala f ovdje, u skladu osam. Dakle, moram ispraviti u liniji 11 mom kapitalizaciji, koja Trenutak prije bio glavni F greškom. Što je ovdje? Ukoliko se to mala kao dobro? To bi trebao biti, ali to je slučajnost. To% f nema nikakve veze s varijablom. Dakle, samo da se super jasno ovdje, pusti me naprijed i preimenovati ovu, ukratko, "temperaturu". Dopustite mi da preimenovati ovo "temperatura". Dopustite mi da ne preimenovati to. Jer, opet,% f globalno znači, "Krajnja vrijednost." Ima veze s mojim varijable. No, "temperatura" posvuda je samo malo razvučen, tako da ću se vratiti na moj malim slovom "F" s. Sada, neka mi ići naprijed dolje na moj prozor ovdje. Napravite f2c - što je, opet, proizvoljna sam ime dao ovu datoteku. Čini se da su sastavljeni. Dopustite mi pokrenuti f2c. Upišite. Temperatura u Fahrenheit - ajmo napraviti jedan jednostavan. 32. OK, ispraviti. Ali, ako sam sada napraviti 212 za vrije - osuditi. U redu. Dakle, očito ne ispravi, ako je vaš TF pokušava najmanje dvije vrijednosti. Dakle, ono što je ovdje problem? Pa, već ste stavili prst na ono što je problem. No, zašto je to tako? Do ovdje, kad radim matematiku od 5 podijeljeno devet. Dakle, konceptualno, to je savršeno točno. Totalno skladu s formulom. Ali računala samo učiniti upravo ono što reci im da rade. I ono što mi zapravo govorite računalo ovdje podijeliti cijeli 5 Po integer 9 i dajte mi rezultat. Problem je, međutim, kada se ne podjela koristeći podatke vrste, izlaz je isti tip podataka kao ulaza. I tako, ako su dva ulaza su obje Ints, izlaz ide biti int. I tako pet podijeljeno devet je točka nešto. No, ono što je najbliži cijeli ukazati nešto? Dakle, to je zapravo 0. Dakle, kao što smo razgovarali u ponedjeljak, sve nakon decimale točka dobiva skraćen. To samo dobiva bačena. Dakle, ovo je potpuna pogreška, jer sam možda i samo pomnožiti sve po 0 ovdje. Sada, ja mogu popraviti u nekoliko načina. Ja mogu to učiniti. 5,0 podijeljeno 9,0. Tehnički, ja uopće ne treba učiniti. To čini dovoljno je samo napraviti jedan od brojeva float - ili dvaput - stavljajući decimalnu točku ovdje. Jer ono što se događa sada kada ste podijeliti cijeli broj po float, ili double, računalo će se ostvariti oh, jedna od njih je i precizniji. Dopustite mi griješiti na strani daje vam više preciznosti nego ste namjeravali. Dakle, to će se pretvoriti u rezultat - to će vratiti rezultat kao pomičnim zarezom vrijednosti kao dobro. Tako da će raditi. To bi raditi. A tu je još jedan mehanizam koji ćemo vidjeti u podrobnije sljedeći tjedan. Možete zapravo, kao programer, recite računalo zapravo liječiti jedan tip podataka kao iako su bili drugi. Tako sam zapravo mogao to učiniti. U zagradama, ja mogu reći nešto poput (float), otvorenu zagr, blizu zagr. I to je ono što se zove "lijevanje." Opet, više na ovoj sljedeći tjedan. Ali to je samo programski način govori računalo, da znam devet je cijeli ili dugo. Znam da to nije Krajnja vrijednost. Ali tretirati ga kao takvog svejedno. Dakle, da se baci vrstu podataka znači pretvoriti od jednog do drugog. Iskreno, to je samo malo ružno, pa bih predložiti idemo natrag na izvornom prijedlogu samo pretvaranje ove stvari na pomičnim zarezom vrijednosti ručno. Jer sada je samo super jasno što se događa, a to nije sve što odvlače pažnju. Dakle, ajmo sad vratiti u moj prozor terminala. Napravite f2c. Pusti me naprijed i pokrenuti ovo. I, kao što je na stranu, ti dosadi tipkanja ove naredbe i opet, shvatiti da računala, kao što su Linux ovdje, imaju tendenciju da se prilično pametna. I ako sam pogodio Gore, možemo proći kroz cijeli moj povijesti naredbe, gore i dolje. Dakle, u ovom slučaju ovdje, ja mogu samo otići do pokrenuti napraviti f2c. Ja sam se vikao na, jer sam upravo to učinio drugi prije. To je već do danas. Dakle, sada mogu pokrenuti f2c opet. Pokušajmo 32 celzijusa. Sada pokušajmo 212 celzijusa. Fuj. Čini se da rade. Sada, to je dobro, ali to se osjeća malo proizvoljna da Ja sam pokazujući šest brojeva nakon decimalni bodova. Točno? Ako ste vremenske osoba na TV-u, ti si vrsta doofus ako čitate temperaturu na ovaj stupanj preciznosti. Tako ćemo pojednostaviti ovaj. Dakle, neka je zapravo ide ovdje, na moj printf. I da, želim da plutaju. Ali želim sada navesti preciznost. I ja ću biti malo kratak. Ja ću reći, daj mi jedan bod nakon decimalnog mjesta. Dakle, umjesto da kažu% f, ja ću reći% .1 f. A to samo znači mi dati jednu poziciju nakon decimalne točke. U redu. Pokušajmo ovo ponovno. Dopustite mi da ponovno pokrenuti ga nakon sastavljanja. I sada sam upisati u 32, a ja sam se vratiti jezgrovitija vrijednost. I mogu upisati, sada, 212, i vratiti se na više jezgrovit vrijednost kao dobro. A tu je i druge stvari koje možete učiniti s printf. Vi zapravo možete odrediti koliko je široko broj bi trebao biti. Ako želite imati padding na njega, tako da možete desnom tipkom poravnati ili lijevo-align sve svoje brojeve ili pokušati centar stvari. Dakle, shvatili postoje mali trikovi koje možete učiniti tamo. No, oni su samo svode na format kodova, kao da smo tamo. Dakle, u smislu ovog izdanja prvenstva. Ovo je vrlo dosadan stol proći kroz sustavno. No, shvatili da su autori C dolazi do pravila koja određuju koji operateri imaju veći prednost, više obvezujuća snaga, nego drugima. Dakle, dok je u osnovnoj školi, mi općenito znao da je množenje i dijeljenje, onda zbrajanje i oduzimanje, zatim neke druge stvari. U svijetu programiranja, postoji mnogo više popis stvari. I to nije nešto vrijedno pamćenja sada. Vi ćete dobiti acclimated na njega ne zadugo. No, baš kao u osnovnoj školi, zagrade općenito riješiti pitanja od prvenstva, čineći super jasna računalo i ljudski podjednako što je namijenjen. Dakle, razmislite o ovom samo malo varati list postoji. No, većina od tih detalja nećemo doći do još neko vrijeme. U redu. Sada, neka je izgraditi i odmaknuti od tih glup malo matematički primjeri. Ipak koristiti iste osnove, ali početak izražavajući sebe malo više poput Scratch. Tako je u nule, imali smo ove Boolean izraza. I na engleskom jeziku, logički izraz je ono? Istina ili laž. To je nešto što se procjenjuje na true ili false. 1 ili 0. On ili off. Što god želite to nazvati. Sada u nule, slagalice izgledao ovako. I to je kombinacija, na dnu tamo, od tri slagalice. Jedan zajedno - nešto što ima prazan i prazan. A onda dvije Boolean izraza unutar nje. Tako možete gnijezdo Boolean izraza da biste dobili više komplicirano Boolean izraza. Na primjer, ako je subota, i to je lijepo vrijeme, a zatim otići vani. Ili nešto proizvoljno kao što je to. Tako možete pridružiti Boolean izraza da se s veći istina vrijednost, čiji odgovor se temelji na one manje. Sada, u C, srećom, to je mapiranje zapravo prilično jednostavna. Zagrade pomoći kako bi se stvari jasno ovdje. && Je ono što znači "i". Dakle, to je kako idemo pretvoriti one blokove od nule do C. A za uvjete koje smo vidjeli u nule, na lijevoj ruci strana tamo, ja ih mogu slagati slično u C. Ako je x manje od y, onda to učinite. Inače, ako je x veći od y, onda to učinite. Inače logično moraju biti jednaki, tako kažu da su jednaki. Dakle, sada možemo početi graditi ove stvari. Tako ćemo napraviti primjer. Dopustite mi otvoriti datoteku koja je na stazi stranicama tog Napisao sam unaprijed. To se zove nonswitch.c. A vidjet ćemo zašto je u samo trenutak. Dakle, u ovoj datoteci - nonswitch.c-- prvi shvatili da postoji cijela hrpa komentari na vrhu. To je jednostavno objašnjavajući naziv datoteke, što je ne, i tako dalje. I to očito pokazuje korištenje boolean I-ing - conjoining dva izraza. Dakle, neka je vidjeti kako ovaj program radi. Mogu uključiti svoje dvije datoteke, cs50.h i stdio.h. Ako sam se pomaknite prema dolje, sada, na programu, to je malo duže nego smo prije pisao, ali prilično čitljiv. Tako sam prvi ispis za korisnika, na liniji 18, "Daj mi cijeli broj između 1 i 10". Tako da je tamo. Sada sam dobiti cijeli broj. No, shvatili da GetInt - prilično jednostavna. To samo ide da biste dobili int. To će osigurati da ne dobijete int, a ne niz ili plovak. No, to se neće učiniti bilo kakve granične provjere. To se neće filtrirati brojevi biti između određeni asortiman. Dakle, moramo provesti da sebi. Dakle, baš kao u nule, gdje sam mogao napraviti spoj između dva izraza, mogu to učiniti u C kako slijedi. Ako je n veći ili jednak 1, a n je manje od te ili jednak 3, idem na samom samovoljno odluci da broj se mali broj. Samo radi priopćenju. Inače, ako je n između 4 i 6, print "Vi odabrali medij broj. "Jer ako je n između 7 i 10, ispis" Odabrali Veliki broj. "Else print" Vi pokupiti nevažeći broj. " Zato je logično da slijedi ako smo iscrpljeni naš asortiman. Dakle, shvatite to nije baš kako smo pisati ili veće od jednaka u math class. Točno? Obično ga izvući ovako, s linije ispod nje. No, ne postoji takva tipka na tipkovnici. Tako simbol u C za izražavanje veće ili jednaka je dva lika, i simbol za manje od ili jednak je dva znaka kao dobro. U redu. Dakle, ako sam pokrenuti ovaj program, vjerojatno možete pogoditi što je to će učiniti. Ako sam ići naprijed i učiniti nonswitch, Enter. A onda pokrenuti nonswitch. Daj mi broj između 1 i 10. Ja ću mu dati 11. Podigao sam nevažeći broj. Dopustite mi da pokušam broj tri. Uzela sam mali broj. Dakle prilično jednostavan tamo. Što ako želim promijeniti ponašanje ovog programa i učiniti nešto malo drugačije, umjesto? Pusti me naprijed i reći ovo. Dopustite mi da riješi sve ovo. I dopustite mi da kažem, ako (n == 42). I onda ću ići naprijed i reći print "Vi pokupila pravi odgovor. "Inače ćemo ići naprijed i reći, printf ("Odabrali pogrešan odgovor ");. Ok. Samo zato. Sada, nekoliko bodova možemo napraviti ovdje. Jedan od njih, nisam upišite simbol koji mislite da bi je najrazumnija. Kad želim provjeriti jednakost, ispada da ne koristite znak jednakosti. Umjesto toga koristite jednak znak jednakosti. A zašto bi to moglo biti, samo intuitivno? Da. PUBLIKA: [nečujan] David J. MALAN: Točno. Znak jednakosti već se koristi za dodjelu. Netko nije stvarno mislite da je ovo kroz. I tako sada, kada je u pitanju ravnopravnost testiranja, moramo biti jasniji, i reći jednak jednak. Vrlo česta pogreška je da to učinite. I, ako je u uredovno vrijeme ili negdje sljedeći tjedan ili u Sljedeći dva tjedna učiniti nešto ovako, a zatim boriti s njim za 10, 20 minuta pokušavajući shvatiti ono prokleto bug je, shvatite da ste jedan od onih ljudi koji su tu pogrešku. Dakle, super jednostavan za napraviti. No, cilj je da se sada odbiti tu pogrešku. To bi moglo procijeniti, jer ono što je to zapravo govori? Ako je n dobiva 42. Tako je glagol ljudi koriste, verbalno, izraziti Pojam zadatka je "dobiva." Dakle, ako je n dobiva 42. Dakle, to znači dodijeliti 42 do n. Sada imam Boolean izraza u zagradama, unutar ovog stanja, vrijednost koja je 42. Točno? Jer ako ga ocjenjuje iznutra prema van, ukupne Odgovor je, sada je 42. Dakle, ako sam pitao vas pitanje, "ako (42)," što je da stvarno govoriš? Pa, Boolean izraza može biti samo true ili false. 1 ili 0. On ili off. Tako mi se čini da imaju corner slučaj ovdje, gdje svi Odjednom, govorim "ako (42)". To nije Boolean vrijednost. Dakle, ono što rade računala, iako je to zapravo izjednačava ništa to nije 0 tumači da bi bilo istinito. 1. Na. Oni su svi funkcionalno ekvivalentne. Samo vrijednost 0, ili ključna pogrešna, jer ćemo na kraju vidjeti, je zapravo lažna. Dakle, "ako (42)" zapravo bi bilo istinito, jer je to od nule. Dakle, da budemo precizniji ovdje, Boolean vrijednost stvarno nije tako puno istinita ili lažna, ali za to slučaju, ako je 0 ili od nule. Dakle, netočno ili ne lažna. I to nam omogućuje da obuhvati sve više mogućnosti u zagradi izraza. Dakle, trebamo, uvijek je tako pažljivo, reći ovo - if (n == 42). Jednostavno zato moramo odrediti test jednakosti, ne dodjeljivanje vrijednosti. Što je još napomenuti ovdje? Ove vitičastim zagradama su zapravo i nije potrebno. Ja sam ih rade samo da bi bili NIT-picky ovdje. No, kada imate uvjet da ima samo jedan redak broj, kao pogodnost, programeri ne treba koristiti su vitičastih zagrada. Dovoljno je samo alineji, iz estetskih razloga, a zatim napisati svoju liniju koda. Tek kada želite pisati dvije linije koda - za Primjerice, drugi printf ("Bok!"). Ako želite učiniti da, to je slomljen. Možete alineje sve što želite, ali je činjenica da imate upisali dvije linije koda bez vitičastih zagrada znači da je ovaj program ne bi pokrenuti ispravno, ili ukoliko bi ni sastaviti ispravno. Dakle, za sada, da budem iskren, mislim da je najbolji navika je samo koristiti vitičastih zagrada, i vidjet ćete da oni čine super jasno što se događa. Također, kao stranu - pogotovo ako ste među onima koji koriste preporučene knjige ili izvori online - shvatiti da postoji taj pojam u stilu programiranje. A neki ljudi zapravo vole staviti kovrčavu braće ovamo na liniji. Neki ljudi više vole raditi smiješne stvari, sviđa stavite ih ovdje. Nema krivo odgovor kada je u pitanju stil, ali to je pogrešno. No, neki ljudi to učiniti. [Smijeh] David J. MALAN: Pa sam spomenuo to sada, jednostavno zato što su ste pročitali na stvari u knjigama ili online, ti si idući u dobiti različite poruke iz različitih nastavnika i različiti autori. I samo shvatiti da, funkcionalno, oni su općenito odgovara, ali budite dosljedni. Dakle, u ovom slučaju, mi ćemo standardizirati na kovrčava aparatić podstava gore na lijevoj strani. U redu. Dakle, idemo naprijed i sada pokrenuti to, i vidjeti što se događa s ovim programom. Make nonswitch. Onda trčanje nonswitch. Daj mi cijeli broj između 0 i - tako da nije relevantno više, ali ja samo idem samovoljno reći 42. I ja sam odabrao pravi odgovor. Pa sad, ajmo zapravo se to u nekom drugom smjeru. Ispada da je neka druga sintaksa smo možete koristiti u programu. Evo novi komad sintakse koja je funkcionalno isti, ali samo uvodi još jedan način izražavanja sebe. Dakle, to je ono što se zove "Naredba switch." A Naredba switch djeluje kako slijedi. To traje, u zagradama, vrijednost koju želite "Prekidač" na. Želite da se ponašaju drugačije na temelju njegove vrijednosti. Dakle, to znači prekidač na vrijednost n. A što to znači? Pa, ako n je 1 ili 2 ili 3, naprijed i ispis "You pokupila veliki broj ", a onda razbiti. Razlog za break je da način na koji funkcionira C je kao Čim se pronađe predmet koji odgovara, ona počinje izvršenja sve kod ispod njega. Dakle, ako imam jednu liniju koda, kao što sam to ovdje na liniji 27, to dobiva pogubili. Ako sam dodati još jednu liniju ovdje, to dobiva pogubili. Druga linija ovdje, to dobiva pogubili. Program zaustavlja samo izvršava ono što je ispod primjenjivo slučaj gubitka kad sam izričito reći "break". Dakle, u redu. Desno, u ovom slučaju, kao rezultat. Slučaj 4 ili 5 ili 6, na sličan način, ide ispisati poruku. U ovom slučaju, srednje broj. Break. Slučaj 7, 8, 9, 10, to će ispisati "Ti pokupio veliki broj. "Break. A tu je i doslovno ključna zove "default" da je učinkovito kao "drugi" izgraditi. Dakle, nova sintaksa, ali intelektualno, ništa at svi novi ovdje. To je baš kao Scratch. Ako, drugo ako drugdje, ako, recimo blok. Tako da je uključen verzija ovog programa. Ali primijetite da smo to učinili s brojevima ovdje. Dopustite mi otvoriti drugi verziju, samo da pokazuju nešto malo više betona. Dakle, ovdje imamo ocjene umjesto. Ispada možete koristiti prekidače ne samo na integers, ali na likovi. Nije u svim vrstama podataka, ali barem na likovima. Dakle ovdje smo mogli učiniti nešto slično, ako je vrijednost C koji korisnik upisao u, u skladu 19, pomoću getchar funkciju, je grad ili mala slova, ajmo ga tumače kao razred, i kažu da bere izvrsnu ocjenu. A dolje uz switch, imamo druge slučajevi za "B" i "C", a s., i tako dalje. Ali ajmo sad zaokružuju jednu drugu stvar. A opet, nekako leti kroz neke od tih primjera. No, to je stvarno tako da ih možemo primijeniti, sada - ili stvarno, samo ih prevesti sada - na C. Pa neka mi ići naprijed i učiniti. Idem otvoriti novu datoteku. I ja ću to učiniti uključuju . A onda ću to učiniti int main (void). Dopustite mi da spasi ovu sliku kao loop.c. Baš kao primjer. I ja ću ići naprijed i učiniti sljedeće. Želim napisati vrlo zahtjevan program. Tako 10. Ajmo to učiniti. 9. U redu. Čim počnete raditi to u programiranju, ti si vjerojatno radiš nešto krivo. No, mi ćemo početi tamo ionako. Ups. To je zapravo krivo. 7. 6. 5. 4. Ništa se neće dogoditi kad dođemo do 0. 3. 2. 1. Ok. 0. Izbriši. U redu. Dakle, povratak 0. Dakle, ovaj program očito će učiniti ono što je vrlo dosadnog kaže da će to učiniti. To će ispisati sve one vrijednosti, od vrha do dna. Pa neka mi to napraviti petlju. A onda - ups. Make petlju. Bio sam u krivu imeniku. I sada neka mi pokrenuti petlju. Upišite. Sjajno. Vrlo lijep. Nice, dugo program. U redu, ali sada hajdemo to učiniti bolje. Baš kao u nule, kada ste počeli koristiti loop izgradnju, umjesto samo kopirati i zalijepiti sve slagalice, neka mi predstaviti ovu stvar. Dakle, u C, postoje razne petlje konstrukti, od kojih jedna izgleda ovako. "Za" petlja ima tri stvari, odvojene dvije zarezom. I onda, unutar tijela petlje, da tako kažemo - stvari unutar od vitičastih zagrada - možemo nešto učiniti opet i opet. Dakle, ono što sam ovdje na zaslonu, to je doslovno samo komentar. / / Ovdje znači dolazi komentar. To nije broj. Ovo je samo engleski opis, za mene, čovjeka. Dakle inicijalizacije, uvjeti i ažuriranja. Pa, neka je vidjeti kako se to radi. To mi omogućuje da prepisati ovaj program kako slijedi. Za - tako da ovdje dolazi moj petlju - int ja - ovdje dolazi varijabla zove "ja" - dobiva inicijaliziraju 10. Dakle, tu je moj inicijalizacije. Želim napraviti ovu petlju tako dugo kao "ja" ili veći jednaka 0. I na svakoj iteraciji ove petlje, želim da mi je činiti -. Tako smo vidjeli + + u ponedjeljak. - Je suprotno. To decrements vrijednost do 1.. Unutar ove petlje, želim nešto napraviti. Dakle, ja ću reći nešto poput printf. Ja ne želim reći 10 sada, jer je to očito samo će ispisati istu vrijednost. Što želim ispisati umjesto toga, vjerojatno? Da. Dakle, "ja". Dakle,% d, ja. Dakle, ja ću ukrasti jednu od tih ideja od ranije - ovo zamjena za oblikovanje kodova - i onda ovdje dolje, na dnu, ja ću se vratiti 0, samo za dobru mjeru. Ali sada, imam više jezgrovit program. To je samo nekoliko redaka, a ne nekih 10 ili 11 linija. Pusti me da moj upit ovdje dolje. Remake petlja. Repriza petlju. A čini se da se ista. Sada, program nije više zanimljiv. Ali sada mogu upisati nešto poput ovoga. Ja to ne mogu promijeniti na 100. I onda mogu rekompiliranje moj program. I onda ja mogu ponovno pokrenuti moj program. I sada to ide super brzo na današnjim računalima. No, tu imam - i zapravo, moj vraćati tampon ne čak idu tako daleko. Tu ćemo ići. Dakle, tu imamo sve sto. No, to je lako napraviti greške ovdje. Što će biti očekivano ponašanje, ako sam slučajno to učiniti? Dakle, ona se osjeća kao beskonačna. Dakle, neka je vidjeti ako je računalo ponaša. Pa neka mi ići naprijed i učiniti petlju. I neka mi pokrenuti petlju. Dakle, ajmo se vratiti na to u samo jednom trenutku. Mi ćemo pustiti da radi. Zato što bismo trebali brojati do, minimalno? Vjerojatno barem dvije milijarde, ako imamo da su mnoge bitova, a mi smo koristeći pozitivne vrijednosti. Dakle, neka je skočiti natrag ovdje. Osim ove vrste petlji, imamo ono što se zove dok petlje. Dakle, baš kao u nule, što je zauvijek blokovi, a imali ste Ponovljeni blokova. Isto tako, u C, imate samo druge načine od sebe izražavanje. Dakle, imate taj pojam while petlje koji vam omogućuje da izraziti sebe malo drugačije. I onda imate nešto što se zove učiniti-while petlja, koji djeluje nešto drugačije, kao dobro. A mi ćemo zafrkavati njih, osim tijekom vremena. Ali neka je pogledati ovo posljednja ovdje. Ako idemo u - još uvijek traje. To je prilično beskonačna. Tako da me pusti na pozitivan i pokazati kako možemo zapravo dr korisničkog unosa malo učinkovitije. To je prilično kratka programa. I ovdje imamo, u glavnom, int n deklaracije. Tako mi dati varijablu nazvanu n. Sada, doslovno sam reći "Učiniti." A onda sam dobio otvorenu kovrčava braće, blizu kovrčava braće. A onda primijetite, odmah nakon toga, kaže, dok n je manje od 1. Dakle, primijetite da su ove linije - 19-24 - sastaviti kolektivno učiniti-while petlja. I opet, nova sintaksa, nije nova ideja. To je samo još jedan način petlje, sintaktički. Pa što to učiniti? Učinite sljedeće dok je n manji od 1. Dakle, ono što želim učiniti? Zahtijevam da li mi dati pozitivan cijeli broj. Tada sam zapravo pokušati dobiti cijeli od korisnika. No, u smislu kako bi operacija ovdje, jer dok je uvjet ovdje, onda sam ću provjeriti, je n manji od 1? Dakle, pretpostavimo da korisnik - nakon što je zahtijevao na ovaj način - vrste u vrijednosti 0. To stanje će biti istinita ili lažna? Pa, to je zapravo događa da bi bilo istinito. Budući n je 0, a 0 je manji od 1. Dakle, što to znači? Učinite to opet. Učinite to opet. Učinite to opet. Samo jednom da je uvjet procjenjuje na FALSE. Ako sam upisati 42. Pa ne, 42 ne manje od 1. Stoga ova petlja je učinio izvršenja. I tako u tom trenutku, program će reći, hvala za 42, u ovom slučaju. Sada da ste ovaj način izražavanje sebe - Ne smijemo čekati da se to završi. To će potrajati neko vrijeme. Da bi se nastavio sljedeći put, možda. Ali sada, imate mogućnost nadamo da razumiju Malo monstrum humor. Isprike. To nije reprezentativan za humor u informatici svijet, ali to je slatka. [Smijeh] Idemo na kraju na toj bilješci. A mi ćemo vas vidjeti u ponedjeljak. [Pljesak]